Ale*_*apu 5 python parsing iterator nlp list
我有一个返回的解析器函数iter(iter(tree)).
parsedSentence = parser.raw_parse_sents([sentence],False)
Run Code Online (Sandbox Code Playgroud)
如何将parsedSentence类型转换为列表(树)并访问该列表的第一个元素.
我已经尝试了,list(parser.raw_parse_sents([sentence],False))但它没有将结果转换为列表.
编辑:
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = t1.treepositions()
Run Code Online (Sandbox Code Playgroud)
这里抛出一个错误:
'listiterator' object has no attribute 'treepositions'
Run Code Online (Sandbox Code Playgroud)
谢谢.
iter您在可迭代对象上使用多少次都没有任何区别,只需通过调用list函数将其转换为列表即可。
>>> l =[6, 3, 5, 1, 4, 2]
>>> list(iter(iter(iter(iter(l)))))
[6, 3, 5, 1, 4, 2]
Run Code Online (Sandbox Code Playgroud)
但是,如果您只想获取第一个项目,则不需要使用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
Run Code Online (Sandbox Code Playgroud)
list现在关于你的问题,如果你在调用后没有得到一个,那么list它肯定不是一个迭代器,它会是另一种对象类型,你需要根据它的 __getitem__方法的实现方式来获取它的项目。
根据您的编辑t1是一个列表迭代器对象,并且没有属性,treepositions您可以循环遍历它的项目,然后调用这些treepositions属性:
s1 = parsedSentence[0]
t1 = Tree.convert(s1)
positions = [item.treepositions() for item in t1]
Run Code Online (Sandbox Code Playgroud)