2015-09-23 11 views
8

Niedawno podjąłem próbę użycia NLP i próbowałem użyć NLTK i TextBlob do analizy tekstów. Chciałbym stworzyć aplikację, która analizuje recenzje zrobione przez podróżników, więc muszę zarządzać wieloma tekstami napisanymi w różnych językach. Muszę wykonać dwie główne operacje: POS Tagging i lematyzację. Widziałem, że w NLTK istnieje możliwość wyboru odpowiedniego języka dla zdań tokeny tak:Wielojęzyczne narzędzie NLTK do tagowania POS i Lemmatizer

tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle') 

ja nie znalazłem właściwą drogę, aby ustawić język dla POS Tagging i Lemmatizer w różnych językach jeszcze. Jak ustawić poprawne corpora/słownik dla tekstów nieangielskich, takich jak włoski, francuski, hiszpański lub niemiecki? Widzę również, że istnieje możliwość importu modułów "TreeBank" lub "WordNet", ale nie rozumiem, jak mogę z nich korzystać. W przeciwnym razie, gdzie mogę znaleźć odpowiednie korporacje?

Czy możesz podać mi jakieś sugestie lub referencje? Uważaj, że nie jestem ekspertem od NLTK.

Wielkie dzięki.

Odpowiedz

3

Nie ma żadnej opcji, którą można by przekazać do funkcji znaczników POS i znaczników POS NLTK, które spowodują, że będą przetwarzać inne języki.

Jednym z rozwiązań byłoby nabycie korpusu treningowego dla każdego języka i wyszkolenie własnych tagerów POS za pomocą NLTK, a następnie opracowanie rozwiązania lematyzującego, być może opartego na dyktowaniu, dla każdego języka.

To może być jednak przesada, ponieważ istnieje już pojedyncze rozwiązanie zatrzymania dla obu zadań w języku włoskim, francuskim, hiszpańskim i niemieckim (i wielu innych językach): TreeTagger. To nie jest tak nowoczesne, jak POS-taggers i lemmatizers w języku angielskim, ale nadal ma dobrą robotę.

Musisz zainstalować TreeTagger w swoim systemie i móc wywoływać go z poziomu Pythona. Oto GitHub repo by miotto, który pozwala ci to zrobić.

Poniższy fragment pokazuje, jak sprawdzić, czy wszystko jest ustawione prawidłowo. Jak widzicie, jestem w stanie posortować etykiety POS i lematyzować w jednym wywołaniu funkcji i mogę to zrobić równie łatwo w języku angielskim i francuskim.

>>> import os 
>>> os.environ['TREETAGGER'] = "/opt/treetagger/cmd" # Or wherever you installed TreeTagger 
>>> from treetagger import TreeTagger 
>>> tt_en = TreeTagger(encoding='utf-8', language='english') 
>>> tt_en.tag('Does this thing even work?') 
[[u'Does', u'VBZ', u'do'], [u'this', u'DT', u'this'], [u'thing', u'NN', u'thing'], [u'even', u'RB', u'even'], [u'work', u'VB', u'work'], [u'?', u'SENT', u'?']] 
>>> tt_fr = TreeTagger(encoding='utf-8', language='french') 
>>> tt_fr.tag(u'Mon Dieu, faites que ça marche!') 
[[u'Mon', u'DET:POS', u'mon'], [u'Dieu', u'NOM', u'Dieu'], [u',', u'PUN', u','], [u'faites', u'VER:pres', u'faire'], [u'que', u'KON', u'que'], [u'\xe7a', u'PRO:DEM', u'cela'], [u'marche', u'NOM', u'marche'], [u'!', u'SENT', u'!']] 

Ponieważ to pytanie było zadawane bardzo często (a ponieważ proces instalacji nie jest super prosta, IMO), będę pisać na blogu na ten temat i jak najszybciej zaktualizować tę odpowiedź z linkiem do niego tak jak to się stało.

EDIT: Here is the above-mentioned blog post.

4

Jeśli szukasz innego wielojęzycznym POS Taggera może chcesz spróbować RDRPOSTagger: solidny, łatwy w obsłudze i niezależny od języka zestaw narzędzi do POS i morfologicznej tagging. Zobacz wyniki eksperymentalne, w tym szybkość i dokładność tagowania w 13 językach w this paper. RDRPOSTagger obsługuje teraz wstępnie wyszkolone modele POS i morfologiczne oznaczania dla bułgarskiego, czeskiego, holenderskiego, angielskiego, francuskiego, niemieckiego, hindi, włoskiego, portugalskiego, hiszpańskiego, szwedzkiego, tajskiego i wietnamskiego. RDRPOSTagger obsługuje również wstępnie wyszkolone modele tagowania Universal POS dla 40 języków.

W Pythonie można wykorzystać wstępnie przeszkolony modele do znakowania surowy korpus unlabeled jak:

python RDRPOSTagger.py tag PATH-TO-PRETRAINED-MODEL PATH-TO-LEXICON PATH-TO-RAW-TEXT-CORPUS

Przykład: python RDRPOSTagger.py tag ../Models/POS/German.RDR ../Models/POS/German.DICT ../data/GermanRawTest

Jeśli chcesz programować z RDRPOSTagger, proszę podążaj za wierszami kodu 92-98 w module RDRPOSTagger.py w pakiecie pSCRDRTagger. Oto przykład:

r = RDRPOSTagger() 
r.constructSCRDRtreeFromRDRfile("../Models/POS/German.RDR") #Load POS tagging model for German 
DICT = readDictionary("../Models/POS/German.DICT") #Load a German lexicon 
r.tagRawSentence(DICT, "Die Reaktion des deutschen Außenministers zeige , daß dieser die außerordentlich wichtige Rolle Irans in der islamischen Welt erkenne .") 

r = RDRPOSTagger() 
r.constructSCRDRtreeFromRDRfile("../Models/POS/French.RDR") # Load POS tagging model for French 
DICT = readDictionary("../Models/POS/French.DICT") # Load a French lexicon 
r.tagRawSentence(DICT, "Cette annonce a fait l' effet d' une véritable bombe . ") 
+0

Próbowałem tego taggera dla Tajlandii, ale to nie działa. Daje mi cały długi ciąg jako NCNM. Czy zamiast tego musi przyjąć ciąg żetonów? – aceminer

+0

Tak, przed użyciem taggera musisz wykonać segmentację słów tajskich. – NQD

Powiązane problemy