2013-06-04 9 views
5

Also, ich fragte mich, ob jemand eine Idee hatte, wie mehrere Begriffe zu einem einzigen Begriff in den Taggern in NLTK. zu kombinieren.Wie fügen Sie dem Tagger in NLTK zusammengesetzte Wörter hinzu?

Zum Beispiel, wenn ich das tue:

nltk.pos_tag(nltk.word_tokenize('Apple Incorporated is the largest company')) 

Es gibt mir:

[('Apple', 'NNP'), ('Incorporated', 'NNP'), ('is', 'VBZ'), ('the', 'DT'), ('largest', 'JJS'), ('company', 'NN')] 

Wie mache ich es ausdrückte 'von Apple' und 'Incorporated' Gemeinsam ('Apple Incorporated','NNP')

+1

Sie müssten einen Chunker/Parser und dann concat die Chunks/Phrase mit '_', dann flacht die Struktur in Tupel wieder. – alvas

Antwort

0

zu sein Sie können versuchen, einen Blick auf nltk.RegexParser zu werfen. Es ermöglicht Ihnen, einen Teil des mit Sprache markierten Inhalts basierend auf regulären Ausdrücken zu teilen. In Ihrem Beispiel Sie

so etwas wie

pattern = "NP:{<NN|NNP|NNS|NNPS>+}" 
c = nltk.RegexpParser(p) 
t = c.parse(nltk.pos_tag(nltk.word_tokenize("Apple Incorporated is the largest company"))) 
print t 
tun könnte Dies würde Ihnen:

Tree('S', [Tree('NP', [('Apple', 'NNP'), ('Incorporated', 'NNP')]), ('is', 'VBZ'), ('the', 'DT'), ('largest', 'JJS'), Tree('NP', [('company', 'NN')])]) 
0

Der Code genau das tut, was es tun soll. Es fügt den Token Teil der Sprache Tags hinzu. "Apple Incorporated" ist kein einzelnes Token. Es handelt sich um zwei separate Tokens, auf die kein POS-Tag angewendet werden kann. Das ist das richtige Verhalten.

Ich frage mich, ob Sie versuchen, das falsche Werkzeug für den Job zu verwenden. Was versuchst du zu tun/Warum versuchst du es zu tun? Vielleicht sind Sie daran interessiert, Kollokationen statt POS-Tags zu identifizieren? Sie können hier einen Blick werfen: collocations module

+0

Ich versuche, ein Programm zu machen, das jede Art von Wort nimmt und eine Funktion für sie auf dem Text ausführt. Zum Beispiel, wenn das Tag 'Corp' ist, dann führe bestimmte Funktionen aus. Ich dachte, dass ich die Tags ersetzen könnte und irgendwie manuell, in Anbetracht dessen, dass ich nicht sicher bin, wie ich es mit nltk machen soll, aber ich weiß auch nicht, wie ich das machen würde! Im Grunde erkennt es, um was für ein Wort es sich handelt, und führt eine Funktion dafür aus. Irgendeine Hilfe? – user2403500

+0

Ich verstehe, dass dies der normale Vorgang ist, aber ich frage mich, ob Sie wissen, wie ich die ('Apple,' NNP '), (' Corporation ',' NNP ') durch (' Apple Corporation ',' Corp ') wenn "Apple Corporation" in Unternehmen. – user2403500

Verwandte Themen