【超便利】WindowsのPythonとGiNZAで形態素解析だ!辞書登録とMeCab形式出力も解説!

Python入門
この記事は約6分で読めます。

これまでに、MeCab と janome を使った形態素解析について紹介してきました。

今回は、GiNZAを使った形態素解析について紹介します。

ついでに、ユーザー辞書の登録方法と、解析結果をMeCab形式で出力するための方法についても触れていますので、興味のある方は是非ご一読ください。

GiNZAとは

GiNZAとは、Megagon Labs国立国語研究所の共同研究によって誕生した自然言語処理用のライブラリで、自然言語処理のフレームワークであるspaCy と、形態素解析機である SudachiPy の2を内部で使っています。

今回の記事では、形態素解析機の部分に焦点を当てています。

GiNZAについては、こちら の記事でもう少し詳しく触れていますので、興味のある方は是非お読みください。

インストール方法

インストールは pip コマンドを使います。

お使いのPCに16GB以上のメモリがあり、更なる精度を求めるのであれば、次のコマンドを実行して下さい。

形態素解析の方法

GiNZAを使うには、あらかじめ spacy と ginza のインポートが必要です。

使い方は以下の手順になります。

実行結果は次の通りです。

出力形式は CoNLL-Uフォーマット とのことですが、読んでもよくわかりませんでした。

ほとんどの場合、品詞で分類したいだけなので、左から7番目の項目で判断して下さい。

MeCab互換の出力形式

GiNZAの出力項目が100% MeCabの出力項目と一致はしないのですが、ほぼ項目の並びを合わせる事ができたので、紹介しておきます。

先ほどのプログラムで、 for sentence in doc.sents: ~ 以降を変更しているだけです。

以下が実行結果です。

ユーザー辞書の登録方法

GiNZAへのユーザー辞書の登録手順は次のようになります。

CSVのフォーマット

形態素解析に SudachiPyを使っているので、こちらの公式ページに辞書として登録可能なCSVの詳細が掲載されています。

ここでは簡単に説明しておきます。

まず、CSVは下記のフォーマットで作成する必要があります。

左連接ID,右連接IDともに、以下の値が推奨されています。

普通名詞5146 名詞,普通名詞,一般, , , , *,漢
5133 名詞,普通名詞,サ変可能, , , , *,漢
固有名詞4786 名詞,固有名詞,一般, , , , *,固
4789 名詞,固有名詞,人名,名, , , ,
4790 名詞,固有名詞,人名,姓, , , ,

一方、コストについては、名詞類の登録であれば、「5000~9000」が推奨されています。

辞書のビルド

辞書が出来上がったら、次のコマンドで辞書をビルドします。

sudachipy ubuild -s [システム辞書のパス] [作成したcsvファイルのパス] 

第一引数はシステム辞書のパスです。

このコマンドを実行したからといって、ユーザー辞書の内容がシステム辞書に追加されるわけではありませんのでご安心ください。

Pythonをどこにインストールしたかによって変わってきますが、私の場合は下記の場所にありました。

  C:\ProgramData\Anaconda3\Lib\site-packages\sudachidict_core\resources\system.dic

例えば、Pドライブに GinzaUserDic.csv というファイルを作った場合、次のようになります。

このコマンドによって、カレントドライブに user.dic が生成されます。

ちなみに、出力先や出力辞書名を指定したい場合は、-o オプションで指定可能です。

sudachipy ubuild -s [システム辞書のパス] -0 [出力する辞書のパス] [作成したcsvファイルのパス] 

例えば、Pドライブに MyDic.dic という名前で出力したい場合は次のようになります。

尚、文字コードは UTF-8 にしておきます。

sudachi.json への追加

私の場合は以下のフォルダにsudachi.jsonがありました。

 C:\ProgramData\Anaconda3\Lib\site-packages\sudachipy\resources

ここの sudachi.json の “characterDefinitionFile”:”char.def”, の次に、以下の形式でユーザー辞書のパスを追加します。

“userDict”: [ “ユーザー辞書のパス1” , “ユーザー辞書のパス2” ,・・・],

この時、ユーザー辞書のパスは前後をダブルクォートで括り、パスの区切り文字(\) は 2個連ね(\\)行末尾にカンマを付けるのがポイントです。

私は最初、”userDict” を “userDic” と記述ミスして、辞書が反映されなくて悩んでしまいましたので、ご注意ください。

また、Json形式の記述に則っていればエラーにはなりませんが、正しくキーの部分( “userDict” ) を記述しないとユーザー辞書として認識してくれません。

ちなみに、Json形式でない誤った書き方( 前後の[ ] が無い、カンマが無いなど )をすると、実行時にエラーになります。

話は元に戻しますが、例えば、Pドライブに置かれたuser.dic をユーザー辞書として追加したいなら、次のように記述します。

Windowsの場合、パスの区切りの¥は2個連ねて¥¥と記述しないとエラーになりますのでご注意ください。

辞書を使ってみる

辞書を登録後、”術約束のネバーランドを見ながら雪見だいふくを食べた” という文章を形態素解析したら、以下のような結果になります。

まとめ

今回は GiNZAを使った形態素解析について紹介致しました。

GiNZAの形態素解析速度はMeCabよりも遅いですが、手軽にインストール可能で64BitのPythonに完全対応しているところと、係り受け分析まで一気通貫で行えるところが魅力です。

20億件の学習済みモデルを利用することで、MeCabを超える(たぶん)精度も期待できます。

形態素解析にも種類によって色々な特徴があるので、用途によって使い分けて頂ければと思います。

今回の記事が皆さんの一助になれば幸いです。

タイトルとURLをコピーしました