2015-10-06 14 views
5

Ho una funzione parser che restituisce iter(iter(tree)).Python - NLP - convert iter (iter (albero)) nell'elenco (albero)

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

Come posso convertire il tipo parsedSentence in elenco (struttura) e accedere al primo elemento di tale elenco.

Ho già provato list(parser.raw_parse_sents([sentence],False)) ma non converte il risultato in elenco.

Modificato:

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

Qui si genera un errore:

'listiterator' object has no attribute 'treepositions' 

grazie.

+1

Se non si ottiene un elenco, cos'altro si ottiene? –

+0

Sta ancora considerando il risultato come Iterator, ad esempio listiterator –

risposta

2

Non fa alcuna differenza che per quante volte hai usato iter su un oggetto iterabile puoi semplicemente convertirlo in lista chiamando la funzione list.

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

Ma se volete solo per ottenere l'oggetto pugno non è necessario utilizzare la funzione list si può semplicemente utilizzare next metodo su un next() funzione incorporata iteratore o (in python 3.X si può solo utilizzare la funzione incorporata next()) per ottenere l'oggetto Forst:

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

Ora circa il tuo problema, se non hai un list dopo aver chiamato list dopo aver chiamato sicuramente non è un iteratore che sarebbe stato un altro tipo di oggetto è necessario ottenere i suoi articoli in base a come s il metodo __getitem__ è stato implementato.

base alla tua modifica t1 è un oggetto iteratore di lista e non ha attributi treepositions è possibile ciclare su di essa l'oggetti e quindi chiamare quelli treepositions attributo:

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

Si noti che in Python 3, il metodo 'next' sugli oggetti iterator viene rinominato in' __next__'. Un modo migliore per ottenere in entrambe le versioni è usare la funzione 'next':' next (iterator) ' – Blckknght

+0

@Blckknght In effetti, risolto, grazie per il miglioramento! – Kasramvd

+0

Ciao, grazie per la risposta. Ho un'idea che lista (iter) lo converte in lista. Ma ho ancora lo stesso errore: L'oggetto 'listiterator' non ha attributo 'treepositions' –

1

Infine, problema è stato risolto modificando

parser.raw_parse_sents([sentence],False) 

a

parser.raw_parse(sentence) 

Grazie a tutti coloro che hanno contribuito con il loro tempo.

+0

Questa è una bella prova! – Kasramvd

+0

Sì. Grazie. –

Problemi correlati