用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环境。
具体是什么信息? Thx的建议,我尝试从头开始重新创建一个环境,并告诉你它是否工作。 – debzsud
您列出的错误通常会与更多信息一起报告,其中包括触发的确切代码行(以及这些堆栈帧的调用位置等)。这将有助于确定问题出现在库代码还是您自己的代码中,或者是某种组合。 – gojomo