MavenのtestゴールでJUnitのテストケースを実行すると思うが、それらに対して、リモートデバッグを実行するには以下のように実行すれば良い。メモ…。
$ mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test
Elasitcsearchと日本語版WikipediaでLDA
今まで、以下のあたりでいくつか書いてきました。
gensimを利用して、LDAに適用するコーパスを使う例を上げてきましたが、今までのものはbzip2されたデータからコーパスを作成しているだけな jawikicorpus.py だったので、さらに一歩進んで、データ自体もElasticsearchに入れておいて、形態素解析も含めて、Elasticsearchを使うように変えてみます。
適用するにあたっては、
- Elasticsearchの環境を作っておくこと
- RiverでWikipediaのデータを投入しておくこと
- elasticsearch-extended-analyzeプラグインを入れておくこと
- gensim等の必要なpythonモジュールを入れておくこと(pyenvとかで入れれば良いかも)
という前提で、jawikicorpus.py をダウンロードして、
$ python jawikicorpus.py localhost:9200/jawiki-pages-articles wiki_ja_output
を実行すると
$ ls wiki_ja_output_* wiki_ja_output_bow.mm wiki_ja_output_tfidf.mm wiki_ja_output_wordids.txt.bz2 wiki_ja_output_bow.mm.index wiki_ja_output_tfidf.mm.index
という感じでコーパスが作成されます。
あとは、英語版WikipediaでLDAや日本語版WikipediaでLDAにあるような感じで、LDAを適用できるかと思います。
日本語版WikipediaでLDA
「英語版WikipediaでLDA」に続いて、日本語版で試してみる。
日本語の場合は形態素が必要になる。そうすると、ぐぐってみると、jawikicorpus.pyというのを用意して、コーパスを利用することになる。
でも、ぐぐってみると、古かったり、動くのかよくわからないものがいろいろと転がっている感が…。あとは、形態素解析もmecabだったりとか…。
今回、この話の流れの一番始めにElasticsearchに突っ込んでいたりとかで、Elasticsearchの形態素機能を利用できるのでそれを利用することにしたい。でも、ElasticsearchのAnalyzeAPIは名詞などの品詞情報を取得することができない。というわけで、elasticsearch-extended-analyzeをElasticsearchに入れる必要がある。
$ cd $ES_HOME $ bin/plugin -i info.johtani/elasticsearch-extended-analyze/1.4.1
上記のプラグインを入れたら、Elasticsearchを再起動する。あと、WikipediaをElasticsearchに取り込むにあるようにja_analyzerが設定されたインデックスを用意しておく必要がある。
そして、今回利用するjawikicorpus.pyはここに置いておくので、取得して適当に変えてください。変える必要があるのはElasticsearch Infoのコメントを置いたあたりかも。このファイルでは名詞だけに絞っているので、そこを編集したりとかもありかも。
という感じで、ここまで準備ができれば、英語版と同様に実行すればよい。まずは、wikipediaの日本語ファイルをダウンロードする。
$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
次にコーパスを作る。
$ python jawikicorpus.py jawiki-latest-pages-articles.xml.bz2 wiki_ja_output
トピックモデルを作成する。
$ python wiki_lda.py --wordids wiki_ja_output_wordids.txt.bz2 --tfidf wiki_ja_output_tfidf.mm --output wiki_lda_ja.pkl
という感じでできあがり。
model.print_topics(100)とかすると、形態素解析を実行する前にwikipedia記法を取り除いて文書にした方がコーパス的には良いかなというような気も…。