アルの備忘録

本棚が足りずにいいものを探しているがなかなか見つからないので困ってる雑記ブログ

【導入手順】NEologdをWindowsにいれてPythonで動かしてみた!辞書反映後の精度がすごい!

 

はじめに

NEologdをWindowsに入れてPythonで動かすまでに時間がかかってしまったので備忘録です。

 

前回はMeCabを入れて動かしたので、今回は辞書を入れて形態素解析の精度を上げてみます。

辞書データを入れることで分割されて、思うように認識されない単語も1単語として認識されるようになります。

 

NEologdとは

NEologdはMeCab用のシステム辞書です。

新しい単語や独自に認識させたい単語を登録することで形態素解析が可能となります。

 

まだ、MeCabを導入していない場合はこちらの記事から実装してみてください。

www.matematetea.com

 

NEologdの導入手順

まずは上記にある通り、MeCabをインストールしておきます。

MeCabが動いたら次のステップを進めていきます。

 

NEologdのインストール

※ここではgitにあるmecab-user-dict-seed.20200910.csvというファイル取得が目的です。直接取得できれば次のステップに進んでください。

 

適当な作業ディレクトリに移動した後、以下のコマンドでgit cloneします。

 

git cloneができたら以下の階層を確認してください。

mecab-ipadic-neologd/seed/

seed配下のファイルを7zipを使って展開します。

私はコマンド打っても展開しなかったので、直接エクスプローラーから展開しました。

展開して、mecab-user-dict-seed.20200910.csvというファイルが見つかればOKです。

 

次はそのファイルがある階層に移動します。

cd ~\mecab-ipadic-neologd\seed

 

辞書のコンパイル

私はここの作業が全く進みませんでした。

 

mecab-dict-index.exeを使ってバイナリの辞書に変換します。

mecab-dict-index -d 辞書のフォルダ -u 辞書名 -f utf-8 -t utf-8 csv名

 

私の場合は以下のコマンドを実施しました。

mecab-dict-index -d "c:\Program Files\MeCab\dic\ipadic" -u NEologd.20200910-u.dic -f utf-8 -t utf-8 mecab-user-dict-seed.20200910.csv

うまくいくと画像のように 「 done! 」 と表示されます!

NEologd導入時の辞書のコンパイル

やったー!!!

 

ファイルの移動

ここのステップは飛ばしてもらっても大丈夫です。

いろんなサイトを参考にしていた時に作業しただけです。

 

以下のコマンドでフォルダを作成し、辞書ファイルを移動させます。

mkdir "C:\Program Files\MeCab\dic\NEologd"

 

move NEologd.20200910-u.dic "C:\Program Files\MeCab\dic\NEologd"

 

mecabrcの編集

PythonでNEologdを使うためにファイルを変更します。

以下の配下に「mecabrc」というファイルがあると思います。

C:\Program Files\MeCab\etc

 

mecabrcファイルの以下のようになっている部分を、

; userdic = /home/foo/bar/user.dic

 

下記のように書き換えて保存します。

; userdic = C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dicc

 

これでNEologdの導入作業の完了です!

 

PythonでNEologdを動かしてみる

前回作成したmecab.pyに変更を加えます。

Taggerでパスを指定して形態素解析をするときに辞書を反映させます。

import MeCab
 
# mecab = MeCab.Tagger()
mecab = MeCab.Tagger(r'-d "C:\\Program Files\\MeCab\\dic\\ipadic" -u "C:\\Program Files\\MeCab\\dic\\NEologd\\NEologd.20200910-u.dic"')
str = '鬼滅の刃は週刊少年ジャンプの看板作品だったが、今では呪術廻戦が人気だ!'
print(mecab.parse(str))

 

strに適当な文章をいれて、実行すれば確認完了です。

 

精度を比較してみたらすごかった

NEologdを使った時の違いを比べてみようと思います。

こちらの文章で試してみます!

「鬼滅の刃は週刊少年ジャンプの看板作品だったが、今では呪術廻戦が人気だ!」

 

まずは辞書を使わない場合(前回の記事の状態)

NEologdが反映されないときの形態素解析の結果

なるほど、「鬼滅の刃」「呪術廻戦」が分解されてしまっています。

「週刊少年ジャンプ」も「週刊」「少年」「ジャンプ」ですね。

これは間違ってはいませんが注目部分です。

 

 

次にTaggerに辞書のパスを指定して、同じ文章を検証します。

NEologdを入れて形態素解析をしてみた結果

すごい!!!

「鬼滅の刃」「呪術廻戦」「週刊少年ジャンプ」が分解されずに形態素解析されています!

 

NEologdを導入しただけで、ここまで変わるとは驚きですね。

一般的な文章でもそれなりに精度がいい印象でしたが、NEologdでさらに上がっています。

 

今回はNEologdをWindowsに入れてPythonで簡単に動作検証までしてみました。

参考になれば嬉しいです。