Python - NLP - 将 iter(iter(tree)) 转换为 list(tree)

Python - NLP - convert iter(iter(tree)) to list(tree)

我有一个解析器函数 returns iter(iter(tree))

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

如何将 parsedSentence 类型转换为列表(树)并访问该列表的第一个元素。

我已经尝试过 list(parser.raw_parse_sents([sentence],False)) 但它没有将结果转换为列表。

已编辑:

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

这里报错:

'listiterator' object has no attribute 'treepositions'

谢谢。

在可迭代对象上使用了多少次 iter 并没有任何区别,您可以通过调用 list 函数将其简单地转换为列表。

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

但是如果你只想得到第一个项目你不需要使用 list 函数你可以简单地在迭代器上使用 next 方法或 next() 内置函数(在 python 3.X 中你可以只使用内置函数 next())来获取第一个项目:

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

现在关于你的问题,如果你在调用 list 之后没有得到 list 肯定它不是一个迭代器,它将是你需要获取其项目的另一种对象类型关于如何实施其 __getitem__ 方法。

根据您的编辑 t1 是一个列表迭代器对象并且没有属性 treepositions 您可以遍历它的项目然后调用那些 treepositions 属性:

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

最后,通过更改

解决了问题
parser.raw_parse_sents([sentence],False)  

parser.raw_parse(sentence)  

感谢所有贡献时间的人。