[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определение языка текста
DedMorozzz
Имеется задача, определить английский ли язык текста
Специфика текста - адресса, т.е. проверяемый текст будет вида "440 5th Avenue North, Seattle"
Другими словами - небольшой набор слов, а не сочинения

Нашел разные варианты в нете, но всё не то.
Вот что более всего подошло - http://pear.php.net/package/Text_LanguageDetect
Но к сожалению результаты не впечатлили. Слово "Street" не определяет, что это англ язык. Как и площадь.
Примеры:
"440 5th Avenue North, Seattle"
результат
Цитата
Array
(
    [french] => 0.2647619047619
    [english] => 0.21619047619048
    [italian] => 0.17904761904762
    [portuguese] => 0.17460317460317
    [slovene] => 0.14809523809524
    [czech] => 0.14777777777778
    [pidgin] => 0.14507936507937
    [norwegian] => 0.14380952380952
    [estonian] => 0.12793650793651
    [albanian] => 0.12587301587302
    [hawaiian] => 0.12507936507937
    [slovak] => 0.11920634920635
    [finnish] => 0.11920634920635
    [latin] => 0.11825396825397
    [romanian] => 0.1147619047619
    [spanish] => 0.11396825396825
    [vietnamese] => 0.11222222222222
    [croatian] => 0.10666666666667
    [swedish] => 0.10619047619048
    [german] => 0.09031746031746
    [welsh] => 0.084444444444444
    [danish] => 0.079047619047619
    [turkish] => 0.064444444444444
    [latvian] => 0.063015873015873
    [polish] => 0.061587301587302
    [icelandic] => 0.048888888888889
    [indonesian] => 0.046507936507936
    [dutch] => 0.037619047619048
    [lithuanian] => 0.02984126984127
    [swahili] => 0.027301587301587
    [cebuano] => 0.024761904761905
    [hungarian] => 0.024285714285714
    [bengali] => 0
    [azeri] => 0
    [somali] => 0
    [mongolian] => 0
    [hausa] => 0
    [tagalog] => 0
)

Тут вроде бы в топе, но всё равно, не то

"Skate Park, Seattle, WA" (и без сиатла, просто Skate Park) Результат одинаков
результат
Цитата
Array
(
    [romanian] => 0.30473684210526
    [italian] => 0.29947368421053
    [french] => 0.29298245614035
    [german] => 0.27473684210526
    [slovene] => 0.24456140350877
    [estonian] => 0.23842105263158
    [norwegian] => 0.23842105263158
    [danish] => 0.2380701754386
    [portuguese] => 0.23526315789474
    [dutch] => 0.23228070175439
    [albanian] => 0.23
    [english] => 0.22842105263158
    [spanish] => 0.21789473684211
    [swahili] => 0.21456140350877
    [swedish] => 0.21315789473684
    [slovak] => 0.21035087719298
    [polish] => 0.19614035087719
    [hawaiian] => 0.17912280701754
    [czech] => 0.17280701754386
    [latvian] => 0.17245614035088
    [indonesian] => 0.16157894736842
    [latin] => 0.15175438596491
    [finnish] => 0.14157894736842
    [lithuanian] => 0.13701754385965
    [croatian] => 0.13438596491228
    [pidgin] => 0.12754385964912
    [cebuano] => 0.12210526315789
    [hausa] => 0.10719298245614
    [turkish] => 0.078947368421053
    [hungarian] => 0.077719298245614
    [somali] => 0.069473684210526
    [icelandic] => 0.064210526315789
    [tagalog] => 0.056491228070175
    [azeri] => 0.045263157894737
    [vietnamese] => 0.038947368421053
    [welsh] => 0.022280701754386
    [mongolian] => 0
    [bengali] => 0
)


В общем - приведёный пример был бы идеальным если бы работал так как надо
И тут вопрос - сталкивался ли кто с похожей задачей и как решали?

Абсолютно идеально подходит Гугл транслейт, выдаёт на все проверяемые тесты - правильно. Но у него ограничения и стоит после - дорого. 20 баксов за 1М символов

И что бы английские адресса не определять(львиная доля) транслейтом, хотелось бы оффлайновым детектором проверять

Для чего это надо? Для поиска
Все адресса хранятся на англ. языке. Т.е. Юзер вводит Москва, Россия, в бд уходит Moscow, Russia (эт грубый пример, что бы ясно было для чего)
А в дальнейшем вводить будет в поиске "Москва", а такого адресса нету и не найдёт. Соотв. через гугл мапс апи, будет получатся снова таки Moscow, Russia и юзер найдёт то, что ему надо
И если юзер изначально ввёл Lenina Street 15 или 440 5th Avenue North, Seattle (любой англ адресс, не итальянский, немеций и французский) - не гонять через мапс апи и сразу искать по введённому.

Проверять по буквам - смысла 0. Письменый немецкий - использует обычную латиницу(и не только немецкий). ß заменяется на ss, ну и так далее.
И если юзер введёт "Strasse Lenina 15" - необходимо через мапс апи получить Lenina Street 15

Т.е. в сухом остатке - интересует: существует ли оффлайн определитель языка, по нескольким словам, где приоритет - адресса. Т.е. слова "Площадь, улица, проспект, штат..."

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.