Подтвердить что ты не робот

NLTK и определение языка

Как определить, на каком языке написан текст с использованием NLTK?

В примерах, которые я видел, используется nltk.detect, но когда я установил его на свой Mac, я не могу найти этот пакет.

4b9b3361

Ответ 1

Вы сталкивались с следующим фрагментом кода?

english_vocab = set(w.lower() for w in nltk.corpus.words.words())
text_vocab = set(w.lower() for w in text if w.lower().isalpha())
unusual = text_vocab.difference(english_vocab) 

с http://groups.google.com/group/nltk-users/browse_thread/thread/a5f52af2cbc4cfeb?pli=1&safe=active

Или следующий демо файл?

https://web.archive.org/web/20120202055535/http://code.google.com/p/nltk/source/browse/trunk/nltk_contrib/nltk_contrib/misc/langid.py

Ответ 2

Эта библиотека не из NLTK, но, безусловно, помогает.

$sudo pip install langdetect

Поддерживаемые версии Python 2.6, 2.7, 3.x.

>>> from langdetect import detect

>>> detect("War doesn't show who right, just who left.")
'en'
>>> detect("Ein, zwei, drei, vier")
'de'

https://pypi.python.org/pypi/langdetect?

P.S.: Не ожидайте, что это будет работать правильно всегда:

>>> detect("today is a good day")
'so'
>>> detect("today is a good day.")
'so'
>>> detect("la vita e bella!")
'it'
>>> detect("khoobi? khoshi?")
'so'
>>> detect("wow")
'pl'
>>> detect("what a day")
'en'
>>> detect("yay!")
'so'

Ответ 3

Хотя это не относится к NLTK, у меня были отличные результаты с другой библиотекой на основе Python:

https://github.com/saffsd/langid.py

Это очень просто импортировать и включает в себя большое количество языков в своей модели.

Ответ 4

Слишком поздно, но вы можете использовать классификатор textcat в nltk, здесь. В этой статье обсуждается алгоритм.

Он возвращает код страны в ISO 639-3, поэтому я бы использовал pycountry, чтобы получить полное имя.

Например, загрузить библиотеки

import nltk
import pycountry
from nltk.stem import SnowballStemmer

Теперь давайте рассмотрим две фразы и guess их язык:

phrase_one = "good morning"
phrase_two = "goeie more"

tc = nltk.classify.textcat.TextCat() 
guess_one = tc.guess_language(phrase_one)
guess_two = tc.guess_language(phrase_two)

guess_one_name = pycountry.languages.get(alpha_3=guess_one).name
guess_two_name = pycountry.languages.get(alpha_3=guess_two).name
print(guess_one_name)
print(guess_two_name)

English
Afrikaans

Затем вы можете передать их в другие функции nltk, например:

stemmer = SnowballStemmer(guess_one_name.lower())
s1 = "walking"
print(stemmer.stem(s1))
walk

Отказ от ответственности, очевидно, это не всегда будет работать, особенно для разреженных данных

Экстремальный пример

guess_example = tc.guess_language("hello")
print(pycountry.languages.get(alpha_3=guess_example).name)
Konkani (individual language)