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.)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top