2016-04-05 17 views
0

Ich bin in Python auf eine sehr seltsame Variable gestoßen. Ich mache ein Tokenisieren Betrieb auf mehreren Unicode-Strings wie folgt:Objekt mit mehreren Listen Python

with open ("verbatims.txt","r") as verbatims : 
    for line in verbatims: 
     line = line.decode("utf8") 
     tokens = nltk.tokenize.word_tokenize(line) 

& wenn ich print(tokens)

[u'Vive', u'la', u'poste', u'...', u'.', u'Le', u'facteur', u'qui', u'a', u'la', u'flemme', u'de', u'sonner', u'pour', u'te', u'remettre', u'ton', u'colis', u'et', u'te', u'dis', u'que', u"t'es", u'absent'] 
[u'Une', u'honte', u'ce', u'petit', u'postier', u'fain\xe9ant', u'.', u'.'] 

ich dieses seltsame Ausgang haben. Es scheint wie tokens ist ein Objekt, das mehrere Listen enthält. Hier ist es nur ein Beispiel, aber ich habe so viele Listen wie Sätze. Außerdem kann ich nicht einfach tokens anrufen, wie ich es in einer gewöhnlichen Liste tun würde. Ich muss einen Druck machen.

Das Problem mit mehreren Listen innerhalb des gleichen Objekts ist, dass, wenn ich das Objekt mit einer einfachen for...in Schleife analysieren, der Parser nicht funktioniert und nur die letzte Liste des Objekts zurückgibt.

Also meine Fragen sind:

  • Wie werden diese Art von Objekten genannt?
  • Wie kann ich dieses Objekt analysieren?

Vielen Dank!

+1

Ich vermute, Sie rufen 'Print (Tokens)' innerhalb der for-Schleife und nicht außerhalb. Verschachtelte Listen umhüllen ihren Inhalt in zusätzlichen eckigen Klammern, was hier nicht der Fall ist. Darüber hinaus legt die Tatsache, dass nur die letzte Liste über iteriert wird, nahe, dass Sie nur eine Liste als Rückgabevariable haben. Jede Iteration, Token, wird überschrieben, so dass offensichtlich "print (Token)" verschiedene Dinge zeigt. –

+0

Sind Sie sicher, dass die Ausgabe eines einzelnen Aufrufs zum Drucken (Token) und nicht nur Drucken (Token) mehrmals aufgerufen wird? –

+0

Oh ja, das stimmt. Mein Druck war innerhalb der Schleife. –

Antwort

0

versuchen, diese mit kodieren 'utf-8' oder 'latin1'

with open ("verbatims.txt","r") as verbatims : 
    for line in verbatims: 
     line = line.decode("utf8") 
     tokens = nltk.tokenize.word_tokenize(line) 
     tokens = [x.encode('latin1') for x in tokens] # add this or try with the another 

aber wenn Sie Token wie haben [[], []] sollte in x andere Schleife tun, zum Beispiel (mehrere Listen):

+0

Danke für die Antwort! Aber Akshat Mahajan hatte Recht: Ich rief print() in meiner Schleife an. Deshalb hatte ich diese mehrere Listen in meinem Interpreter –

+0

@NahidO ah? Sie können print nach dem Konvertieren der Unicode – Milor123

+0

Kumpel, Post Ihren TXT für Hilfe Sie – Milor123