2015-09-23 18 views
8

Kürzlich habe ich an den NLP herangegangen und ich habe versucht, NLTK und TextBlob für die Analyse von Texten zu verwenden. Ich möchte eine App entwickeln, die Bewertungen von Reisenden analysiert und so viele Texte in verschiedenen Sprachen verwalten muss. Ich muss zwei Hauptoperationen durchführen: POS Tagging und Lemmatisierung. Ich habe, dass es in NLTK gesehen Wahl eine Möglichkeit, die für Sätze tokenization wie dies die richtige Sprache ist:Multilingual NLTK für POS Tagging und Lemmatizer

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

ich nicht den richtigen Weg gefunden haben, die Sprache für POS-Tagging und Lemmatizer in verschiedenen Sprachen einzustellen noch. Wie kann ich die korrekten Korpora/Wörterbücher für nicht-englische Texte wie Italienisch, Französisch, Spanisch oder Deutsch einstellen? Ich sehe auch, dass es eine Möglichkeit gibt, die Module "TreeBank" oder "WordNet" zu importieren, aber ich verstehe nicht, wie ich sie benutzen kann. Wo finde ich sonst die entsprechenden Korpora?

Können Sie mir einen Vorschlag oder eine Referenz geben? Bitte achten Sie darauf, dass ich kein Experte von NLTK bin.

Vielen Dank.

Antwort

3

Es gibt keine Option, die Sie an die POSTagging- und Lemmatizierungsfunktionen von NLTK übergeben können, um andere Sprachen zu verarbeiten.

Eine Lösung wäre, ein Trainingskorpus für jede Sprache zu bekommen und Ihre eigenen POS-Tagger mit NLTK zu trainieren, und dann eine Lemmatisierungslösung, vielleicht diktionär, für jede Sprache zu finden.

Das könnte aber zuviel sein, da es für beide Aufgaben bereits eine einzige Lösung in Italienisch, Französisch, Spanisch und Deutsch (und vielen anderen Sprachen) gibt: TreeTagger. Es ist nicht so hochmodern wie die POS-Tagger und Lemmatizer auf Englisch, aber es macht immer noch einen guten Job.

Was Sie wollen, ist TreeTagger auf Ihrem System zu installieren und in der Lage sein, es aus Python aufzurufen. Hier ist ein GitHub repo by miotto, mit dem Sie genau das tun können.

Der folgende Code-Schnipsel zeigt Ihnen, wie Sie testen, ob Sie alles richtig eingerichtet haben. Wie Sie sehen können, bin ich in der Lage, in einem Funktionsaufruf POS-taggen und lemmatizieren, und ich kann es genauso leicht in Englisch und Französisch machen.

>>> 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'!']] 

Da diese Frage wird viel gefragt (und da der Installationsprozess nicht super straight-forward ist, IMO), werde ich eine Blog-Post über die Angelegenheit schreiben und diese Antwort aktualisieren mit einem Link, um es so schnell wie es gemacht wird.

EDIT: Here is the above-mentioned blog post.

4

Wenn Sie für eine andere mehrsprachige POS-Tagger suchen, könnten Sie RDRPOSTagger versuchen wollen: eine robuste, einfach zu bedienende und sprachunabhängige Toolkit für POS und morphologischen Tagging. Siehe die experimentellen Ergebnisse einschließlich der Leistungsgeschwindigkeit und der Markierungsgenauigkeit in 13 Sprachen in this paper. RDRPOSTagger unterstützt jetzt vortrainierte POS- und morphologische Tagging-Modelle für Bulgarisch, Tschechisch, Niederländisch, Englisch, Französisch, Deutsch, Hindi, Italienisch, Portugiesisch, Spanisch, Schwedisch, Thai und Vietnamesisch. RDRPOSTagger unterstützt auch die vortrainierten Universal POS-Tagging-Modelle für 40 Sprachen.

In Python können Sie die vorher gelernten Modelle nutzen, um einen rohen unmarkierten Textkorpus Tagging als:

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

Beispiel: python RDRPOSTagger.py tag ../Models/POS/German.RDR ../Models/POS/German.DICT ../data/GermanRawTest

Wenn Sie mit RDRPOSTagger programmieren mögen, bitte Codezeilen 92-98 in RDRPOSTagger.py Modul in pSCRDRTagger Paket folgen. Hier ist ein Beispiel:

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

Ich habe diesen Tagger für Thai versucht, aber es scheint nicht zu funktionieren. Es gibt mir eine ganze lange Schnur als NCNM. Muss es stattdessen eine Reihe von Tokens aufnehmen? – aceminer

+0

Ja, Sie müssen die Thai-Wortsegmentierung durchführen, bevor Sie den Tagger verwenden. – NQD