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

标签 python list parsing iterator nlp

我有一个返回 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]

关于Python - NLP - 将 iter(iter(tree)) 转换为 list(tree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973119/

相关文章:

python - 如何在 tensorflow 中并行加载数据?

java - map 实例未读取为对象实例

python - 如果文件名是字符串列表的子字符串,则使用父字符串重命名文件

list - 如何将 CMake 列表作为集合进行操作?

c# - 将 T-SQL 语句解析为标记

python - 数学方程式 - 使用 Python 和 QT(和 sympy?)进行渲染和评估

python - 从列表内的字符串中删除所有非数字字符

javascript - JavaScript 的 Yacc/Jay 语法文件?

java - 从(日志)文件中读取,提取值并在 Java 中对其执行操作

Python - 大型日志文件上的正则表达式