2016-07-11 7 views
0

Auf den NLTK docs, das ist, wie das Drucken eines Baumes (in diesem Fall ‚Einheiten‘) wird gezeigt, auf:NLTK Baum-Format ist nicht so docs es zeigen

import nltk 
sentence = """At eight o'clock on Thursday morning 
Arthur didn't feel very good.""" 
tokens = nltk.word_tokenize(sentence) 
tagged = nltk.pos_tag(tokens) 
entities = nltk.chunk.ne_chunk(tagged) 

entities 
Tree('S', [('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), 
      ('on', 'IN'), ('Thursday', 'NNP'), ('morning', 'NN'), 
     Tree('PERSON', [('Arthur', 'NNP')]), 
      ('did', 'VBD'), ("n't", 'RB'), ('feel', 'VB'), 
      ('very', 'RB'), ('good', 'JJ'), ('.', '.')]) 

Aber wenn ich versuche zu tun genau das gleiche mit dem exakt gleichen Code, das ist, was passiert:

entities 
(S 
    At/IN 
    eight/CD 
    o'clock/NN 
    on/IN 
    Thursday/NNP 
    morning/NN 
    (PERSON Arthur/NNP) 
    did/VBD 
    n't/RB 
    feel/VB 
    very/RB 
    good/JJ 
    ./.) 

Falls Sie auf nicht gefangen haben, ich die Ausgabe von meinem Code möchte (was genau die gleiche Code ist) formatiert werden wie die Ausgabe des Codes aus den Dokumenten.

Ich habe dies auf Python 2.7 und Python 3.5 versucht, mit den gleichen Ergebnissen. Gibt es eine Lösung? Vielleicht fehlt mir gerade ein nltk-Addon? Wenn es eine Lösung gibt, würde ich Python 2.7 bevorzugen.

Antwort

2

Sind Sie sicher, dass Sie einfach entities eingegeben haben, um das Ergebnis zu erhalten, das Sie melden? Was Sie auf der nltk-Homepage sehen, ist die unzweideutige Darstellung des Baumobjektes (seine "repr" -Form, in Python-Begriffen). Sie erhalten, wenn Sie eine Variable ausgeben, indem Sie einfach ihren Namen an der Eingabeaufforderung eingeben. Wenn Sie den Baum mit print(entities) ausdrucken (was wahrscheinlich ist, was Sie tatsächlich getan haben), bietet es das angepasste, besser lesbare Formular ohne die Tree Typen und Tupelschreibweise.

So gibt es kein Problem, und keine Korrektur ist erforderlich. Dies sind zwei Darstellungen desselben Objekts. Wenn Sie print verwenden müssen, um den Inhalt der Variablen anzuzeigen (z. B. wenn Sie nicht an der interaktiven Eingabeaufforderung sind), aber die im Beispiel angezeigte Ausgabe anpassen möchten, können Sie print(repr(entities)) verwenden.

+0

Vielen Dank! Ich kann nicht glauben, dass ich das verpasst habe, und ja, du hattest Recht - ich tippte "print (entities)", um meine Ausgabe zu erhalten. –