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

SkiesX

Есть текст. Нужно определить язык этого текста. Русский или украинский. Использовал api от яндекс переводчика, но там стоит лимит на 1 миллион символов в день. 1М это мало. Может кто то знает какие то библиотеки на python3? Заранее спасибо.

upd: мне хотя бы узнать, является ли текст украинским.

2 ответа

SkiesX

Можно воспользоваться langdetect:

In [65]: from langdetect import detect
In [66]: %paste
detect('"Зоряні війни" офіційно оголосили назву нового епізоду')
## -- End pasted text --
Out[66]: 'uk'
In [67]: %paste
detect('Дональд Трамп подписал указ об официальном выходе США из Транстихоокеанского партнерства')
## -- End pasted text --
Out[67]: 'ru'

Если нужно сделать оценку:

In [78]: from langdetect import detect_langs
In [79]: %paste
detect_langs('Спробуй вгадати який це "язык"')
## -- End pasted text --
Out[79]: [ru:0.7142865675080949, uk:0.28571330147081586]
In [80]: %paste
detect_langs('Ты говоришь на "мові"')
## -- End pasted text --
Out[80]: [uk:0.9999979837984605]


SkiesX

Самый простой и быстрый вариант использовать cld2-cffi:

pip3 install cld2-cffi

Пример кода:

import cld2
# текст на Русском
details = cld2.detect("Это мой образец текста")
print(str(details))
# Вывод:
# Detections(is_reliable=True, bytes_found=43, details=(Detection(language_name='RUSSIAN', language_code='ru', percent=97, score=658.0), Detection(language_name='Unknown', language_code='un', percent=0, score=0.0), Detection(language_name='Unknown', language_code='un', percent=0, score=0.0)))
# текст на Украинском
details = cld2.detect("Це мій зразок тексту")
# Вывод:
# Detections(is_reliable=True, bytes_found=39, details=(Detection(language_name='UKRAINIAN', language_code='uk', percent=97, score=862.0), Detection(language_name='Unknown', language_code='un', percent=0, score=0.0), Detection(language_name='Unknown', language_code='un', percent=0, score=0.0)))

licensed under cc by-sa 3.0 with attribution.