Как эффективно определить язык для строки в списке python? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытался с langdetect, однако мои результаты не являются удовлетворительными. См. Ниже:

from langdetect import detect   
myText = ['something like this', 'hello, I hope', 'bonjour', 'guten tag', 'hola amigos']

languages = []

for x in range(len(myText)):
    languages.append(detect(myText[x]))

Языковая переменная возвращает:

['en', 'en', 'hr', 'sv', 'so']

Может ли кто-нибудь порекомендовать более эффективный способ определения языка строк для моего сценария выше? Спасибо!

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

У вас просто недостаточно текста, чтобы правильно определить язык. Проверьте вероятности, сообщенные методом detect_langs:

from langdetect import detect, detect_langs
myText = ['something like this', 'hello, I hope', 'bonjour', 'guten tag', 'hola amigos']

languages = []

for text in myText:
    languages.append((text, detect_langs(text)))

print(languages)

Дает:

[('something like this', [en:0.7142843359964415, no:0.2857134272509894]), 
('hello, I hope', [en:0.5714282536622661, it:0.42856936839505744]), 
('bonjour', [hr:0.4285730214431372, sq:0.28571322755605805, fr:0.2857129560702645]),
('guten tag', [sv:0.999995044011124]), 
('hola amigos', [so:0.9999965325258])]

Посмотрите, как смешаны результаты для bonjour - ни один язык не имеет конкретного опережения над другими ,

Теперь, если я добавлю еще немного текста к этому примеру:

from langdetect import detect_langs

print(detect_langs('Bonjour, mon ami'))

Это даст:

[fr:0.8571383531700392, sq:0.14285710967856416]

Что намного точнее.

Итак, чтобы ответить на ваш вопрос: получите больше данных

0 голосов
/ 28 апреля 2020

Это дает вам точный результат, но в код ISO 639-1 краткий формат языков. Вы можете использовать словарь для сопоставления этих коротких кодов с соответствующим им широким языковым названием, например:

language_dict = {'en' : 'english', ...}

В качестве альтернативы вы можете проверить textblob :

from textblob import TextBlob
b = TextBlob(myText[2])
b.detect_language()
# output : 'fr'

Для списка myText соответствующий результат:

['en', 'en', 'fr', 'de', 'es']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...