我有一个返回 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上使用
内置函数(在 python 3.X 中你可以只使用内置函数 next
方法()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]
关于Python - NLP - 将 iter(iter(tree)) 转换为 list(tree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973119/