用conda更新python版本后出现Gensim错误

问题描述:

我最近更新了从python = 3.4到python 3.6的conda环境。该环境是为使用gensim的项目制作的,在3.4上完美运行。本次更新后,使用该库生成多个错误,如:用conda更新python版本后出现Gensim错误

TypeError: object of type 'itertools.chain' has no len() 

AssertionError: decomposition not initialized yet 

难道你们知道为什么会这样,而gensim明确地说,蟒蛇3.5和3.6的支持?

所使用的代码:

# Create Texts 
texts = src.data.raw.extract_clean_merge_titles_abstracts(papers) 
src.data.raw.train_phraser(texts) 
texts = src.data.raw.tokenize_stream(texts) 

print("Size of corpus: ", len(texts)) # ERROR 1 HERE 

# Create Dictionary 
dictionary = gensim.corpora.dictionary.Dictionary(texts, prune_at=None) 
dictionary.filter_extremes(no_below=3 ,no_above=0.1, keep_n=None) 
dictionary.compactify() 
print(dictionary) 
dictionary.save(config.paths.PATH_DATA_GENSIM_TEMP_DICTIONARY) 

# Create corpus 
corpus = [dictionary.doc2bow(text) for text in texts] 
#gensim.corpora.MmCorpus.serialize(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS, corpus) 
corpus_index = gensim.similarities.docsim.Similarity(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_INDEX, corpus, num_features=len(dictionary)) 
corpus_index.save(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_INDEX) 

# tf-idf 
tfidf = gensim.models.TfidfModel(corpus) 
corpus_tfidf = tfidf[corpus] #gensim.corpora.MmCorpus.serialize(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_TFIDF, corpus_tfidf) 
tfidf.save(config.paths.PATH_DATA_GENSIM_TEMP_TFIDF) 
corpus_tfidf_index = gensim.similarities.docsim.Similarity(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_TFIDF_INDEX, corpus_tfidf, num_features=len(dictionary)) 
corpus_tfidf_index.save(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_TFIDF_INDEX) 

# lsa 
lsa_num_topics = 100 
lsa = gensim.models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=lsa_num_topics) 
corpus_lsa = lsa[corpus_tfidf] # ERROR 2 HERE 
#gensim.corpora.MmCorpus.serialize(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_LSA, corpus_lsa) 
lsa.save(config.paths.PATH_DATA_GENSIM_TEMP_LSA) 
corpus_lsa_index = gensim.similarities.docsim.Similarity(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_LSA_INDEX, corpus_lsa, num_features=lsa_num_topics) 
corpus_lsa_index.save(config.paths.PATH_DATA_GENSIM_TEMP_CORPUS_LSA_INDEX) 

下面是安装的软件包列表:

bkcharts     0.2      py36_0 
bokeh      0.12.6     py36_0 
boto      2.47.0     py36_0 
bz2file     0.98      py36_0 
cycler     0.10.0     py36_0 
dbus      1.8.20      1 ostrokach 
decorator     4.0.11     py36_0 
expat      2.1.0       0 ostrokach 
fontconfig    2.12.1      3 
freetype     2.5.5       2 
gensim     2.2.0    np113py36_0 
gettext     0.19.5      2 ostrokach 
glib      2.48.2      0 ostrokach 
gst-plugins-base   1.8.0       0 
gstreamer     1.8.0       0 
icu      54.1       0 ostrokach 
jinja2     2.9.6     py36_0 
jpeg      9b       0 
libffi     3.2.1       8 ostrokach 
libgcc     5.2.0       0 
libgfortran    3.0.0       1 
libiconv     1.14       0 
libpng     1.6.27      0 
libsigcpp     2.4.1       3 ostrokach 
libxcb     1.12       1 
libxml2     2.9.4       0 
markupsafe    0.23      py36_2 
matplotlib    2.0.2    np113py36_0 
mkl      2017.0.3      0 
networkx     1.11      py36_0 
nltk      3.2.4     py36_0 
numpy      1.13.1     py36_0 
openssl     1.0.2l      0 
pcre      8.39       1 
pip      9.0.1     py36_1 
pymysql     0.7.9     py36_0 
pyparsing     2.1.4     py36_0 
pyqt      5.6.0     py36_2 
python     3.6.1       2 
python-dateutil   2.6.0     py36_0 
pytz      2017.2     py36_0 
pyyaml     3.12      py36_0 
qt      5.6.2       4 
readline     6.2       2 
requests     2.14.2     py36_0 
scikit-learn    0.18.2    np113py36_0 
scipy      0.19.1    np113py36_0 
setuptools    27.2.0     py36_0 
sip      4.18      py36_0 
six      1.10.0     py36_0 
smart_open    1.5.3     py36_0 
sqlite     3.13.0      0 
system     5.8       2 
tk      8.5.18      0 
tornado     4.5.1     py36_0 
wheel      0.29.0     py36_0 
xz      5.2.2       1 
yaml      0.1.6       0 
zlib      1.2.8       3 

我的坏,它来自于Phraser:

def tokenize_stream(stream, max_num_words = 3): 
    tokens_stream = [gensim.utils.simple_preprocess(t, min_len=2, max_len=50) for t in stream] 
    for i,tokens in enumerate(tokens_stream): 
     tokens_stream[i] = [j for j in tokens if j not in stop_words] 
    phrases = gensim.models.phrases.Phrases.load(config.paths.PATH_DATA_GENSIM_PHRASES) 
    grams = gensim.models.phrases.Phraser(phrases) 
    tokens_stream = list(grams[tokens_stream]) ## HERE LIST IS IMPORTANT 
    return tokens_stream 

出于某种原因,与Python 3.4,不使用 “列表(克[...])” 做在我的代码工作,并返回一个itertool.chain实例导致与python 3.6空语料库。

的错误(包括报道栈)更多情况下,有必要知道在哪里的错误发生。

Gensim在Python 3.6中受支持并经过发布测试,因此该问题可能与您的系统有关。

您可能想尝试卸载&重新安装gensim(或任何库错误堆栈也牵连),或从一开始就启动一个新的Python 3.6 conda环境。

+0

具体是什么信息? Thx的建议,我尝试从头开始重新创建一个环境,并告诉你它是否工作。 – debzsud

+0

您列出的错误通常会与更多信息一起报告,其中包括触发的确切代码行(以及这些堆栈帧的调用位置等)。这将有助于确定问题出现在库代码还是您自己的代码中,或者是某种组合。 – gojomo