近代文語UnidicをPython3で使おうとして少々大変だった話

プログラミング言語と言えば、仕事ではこのところずっとPHPとJavascriptばかり使っておりますが、ディープラーニング関係はPythonのライブラリが強いということと、大学院生達に教えるならとりあえず世界的な情勢からもPython一択しかないと思って、なんとかちまちまPythonを勉強しながら教えています。 そのようななかで、今回は、近代文学資料のテクスト分析をしてみようということで、分かち書き&形態素解析をすべく、Mecab+近代文語UnidicをPython3から使おうとして少し苦労したので、備忘録代わりにここにまとめておきたいと思います。 ちなみに、環境は、Windows10+WSL+Ubuntu18系です。

MecabをPython3から使えるようになるには、ググればいくらでも情報は出てきますし、この環境でも特殊性はほとんどなかったように 思いましたのでそちらに譲ります。その状況を前提として、次に行きます。

近代文語Unidicは、こちらからダウンロードします。WSL/Ubuntuから見えるディレクトリなら どこでもいいようですので、どこかで展開します。このディレクトリを仮に WSL/Ubuntu側から見て

/mnt/c/Users/nagasaki/Documents/jugyou2019/python_graph/UniDic-kindai_1603 (ディレクトリA)

としておきましょう。

すでにこの環境に、mecab-python3の最新版がインストールされている場合、ホームディレクトリに以下のようなファイルが存在するはずです。

~/.local/lib/python3.6/site-packages/MeCab/mecabrc.in

このファイル中に以下のような箇所がありますので、

dicdir = @DICDIR@

ここに上記のディレクトリAを持ってきて以下のように書き換えます。

;dicdir = @DICDIR@
dicdir = /mnt/c/Users/nagasaki/Documents/jugyou2019/python_graph/UniDic-kindai_1603

これで辞書としては使えるようになったはずです。ただし、テクスト分析のようなことをする場合、 もう一箇所、もしかしたら書き換えた方がいいかもしれない箇所があります。それは、既存のスクリプトが現代語Unidicを 前提としてすでに作られたもので、しかも、-Ochasenといったchasen互換を前提とした形態素解析情報を 読み込むようになっていた場合に限定されると思いますが、この場合、この辞書の設定に以下のような追記をする ことになります。

この場合、近代語Unidicの中に入っている辞書設定ファイル、dicrcに、

UniDic-kindai_1603/dicrc

以下のように追記します。

; ChaSen
node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n
unk-format-chasen  = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n
eos-format-chasen  = EOS\n

これで、現代語Unidicのchasen互換を前提としたPythonスクリプトに近代文語Unidicを使わせることができました。 ただし、Chasen互換の箇所はもう少し書き方を工夫した方がいいかもしれません。

このようにしてやり方が書いてあれば、何のことはなさそうですし、作業自体は10分もかからないと思いますが、 このやり方を確定して、数人の間で同様に動作することを確認するまでに相当の時間を要しました。 非常に限定的なケースですが、しかし、同じことに困る人がいつか出てきた時のためにメモしておきます。

ついでに、もう一つ書いておくと、この関連で、python3で簡単なグラフ描画をするための igraphというモジュールをインストールするのに少々苦労しましたので それも書いておきます。この環境で動かせるようになるまでに、以下のコマンドが必要でした。 これも、ググって丁寧に調べればわかることですが、まとめて書いてあると楽な人もいるだろうと 思います。

sudo apt-get install libxml2-dev
pip3 install python-igraph
sudo apt-get install libcairo2-dev
pip3 install cairocffi

ということで、今後ともよろしくお願いいたします。