在Python 3.5上使用Gensim 1.0.1出现TypeError: object of type 'map' has no len()错误?

3

我使用Anaconda安装了Python 3.5,并使用pip安装了支持Python 3的gensim 1.0.1。运行gensim时,出现以下错误:

Exception in thread Thread-61:
Traceback (most recent call last):
  File "/Users/mac/anaconda/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/Users/mac/anaconda/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/mac/anaconda/lib/python3.5/site-packages/gensim/models/word2vec.py", line 838, in job_producer
    sentence_length = self._raw_word_count([sentence])
  File "/Users/mac/anaconda/lib/python3.5/site-packages/gensim/models/word2vec.py", line 755, in _raw_word_count
    return sum(len(sentence) for sentence in job)
  File "/Users/mac/anaconda/lib/python3.5/site-packages/gensim/models/word2vec.py", line 755, in <genexpr>
    return sum(len(sentence) for sentence in job)
TypeError: object of type 'map' has no len()

导致这个错误的代码来自node2vec。我正在将其移植到Python 3,但出现了这个错误。
我知道在Python 3中,len(map)会引起错误,这是否意味着Gensim 1.0.1不支持Python 3,尽管pip网站说它支持?还是有一些隐藏的设置?
有人知道出了什么问题吗?谢谢。

你要么运行的是一个为Python 2.x编写的Python脚本,要么你在某个不应该传递映射对象的地方明确地传递了它。仅从回溯中,无法看出具体情况。 - Dimitris Fasarakis Hilliard
我想说的是,你需要包含你正在执行的代码。 - Dimitris Fasarakis Hilliard
代码来自node2vec。我正在将其移植到Python 3,但出现了这个错误。 - THN
可能是Python 3.3中Map对象没有长度(len)的问题的重复。 - Łukasz Rogalski
@ŁukaszRogalski 我知道Python 3中的错误。我问的是关于Gensim的,因为这个版本支持Python 3。 - THN
1个回答

6

Gensim支持Python 3。当然,你(或node2vec)需要提供一个包含句子的可迭代对象给Word2Vec()

在这种情况下,你需要传递一个可迭代对象,其中包含步行列表 - 每个步行都是顶点的列表:

walks = [list(map(str, walk)) for walk in walks] # convert each vertex id to a string
model = Word2Vec(walks, ...)

如果Gensim自己将'map'转换为'list',那将真正支持Python 3,这更有意义。但我想这个答案也为最终用户提供了另一种替代解决方案。 - THN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接