【Python】NEologdの辞書をGiNZA(sudachi)用に変換して使おう!

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

NEologd の辞書には、映画のタイトルや人名、トレンドのキーワードなど、様々な固有名詞が登録され、日々更新されています。

そこで、それを GiNZAの形態素解析で使ってみようと思い、変換用のプログラムを作りました。

もし私と同じことを考えている方がいらっしゃったら、この記事がお役に立つと思います。

前提知識

この記事を読まれている方は当然、NEologd と GiNZAについて既にご存じだと思いますが、過去の記事でダウンロード方法や使い方などを詳しく紹介していますので、必要に応じてご一読ください。

NEologdとGiNZAにおける辞書項目の対応

両者の辞書フォーマットを比較したところ、以下のように対応付けが出来ました。

単純に NEologdの辞書を1行ずつ読み込んで、GiNAZ(実際はSudachi)の辞書形式に変えて出力してあげれば事が足りそうです。

ただ、少し問題となるのが左接続ID,右接続ID、コストの3点です。

sudachi の 公式ページ では、以下のように推奨されています。

引用元:sudachi 公式ページ

あくまでも推奨なので、NEologdの左文脈ID、右文脈ID、コストをそのまま代入してもよいのですが、一応考慮することにしました。

作成したクラスの解説

今回は、NeoToSudach という名前でクラスを作成しています。

関数にしようかと思ったのですが、左右の接続IDの算出を入れるとメインのソースコードが長くなりそうなので、クラスにしました。

したがって、クラス丸ごとコピペしていただければ使えます。

使い方

クラスのインスタンスを生成し、convメソッドに NEologdの辞書CSVファイルのパスと、変換後のCSVのパスをひきすうとして渡すだけです。

ソースコード

以下はクラスのソースコードになります。

左右の接続IDを求めるメソッド(get_lid,get_rid)は、品詞から推奨値を算出してはいますが、NEologdとGiNZAでは微妙に品詞の表現(NEeologdだと「左辺接続」だが、GiNZAでは「左辺可能」と表現)が異なるため、気休め程度に考えておいてください。

もしかすると、わざわざ算出せずそのまま入れた方がよいのかもしれません。

変換結果のサンプル

変換した結果は次のようになります。

まとめ

NEologd の辞書に登録されている固有名詞はMeCab用なので、GiNZAの形態素解析で使う場合はsudachi の辞書形式に変換しなければなりません。

今回は、NEologd の辞書CSVを sudachi 用の辞書にフォーマット変換するための方法と、自作クラスについて紹介いたしました。

ソースコードにはコメントを入れていますので、あとは皆さんのお好きなように修正していただければと思います。

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