Frage
Ich bin mit NLTK Substantiven aus einem Text-String mit dem folgenden Befehl starten zu extrahieren:
tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))
Es funktioniert auf Englisch gut. Gibt es eine einfache Möglichkeit, es auch für Deutsch machen arbeiten?
(Ich habe keine Erfahrung mit natürlicher Sprache-Programmierung, aber ich schaffte es die Python nltk Bibliothek zu verwenden, die groß ist, so weit.)
Lösung
Natürliche Sprache-Software hat seine Magie von Corpora nutzt und die Statistik sie bieten. Sie werden über einige deutsche corpus zu sagen brauchen nltk, um es richtig Deutsch zu helfen tokenize. Ich glaube, die EUROPARL corpus helfen könnte erhalten Sie gehen.
Siehe nltk.corpus.europarl_raw und diese Antwort zum Beispiel Konfiguration.
Auch betrachten Sie diese Frage mit "nlp" Tagging.
Andere Tipps
Die Muster Bibliothek zum Parsen deutsche Sätze eine Funktion enthält und die Ergebnis enthält die Part-of-Speech-Tags. Im Folgenden wird aus ihrer Dokumentation kopiert:
from pattern.de import parse, split
s = parse('Die Katze liegt auf der Matte.')
s = split(s)
print s.sentences[0]
>>> Sentence('Die/DT/B-NP/O Katze/NN/I-NP/O liegt/VB/B-VP/O'
'auf/IN/B-PP/B-PNP der/DT/B-NP/I-PNP Matte/NN/I-NP/I-PNP ././O/O')
Wenn Sie es vorziehen, die SSTS Tag setzen Sie den optionalen Parameter tagset="STTS"
einstellen können.
Part-of-Speech (PO) Tagging ist auf eine bestimmte [natürliche] Sprache sehr spezifisch. NLTK umfasst viele verschiedene Tagger, die unterschiedliche Techniken verwenden, um die Markierung eines bestimmten Token in einer gegebenen Token abzuleiten. Die meisten (aber nicht alle) diese Tagger verwenden, um ein statistisches Modell der Art als Haupt- oder einziges Gerät auf „den Trick“. Solche Tagger erfordern einige „Trainingsdaten“, auf denen diese statistische Darstellung der Sprache zu erstellen und die Daten Ausbildung kommt in Form von Korpora.
Die NTLK „Verteilung“ sich viele dieser Korpora enthält, sowie eine Reihe von „Corpora Leser“, die eine API bieten verschiedene Arten von Korpora zu lesen. Ich weiß nicht, den Stand der Dinge in NTLK richtigen und wenn dies schließt jeden Deutsch Korpus. Sie können jedoch frei, etwas freien Corpora finden, das Sie werden dann in ein Format konvertieren, die die richtigen NTLK Corpora Leser erfüllen, und dann können Sie diese verwenden, um einen POS-Tagger für die deutsche Sprache zu trainieren.
Sie können sogar Ihren eigenen Korpus erstellen, aber das ist eine Hölle einer mühsamen Arbeit; wenn Sie in einem univeristy arbeiten, muss man Wege bestochen und sonst Nötigung Studenten finden, dass für Sie tun ;-)
Vielleicht können Sie die Stanford POS-Tagger verwenden. Unten ist ein Rezept, das ich geschrieben habe. Es gibt Python Rezepte für deutsche NLP, die ich zusammengestellt habe und man kann auf sie zugreifen auf http://htmlpreview.github.io/?https://github.com/alvations/DLTK/blob/master/docs/index.html
#-*- coding: utf8 -*-
import os, glob, codecs
def installStanfordTag():
if not os.path.exists('stanford-postagger-full-2013-06-20'):
os.system('wget http://nlp.stanford.edu/software/stanford-postagger-full-2013-06-20.zip')
os.system('unzip stanford-postagger-full-2013-06-20.zip')
return
def tag(infile):
cmd = "./stanford-postagger.sh "+models[m]+" "+infile
tagout = os.popen(cmd).readlines()
return [i.strip() for i in tagout]
def taglinebyline(sents):
tagged = []
for ss in sents:
os.popen("echo '''"+ss+"''' > stanfordtemp.txt")
tagged.append(tag('stanfordtemp.txt')[0])
return tagged
installStanfordTag()
stagdir = './stanford-postagger-full-2013-06-20/'
models = {'fast':'models/german-fast.tagger',
'dewac':'models/german-dewac.tagger',
'hgc':'models/german-hgc.tagger'}
os.chdir(stagdir)
print os.getcwd()
m = 'fast' # It's best to use the fast german tagger if your data is small.
sentences = ['Ich bin schwanger .','Ich bin wieder schwanger .','Ich verstehe nur Bahnhof .']
tagged_sents = taglinebyline(sentences) # Call the stanford tagger
for sent in tagged_sents:
print sent
Ich habe eine Blog-Post über geschrieben, wie der deutschen kommentierte TIGER Corpus zu konvertieren, um sie mit dem NLTK zu verwenden. hier finden sie es hier.