2021年8月30日月曜日

KH Coderでmecab-ipadic-NEologdを使う

フリーソフトウェアであるKHコーダー(KH Coder)を用いてテキストマイニングを行うことになった。

対象は、アンケート結果やネット上の口コミ。

日本語のテキストマイニングを行う場合、形態素解析エンジンが必要となる。

有名なのはMecabやChasenだが、KH Coderではこの二つが既に入っているので新たに用意する必要は無い。

しかし、単語分かち書き辞書であるmecab-ipadic-NEologdを使用すると、ニュース記事等で使われる新語や固有名詞や未知語、またはネット上で流行した単語や慣用句やハッシュタグを固有の単語として分かち書きすることが出来る。

mecab-ipadic-NEologdはWeb上の言語資源を活用して、随時新しい固有表現を追加し毎週2回以上更新されている優れものだ。

例えば「鬼滅の刃」を通常のMecab(MeCab + IPADIC )で形態素解すると、「鬼」「滅」「の」「刃」とそれぞれ名詞や助詞に分かち書きされるが、Mecab + mecab-ipadic-NEologdでは「鬼滅の刃」と固有名詞で分かち書きされる(IPADIC は形態素解析をする際にMecabで使われている標準の辞書名)。

アンケート結果やネット上の口コミは、新語や固有表現が多く混入しているテキストデータになることが多いため、mecab-ipadic-NEologdを用いることは有効であろうと思われる。

ただし、mecab-ipadic-NEologdはLinux環境でしか作成できないらしい。

何とかWindows環境で使用する方法はないだろうか。

調べてみると、Linux用Windowsサブシステム (WSL) を使ってWindowsにLinux環境を構築し、その中でmecab-ipadic-NEologdをインストールして取り出す方法や、git for Windowsと7-zipを用いる方法などがあることが分った。この他にAnacondaの環境でもインストール出来るようだ。

しかしそれぞれ、WSLで必要なパッケージをインストールしたり(そのあとUbuntuもインストールする必要有り)、git for WindowsやAnacondaをインストール必要がある(場合によってはインストール後に設定も必要となる)。

今回の目的はmecab-ipadic-NEologdを作成し取り出すだけなので出来るだけ簡単に行いたいし、それ以後使わないパッケージ等は可能であれば自分のPCにはインストールしたくない。

何か良い方法は無いかと考えていたがふとGoogole Colaboratory(以下 Colab)が、Linux(正確にはUbuntu)環境だったことを思い出した。それならばColabにmecab-ipadic-NEologdをインストール出ないだろうかと調べてみたらやっぱりできそう。

この方法ならば自分のPCにパッケージがインストールされることは無い。Colabでもセッションが終了して所定の時間が経過されるとインストールしたパッケージ等はリセット(削除)されるし、自分でリセットも可能。


大まかな流れとしては、Colab環境でmecab-ipadic-NEologdをインストールした後、作成したmecab-ipadic-neologdのフォルダをzipファイルに圧縮しダウンロードして、Windows上で解凍してからKH CoderのMeCab辞書をIPADICからmecab-ipadic-NEologdに変更する、といった流れ。

以下具体的方法を記す。

1)MeCabとmecab-ipadic-NEologdのインストール(Colab環境)

# MeCabのインストール

!apt install aptitude swig

!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y

!pip install mecab-python3==0.996.3


# mecab-ipadic-NEologdのインストール

!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -a


注意点としては、Mecab → mecab-ipadic-NEologd の順にインストールすること。

mecab-ipadic-NEologdだけをインストールしようと思っても「Mecabがありません」といった内容のエラーメッセージが出る。

またmecab-python3 がver1以降だとうまく動かないことがあるので、ver0.996.3をインストールするように設定してある。今回はmecab-ipadic-NEologdを取り出すのが目的なのでver0.996.3であっても大きな問題は無い。

ちなみにインストール完了したら結果出力画面に下記のように辞書ファイルのパスが表示されると思うので、コピペして保存しておくと後々便利。

Usage:

    $ mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd ...


2)zipファイルに圧縮しダウンロード(Colab環境)

ダウンロードしたいフォルダを zip 圧縮する。

!zip -r /content/「圧縮したファイル名」.zip /「圧縮したいフォルダのパス」

で圧縮できる。

Colab の「ファイル」タブのデフォルトパス(画面の左側でsample_dataフォルダあるフォルダのパス)は /content/ となっているので注意。

フォルダのパスは、リストの中から目的のフォルダを探して右クリックで表示される[パスをコピー]でコピーできる(ファイルの場合でも同じ)が、前述のように辞書フォルダのパスはMecabとmecab-ipadic-NEologdのインストール終了後に表示されるので、それを参照すると良いだろう。

