0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LDA in PythonをPython 3で使う方法(2019年2月8日現在)

Last updated at Posted at 2019-02-08

はじめに

この記事では、下記リンク先にあるLDA in Pythonを、Python 3で使う方法を説明します。
(conda 4.6.2で確認しています。Pythonのバージョンは3.6.7です。)

http://chasen.org/~daiti-m/dist/lda-python/

makeする前の準備

上のWebページにあるtar.gzファイルをダウンロードしたら、

$ tar zxvf lda.py-0.1.tar.gz

として解凍します。そして、

$ cd lda.py-0.1

と、ディレクトリに下りていきます。

logging.pyというファイルがありますが、loggingモジュールと名前がかぶっているので、

$ mv logging.py mylogging.py

と、適当なファイル名(ここではmylogging.py)へと変更します。
そして、lda.pyというファイルの中に現れるloggingという文字列を、すべてmyloggingへと置き換えます。
こうすれば、lda.pyの中ではmylogging.pyを見に行くようになります。

この後で、

$ make

として、ldac.pyxのコンパイルをおこないます。

lda.pyの実行

lda.pyを実行するとき、

$ ./lda.py -h

とすると、

$ ./lda.py -h
Traceback (most recent call last):
  File "./lda.py", line 8, in <module>
    import ldac
ImportError: No module named ldac

というエラーが出るかもしれませんので、

$ python lda.py -h

とします。

あとはPython 2とPython 3の違いに由来するエラーがいくつか出るだけです。
それらをひとつずつ修正していきます。

Python 3で使うためのコードの修正

まず、lda.pyでもfmatrix.pyでも、xrangeが使われていますので、rangeに置き換えておきます。

そして、他のエラーについては、以下のように対処します。

$ python lda.py -h
  File "lda.py", line 40
    except getopt.GetoptError, err:
                             ^
SyntaxError: invalid syntax

これについては、lda.pyの所定の行に行って「, err」を削除します。
(コードの気持ちとしては「except getopt.GetoptError as err:」だと思いますが、
単に「, err」を削除して「except getopt.GetoptError:」と書き直すだけでも、ちゃんと動きます。)

$ python lda.py -h
Traceback (most recent call last):
  File "lda.py", line 12, in <module>
    import fmatrix
  File "/data10/masada/lda.py-0.1/fmatrix.py", line 55
    print data
             ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(data)?

これについては、fmatrix.pyの所定の行に行って「print(data)」と丸カッコを追加します。

$ python lda.py -h
Traceback (most recent call last):
  File "lda.py", line 15, in <module>
    import cPickle as pickle
ModuleNotFoundError: No module named 'cPickle'

これについては、lda.pyの最初のほうにある「import cPickle as pickle」を、
import pickle」と書き直せばいいだけです。

2019年2月14日の追記

同じ内容の記事が以下の場所にあります。
https://gist.github.com/nzw0301/7b1047dde2528b47aaabc9a4010a1003

私のここの記事では、lexicon関数のv = Noneに関するエラーに言及するのを忘れていました。

おわりに

以上でLDA in PythonがPython 3で使えるようになると思います。

$ python lda.py -K 10 -N 100 train model
LDA: K = 10, iters = 100, alpha = 5, beta = 0.01
loading data.. documents = 100, lexicon = 1325, nwords = 16054
initializing..
Gibbs iteration [100/100] PPL = 698.9706
saving model to model ..
done.
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?