2015-10-06 2 views
5

Ich habe eine Parser-Funktion, die iter(iter(tree)) zurückgibt.Python - NLP - konvertieren iter (iter (Baum)) in Liste (Baum)

parsedSentence = parser.raw_parse_sents([sentence],False) 

Wie kann ich wandeln die parsedSentence Typ Liste (Baum) und Zugang 1. Element dieser Liste.

Ich habe bereits list(parser.raw_parse_sents([sentence],False)) ausprobiert, aber es konvertiert das Ergebnis nicht in die Liste.

Edited:

s1 = parsedSentence[0] 
t1 = Tree.convert(s1) 
positions = t1.treepositions() 

Hier wirft er einen Fehler:

'listiterator' object has no attribute 'treepositions' 

danken Ihnen.

+1

Wenn Sie keine Liste bekommen, was bekommen Sie sonst noch? –

+0

Es betrachtet immer noch das Ergebnis als Iterator, sagen Listiterator –

Antwort

2

Es macht keinen Unterschied, wie viele Male Sie iter auf einem iterierbaren Objekt verwendet haben, können Sie es einfach in die Liste konvertieren, indem Sie list Funktion aufrufen.

>>> l =[6, 3, 5, 1, 4, 2] 
>>> list(iter(iter(iter(iter(l))))) 
[6, 3, 5, 1, 4, 2] 

Aber wenn Sie nur die Faust Artikel erhalten möchten Sie nicht list Funktion nutzen müssen Sie einfach next Methode auf einem Iterator oder next() eingebaute Funktion (in Python 3.X verwenden können, können Sie einfach verwenden integrierte Funktion next()) The Forest Artikel erhalten:

>>> iter(iter(l)).next() 
6 
>>> iter(iter(iter(l))).next() 
6 
>>> iter(iter(iter(iter(l)))).next() 
6 

Jetzt über Ihr Problem, wenn Sie es nicht ein list nach dem Aufruf list nach dem Aufruf sicher ist kein Iterator bekommen haben wäre es eine andere Aufgabe Typ sein, Sie müssen seine Elemente basierend auf wie es zu bekommen s __getitem__ Methode wurde implementiert.

entsprechend Ihrer Bearbeitung t1 ist eine Objektliste Iterator und hat hat nicht Attribut treepositions Sie Schleife über sie Elemente ist und jene treepositions Attribut dann anrufen:

s1 = parsedSentence[0] 
t1 = Tree.convert(s1) 
positions = [item.treepositions() for item in t1] 
+4

Beachten Sie, dass in Python 3 die "nächste" Methode auf Iterator-Objekte in "__next__" umbenannt wird. Ein besserer Weg, um in jeder Version zu bekommen, ist die eingebaute 'next' Funktion:' next (iterator) ' – Blckknght

+0

@Blckknght In der Tat, behoben, danke für die Verbesserung! – Kasramvd

+0

Hallo, danke für die Antwort. Ich habe eine Idee, dass Liste (iter) es in Liste umwandeln würde. Aber ich bekomme immer noch den gleichen Fehler: 'Listiterator' Objekt hat kein Attribut 'Treepositions' –

1

Schließlich Ausgabe durch Ändern

aufgelöst wurde
parser.raw_parse_sents([sentence],False) 

zu

parser.raw_parse(sentence) 

Danke an alle, die ihre Zeit beigetragen haben.

+0

Das ist ein schöner Versuch! – Kasramvd

+0

Yup. Danke. –