2009-10-28 21 views
22

ich NLTK bin mit Substantiven aus einem Text-String mit dem folgenden Befehl starten zu extrahieren:POS-Tagging in deutschen

tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string))) 

Es ist in Englisch gut funktioniert. Gibt es einen einfachen Weg, damit es auch für Deutsch funktioniert?

(Ich habe keine Erfahrung mit natürlicher Sprache-Programmierung, aber ich schaffte es die Python nltk Bibliothek zu verwenden, die bisher großartig.)

+1

Ein Vorteil, den Sie ausnutzen könnte, ist, dass alle Substantive in deutscher Sprache aktiviert werden. –

+2

Tag 'german' wurde im Rahmen der [** 2012 cleanup **] entfernt (http://meta.stackexchange.com/questions/128315/the-great-stack-overflow-tag-question-cleanup-of-2012)). –

Antwort

20

Natürliche Sprache-Software hat seine Magie von Corpora nutzt und die Statistik sie bieten. Du musst nltk über ein deutsches Korpus informieren, damit es richtig deutsch timen kann. Ich glaube, dass der Korpus EUROPARL Ihnen helfen kann, Sie in Gang zu bringen.

Siehe nltk.corpus.europarl.german - das ist, was Sie suchen.

Denken Sie auch darüber nach, diese Frage mit "nlp" zu markieren.

+2

+1 für mich zu schlagen ;-), auch danke für den Hinweis auf die Frage selbst zu markieren. – mjv

+1

Thx. Ich habe die deutsche Akte aus dem EUROPAL-Korpus mit Ihrer Hilfe und einem weiteren nützlichen Hinweis bekommen. http://code.google.com/p/nltk/issues/Detail? id = 415 auf den tokenizer zu trainieren. Johannes –

+3

Mit dem 'europarl_raw' Modul können Sie nur eine tokenizer trainieren, sondern ein POS-Tagger nicht, weil das Corpus getaggt nicht POS ist. –

4

Das Tag-of-Speech (POS) -Tagging ist sehr spezifisch für eine bestimmte [natürliche] Sprache. NLTK enthält viele verschiedene Tagger, die unterschiedliche Techniken verwenden, um das Tag eines gegebenen Tokens in einem gegebenen Token abzuleiten. Die meisten (aber nicht alle) dieser Tagger verwenden ein statistisches Modell von Arten als das Haupt- oder einzige Gerät, um "den Trick zu machen". Solche Tagger erfordern einige "Trainingsdaten", um diese statistische Darstellung der Sprache aufzubauen, und die Trainingsdaten kommen in Form von Korpora vor.

Die NTLK "Distribution" selbst enthält viele dieser Korpora, sowie eine Reihe von "Korpora-Leser", die eine API zum Lesen verschiedener Arten von Korpora bieten. Ich kenne den Stand der Dinge in NTLK nicht, und wenn das irgendeinen deutschen Korpus einschließt. Sie können jedoch einige kostenlose Korpora frei finden, die Sie dann in ein Format konvertieren müssen, das den korrekten NTLK-Korpora-Leser erfüllt, und dann können Sie damit einen POS-Tagger für die deutsche Sprache trainieren.

Sie können sogar Ihr eigenes Korpus erstellen, aber das ist eine verdammt mühsame Arbeit; Wenn du in einer Universität arbeitest, musst du Wege finden, Studenten zu bestechen und andere dazu zu zwingen, das für dich zu tun ;-)

2

Ich habe einen Blogpost darüber geschrieben, wie man den deutschen annotierten TIGER Corpus konvertiert, um ihn zu benutzen mit der NLTK. Have a look at it here.

+5

Referenzierter Blogeintrag nicht mehr verfügbar. – Tim

+0

Der Link zum Blog wurde aktualisiert! – b3000

11

Die Pattern library enthält eine Funktion zum Analysieren deutscher Sätze und das Ergebnis enthält die Wortart-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 den SSTS Tag gesetzt bevorzugen, können Sie den optionalen Parameter tagset="STTS" eingestellt.

4

Möglicherweise können Sie den 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 
+0

Der Link 404 – b3000

+1

Sorry, hier ist eine aktualisierte Link http://goo.gl/wdnz1W – alvas

Verwandte Themen