我有一个生成器(一个产生东西的函数),但是当试图将它传递给gensim.Word2Vec
我收到以下错误:
类型错误:您不能将生成器作为句子参数传递。尝试迭代器。
生成器不是迭代器的一种吗?如果没有,我如何从中创建一个迭代器?
查看库代码,它似乎只是迭代类似的句子for x in enumerate(sentences)
,它与我的发电机配合得很好。那么是什么原因导致了这个错误呢?
发电机是筋疲力尽的经过一圈之后。 Word2vec 只需要多次遍历句子(并且可能获取给定索引的项目,这对于生成器来说是不可能的,生成器只是一种只能弹出的堆栈),因此需要更可靠的东西,例如列表。
特别是在他们的代码中,他们调用两个不同的函数,两个函数都迭代句子(因此,如果您使用生成器,第二个函数将在空集上运行)
self.build_vocab(sentences, trim_rule=trim_rule)
self.train(sentences)
它应该与任何实现的东西一起工作__iter__
这不是GeneratorType
。因此,将您的函数包装在可迭代接口中,并确保您可以多次遍历它,这意味着
sentences = your_code
for s in sentences:
print s
for s in sentences:
print s
打印您的收藏两次
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)