処理が完了すると指定したフォルダに指定したzipファイル(Mecabとmecab-ipadic-NEologdの圧縮ファイル)が確認できる。

ちなみにmecab-ipadic-NEologdでは、1G程のフォルダが200M程度のファイルに圧縮できるようだ。

ダウンロードは右クリックの「ダウンロード」で可能だがファイルサイズが大きい場合、開始されるまでに多少時間がかかる。

リング状のインジケーターが表示されるのでそれを参考にして気長に待つ。

前にも述べたが、Colab環境ではセッションが終了して所定の時間が経過されるとインストールしたパッケージ等はリセット(削除)される。これには作成したファイルやアップロードしたファイルも含まれるため、リセット(削除)される前にダウンロードする必要がある。


3)KH Coderの設定方法(Windowsb環境)

ダウンロード出来たら解凍してmecab-ipadic-NEologdフォルダを取り出す。

Windows10では、zipファイルを通常のフォルダと同じように中身を見ることができる。かなり階層が深いがmecab-ipadic-NEologdフォルダを簡単に取り出すことができるはずである。

なお、KH CoderではMecabのデフォルトの設定で、辞書の文字コードはUTF-8となっているのでエンコードの必要は無い(この設定は、「プロジェクト」→「設定」でMecabの個所に表示されるので確認できる)。

それからKH Coderフォルダ配下にあるMeCab辞書のフォルダにmecab-ipadic-NEologdをコピーする。

デフォルトの設定でインストールした場合は

C:\khcoder3\dep\mecab\dic

となっているはずで、ここにはipadicフォルダもあるはずである。


続いて

C:\khcoder3\dep\mecab\etc\

にあるmecabrcファイルをテキストエディタで開いて下記のように変更し保存する。


dicdir =  $(rcpath)\..\dic\ipadic

dicdir =  $(rcpath)\..\dic\mecab-ipadic-neologd


書き換えても良いが「;」でコメントアウトする方が実用的かな。

dicdir =  $(rcpath)\..\dic\ipadic

;dicdir =  $(rcpath)\..\dic\ipadic

dicdir =  $(rcpath)\..\dic\mecab-ipadic-neologd


KH Coderでプロジェクトの新規作成で、形態素解析エンジンをChaSenからMeCabに変更する。

これでKH Coderでmecab-ipadic-NEologdが使えるようになったはずである。

mecab-ipadic-NEologdを更新する場合は、同様の手法で新しいフォルダをダウンロードした後入れ替えれば良い。


余談だがKH Coderではデフォルトでは「C:\khcoder3」にファイルが解凍される。

削除する場合はこのフォルダを削除すれば良いし、移動することも名前を変えることも可能。

ただし、MecabやChasenでは「C:\khcoder3」でパスが通っているので、移動したり名前を変えたりすると起動できなくなるのでパスを変更する必要がある。


以上の変更を行ったが、果たしてその結果を確認してみる。

使用するのは下記の文章。

「鬼滅の刃は吾峠呼世晴による日本の漫画作品。」


まずはColab環境でMecabを使用した場合。

その結果が次の通り。

MeCab + IPADIC(Mecab標準)の場合

鬼: 名詞,一般

滅: 名詞,一般

の: 助詞,連体化

刃: 名詞,一般

は: 助詞,係助詞

吾: 名詞,一般

峠: 名詞,接尾

呼: 名詞,一般

世: 名詞,一般

晴: 名詞,一般

による: 助詞,格助詞

日本: 名詞,固有名詞

の: 助詞,連体化

漫画: 名詞,一般

作品: 名詞,一般

。: 記号,句点


Mecab + mecab-ipadic-NEologdの場合

鬼滅の刃: 名詞,固有名詞

は: 助詞,係助詞

吾峠呼世晴: 名詞,固有名詞

による: 助詞,格助詞

日本の漫画: 名詞,固有名詞

作品: 名詞,一般

。: 記号,句点


前述の通りデフォルト辞書では「鬼滅の刃」が全てバラバラに抽出されている。「吾峠呼世晴」も同じ結果。

しかし、辞書をmecab-ipadic-NEologdに変更すると「鬼滅の刃」「吾峠呼世晴」はそれぞれ固有名詞として抽出されている。


次に、この文章をKH Coderで取り込んで抽出語リストを作成してみる。

以下、その結果。
















これらの結果は、MecabをPython(Colab環境)で使用した場合とほぼ同じであるので、KH Coderでも辞書の変更は正常に行われたと思われる。


以上のように、mecab-ipadic-NEologdは最近のトピックスを扱う場合には大きな効果を発揮するだろう。