chardet.detect возвращает пустой язык - PullRequest
1 голос
/ 04 мая 2020

Я использую chardet.detect для определения языка строки, как в одном из предложенных решений здесь

мой код выглядит так:

import chardet

print(chardet.detect('test'.encode()))
print(chardet.detect('בדיקה'.encode()))
print(chardet.detect('тест'.encode()))
print(chardet.detect('テスト'.encode()))

полученный результат выглядит следующим образом:

{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
{'encoding': 'utf-8', 'confidence': 0.9690625, 'language': ''}
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
{'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}

мой ожидаемый результат должен выглядеть следующим образом:

{'encoding': 'ascii', 'confidence': 1.0, 'language': 'English'}
{'encoding': 'utf-8', 'confidence': 0.9690625, 'language': 'Hebrew'}
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': 'Russian'}
{'encoding': 'utf-8', 'confidence': 0.87625, 'language': 'Japanese'}

Я предпочитаю использовать chardet в качестве своего решения, потому что я уже импортирую его в моем приложении, и я хочу сохранить его как можно более тонким

1 Ответ

2 голосов
/ 05 мая 2020

Модуль chardet не очень хорош для обнаружения кодировок или языков. Основываясь на параметрах, перечисленных в Python: Как определить язык? Я обнаружил, что pyCLD3 прост в установке и обеспечивает хорошее обнаружение даже при довольно коротких фрагментах текста, хотя и не идеально с отдельные слова, такие как ваш тест:

>>> cld3.get_language("test")                                              
LanguagePrediction(language='ko', probability=0.3396911025047302, is_reliable=False, proportion=1.0)

>>> cld3.get_language("בדיקה")                                             
LanguagePrediction(language='iw', probability=0.9995728731155396, is_reliable=True, proportion=1.0)

>>> cld3.get_language("тест")                                              
LanguagePrediction(language='bg', probability=0.9895398616790771, is_reliable=True, proportion=1.0)

>>> cld3.get_language("テスト")                                            
LanguagePrediction(language='ja', probability=1.0, is_reliable=True, proportion=1.0)

Похоже, три из четырех, потому что тест также болгарский. Модуль langid делает все это правильно, так что это также может быть хорошим вариантом.

...