Определение языка текста на python с помощью langdetect

В данном посте покажем, как с помощью библиотеки langdetect определить язык текстового фрагмента. Для начала необходимо поставить библиотеку

$ pip install langdetect

Заметим, что код портирован на питон из гугловской библиотеки language-detection, поэтому качество распознавания языка находится на уровне, во всяком случае у меня пока особых претензий не было.
Далее, всё весьма стандартно, импортируем библиотеку и вызываем функцию «детектирования языка», пример:

from langdetect import detect
detect("здесь произвольный фрагмент текста на вход")
# результат: ru

По умолчанию поддерживается 55 языков, двухбуквенные коды взяты из стандарта кодов языков, и если быть подробнее, то они такие: af, ar, bg, bn, ca, cs, cy, da, de, el, en, es, et, fa, fi, fr, gu, he, hi, hr, hu, id, it, ja, kn, ko, lt, lv, mk, ml, mr, ne, nl, no, pa, pl, pt, ro, ru, sk, sl, so, sq, sv, sw, ta, te, th, tl, tr, uk, ur, vi, zh-cn, zh-tw

Но давайте копнём чуть глубже, ведь часто встречаются интернациональные тексты, в которых встречаются слова из разных языков. В таком случае на выходе хотелось бы получать список языков. Определение нескольких языков может быть решено с помощью detect_langs .

from langdetect import detect, detect_langs
from langdetect import DetectorFactory
DetectorFactory.seed = 0

detect_langs("Otec matka syn.") 
# результат [sk:0.572770823327, pl:0.292872522702, cs:0.134356653968]

Как видим, detect_langs определил не только языки, использованные в тексте, но ещё и их вероятности. Также возможно у Вас возник вопрос, зачем я использовал DetectorFactory? Дело в том, что алгоритм не является детерминированным, т.е. при разных запусках он может выдавать разные результаты. Если Вы хотите избежать разнозначности при разных запусках, то советую использовать DetectorFactory.seed = 0, если же такой необходимости нет, то лучше сэкономить пару строк.

Далее подметим, что detect_langs вернул не просто языки, а лист объектов Language, и возникает вопрос, как же получить языки и вероятности из этого листа? Смотрите пример:

from langdetect import detect_langs

list_of_languages = detect_langs("Здесь некий текст") 
for l in list_of_languages:
    # используем атрибуты lang и prod
    print(l.lang, l.prob)
    # результат: ru , 0.99

Определение языка может быть полезно при реализации поиска (для выдачи более релевантных результатов), а также для запуска языко-зависимых программ. Как видите с помощью langdetect определить язык можно всего в 2 строки!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>