Определение языка текста

Исходные данные: есть сотни тысяч небольших текстов, написанных на всех известных науке языках.
Цель: оставить только те из текстов, которые написаны на русском или английском языке, остальные отбросить.

Как делаю сейчас:
1. С помощью PCRE выкидываю из текста всё, кроме букв (\p{^L}).
2. Так же убираю русские и английские буквы ([а-яa-z]).
3. Если что-то осталось — считаю текст не русским и не английским, соответственно отбрасываю.

В текущем раскладе есть как false positive так и false negative ошибки, это расстраивает.
Первые: в немецком или французском, например, тексте, может по несчастливой случайности не быть ни одного умляута и он посчитается английским.
Вторые: в корректном русском или анлийском тексте может встретиться какое-нибудь, например, имя собственное с умляутом, либо цитата из других языков — текст будет ошибочно отброшен.

Вопрос: не говоря о стопроцентном распознавании языка (оставим это экспертным системам и прочему ИИ), есть ли возможность снизить число ошибок распознавания? Интересуют готовые библиотеки (PHP, perl) / публичные веб-сервисы либо алгоритм, который достаточно прост в имплементации.
  • Вопрос задан
  • 10083 просмотра
Пригласить эксперта
Ответы на вопрос 6
@Alexxander
1. Для небольших текстов 100% распознавание невозможно будет в принципе.
2. Для улучшения распознавания надо делать экспертную систему с базой слов и с частотами различных языков.

Но возможно получится воспользоваться Google переводчиком с помощью API или еще каким-нибудь.

Обзор определителей языков есть здесь. Может быть у некоторых есть API.
Ответ написан
GeniyZ
@GeniyZ
Можно сравнивать частотный характеристики текстов.

www.statsoft.ru/home/portal/exchange/textanalysis.htm

как видно — одни и те же буквы в разных языках используются с разной частотой — за счёт этого можно улучшить распознавание языка. И отделять, казалось бы неотделимые =) (при достаточном объёме текста, конечно же)
Ответ написан
Комментировать
@lugansk
>> 1. С помощью PCRE выкидываю из текста всё, кроме букв (\p{^L}).
>> 2. Так же убираю русские и английские буквы ([а-яa-z]).
>> 3. Если что-то осталось — считаю текст не русским и не английским, соответственно отбрасываю.

В английском тексте могут быть заимствованные слова, сохранившие оригинальное написание café, Übermensch и т.д. Кроме того, текст на языке с латинским алфавитом может набираться без диакритики, если он набирается на компьютере, на котором установлена только английская раскладка.

Сделайте для каждого нужного языка список распространённых в нём служебных слов, местоимений и т.д., которые не используются в остальных языках и проверяйте их наличие в тексте.

К примеру, для итальянского, немецкого, французского замечательно подойдут артикли, местоимения и вспомогательные глаголы (К примеру, немецкий: ein, eine, eines, einem… der, die, das, dem, den… bin, bist, ist, war, wurde… ich, er, sie..., также приставка ge- при окончании -en или -t и т.д.). Только не доверяйте одному найденному слову на 100%, к примеру, bin (нем. = «есмь») есть в английском (напр. «recycle bin», вообще, весело, наверно, немцам английский учить… сравните в этих языках значения слов mist, after, gift).

Кроме того, можно добавлять вероятность, обнаружив типичные для данного языка сочетания букв (для немецкого sch, ei...). Для определения украинского кроме наличия в тексте є, ї, і, ґ, отсутствия ы и ъ можно использовать поиск і в качестве союза.

Если языков немного, то несложно собрать данные об их особенностях.

Ещё можете поэксперементировать с Google Language API (пример).

Кроме того, можете погуглить «language identifier», может найдётся что-то готовое подходящее.
Ответ написан
barmaley_exe
@barmaley_exe
А если считать частоту символов? Т.е. посчитать процент русских букв, английских и прочих?
От французского без умляутов это не спасет, а вот с русским текстом поможет.
Далее, проверка на английский: поискать в тексте слова the, is, a (Может что-то еще часто употребляемое). Не знаю, есть ли они в других языках, но в тексте на английском должны быть.
Ответ написан
shogunkub
@shogunkub
Программист+Инженер-электронщик
Насчёт имен собственных — нужно анализировать не только частоту символов, но и их локализацию. Т.е. если у нас остались какие-то буквы помимо русских и английских — ищем их в тексте. Если они рядом, и процент их меньше «порога срабатывания»(коэффициенты для «рядом» и «порог срабатывания» подобрать экспериментально), то игнорируем эти посторонние буквы при определении языка.
Ответ написан
посмотрите вот этот топик, я думаю идею можно очень легко адаптировать для определения языка.
habrahabr.ru/blogs/php/107945/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы