gensim0.7.8とscipy0.1.1でmaxentropyモジュールが見つからない問題の解決策

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


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール