gensim0.7.8とscipy0.1.1でmaxentropyモジュールが見つからない問題の解決策メモ。
必要なメソッドのみgensim.matutilsに入れればOK
gensimの作者いわく、「たいして使ってないモジュールだから必要な関数だけコピればOK」だそうです。
# gensim.matutilsの場所を見つける。 find /opt/python2.7/ | grep matutils # このファイルにlogsumexpを追記する。 /opt/python2.7/lib/python2.7/site-packages/gensim-0.7.8-py2.7.egg/gensim/matutils.py # 上記のファイル内なら場所はどこでもOK。 def logsumexp(a): a = asarray(a) a_max = a.max() return a_max + log((exp(a-a_max)).sum())
私はpythonを/opt/python2.7/にインストールしていますが、このパスの部分は各自の環境に合わせて変更してください。
# scipyのlogsumexpをimportしている場所を見付ける。 find /opt/python2.7/ | grep ldamodel # このファイル内のimport文を編集する。 /opt/python2.7/lib/python2.7/site-packages/gensim-0.7.8-py2.7.egg/gensim/models/ldamodel.py # この行をコメントアウトして、 from scipy.maxentropy import logsumexp # log(sum(exp(x))) that tries to avoid overflow # この行を追記。 from gensim.matutils import logsumexp
python # エラーが起きなければ修正完了。 >>> import gensim
scipy0.11とgensim0.7.8の組み合わせで起きるエラー内容
いまさらですがエラー内容も貼っておきます。
>>> import gensim Traceback (most recent call last): File "", line 1, in File "/opt/python2.7/lib/python2.7/site-packages/gensim-0.7.8-py2.7.egg/gensim/__init__.py", line 7, in import utils, matutils, interfaces, corpora, models, similarities File "/opt/python2.7/lib/python2.7/site-packages/gensim-0.7.8-py2.7.egg/gensim/models/__init__.py", line 7, in from ldamodel import LdaModel File "/opt/python2.7/lib/python2.7/site-packages/gensim-0.7.8-py2.7.egg/gensim/models/ldamodel.py", line 46, in from scipy.maxentropy import logsumexp # log(sum(exp(x))) that tries to avoid overflow ImportError: No module named maxentropy
参考リンク
scipy.maxentropy doesn't exist in scipy 0.11