こちらの記事でchikkarpyの使い方について説明してあります。
今回はそのchikkarpyで使う同義語辞書を自作する方法について紹介します。
同義語辞書のフォーマットについて
まず同義語辞書の内容について軽く説明をしておくと、この辞書のフォーマットでは以下の情報がcsv形式で付与できます。
0 : グループ番号
1 : 体言/用言フラグ (省略可)
2 : 展開制御フラグ (省略可)
3 : グループ内の語彙番号 (省略可)
4 : 同一語彙素内での語形種別 (省略可)
5 : 同じ語形の語の中での略語情報 (省略可)
6 : 同じ語形の語の中での表記ゆれ情報 (省略可)
7 : 分野情報 (省略可)
8 : 見出し
9 : 予約
10 : 予約
Sudachi 同義語辞書から引用
同義語辞書を作成する際に、chikkarpyが使う情報は0,1,2,8
のカラムのみとなるので他は無視して大丈夫です。
8は見出し語となるので必須で、その他 0:グループ番号, 1:体言/用言フラグ, 2:展開制御フラグについて説明しています。
同義語辞書の作成
グループ番号について
同義語辞書の作成で一番重要な情報がグループ番号となります。
グループ番号が同じであれば同義語としてchikkarpyが出力してくれます。
例えば以下のような辞書を作ると、
$ cat sysnonym_dict.csv
000001,1,0,0,0,0,0,,金,,
000001,1,0,0,0,0,0,,現金,,
000001,1,0,0,0,0,0,,キャッシュ,,
$ chikkarpy build -i synonym_dict.csv
(略)
$ echo "金" | chikkarpy -d synonym.dic
金 現金,キャッシュ
同じグループ内の単語を検索できています。
さらに、金の別の意味を同義語グループとして追加してみましょう。
すると以下のような動作になります。
$ cat sysnonym_dict.csv
000001,1,0,0,0,0,0,,金,,
000001,1,0,0,0,0,0,,現金,,
000001,1,0,0,0,0,0,,キャッシュ,,
000002,1,0,0,0,0,0,,金,,
000002,1,0,0,0,0,0,,金色,,
$ chikkarpy build -i synonym_dict.csv
(略)
$ echo "金" | chikkarpy -d synonym.dic
金 現金,キャッシュ,金色
$ echo "キャッシュ" | chikkarpy -d synonym.dic
キャッシュ 金,現金
$ echo "金色" | chikkarpy -d synonym.dic
金色 金
金に対して2つの同義語グループを作りましたが、金からは「現金, キャッシュ, 金色」が検索できており、「現金」から「金色」(逆も然り)が同義語として検索に引っかからないようになっています。
この様に、同義語辞書はグループ番号で管理されています。
体言/用言フラグ
次に、体言/用言フラグについてです。「1:体言, 2:用言」を表しています。
これはその見出し語が体言か用言であるかを表すフラグとなっており、体言から用言が検索に出ないように抑制するためのフラグです。体言と用言を同じ同義語グループに入れない場合や品詞による出し分けをする必要がなければ気にする必要はありません。すべて「1」にしておけば辞書として使うことができます。
例としては以下の通りです。
$ cat sysnonym_dict.csv
000001,1,0,0,0,0,0,,会計,,
000001,1,0,0,0,0,0,,勘定,,
000001,2,0,0,0,0,0,,支払う,,
$ chikkarpy build -i synonym_dict.csv
(略)
$ echo "会計" | chikkarpy -d synonym.dic
会計 勘定
$ echo "会計" | chikkarpy -d synonym.dic -ev
会計 勘定,支払う
体言/用言フラグを使うと普通に検索する場合は「会計」からは「支払う」が出てきませんが、-ev
フラグによって用言の検索を可能にできるので、状況によって出し分けることができます。
展開制御フラグ
最後に、展開制御フラグについてです。「0:抑制なし, 1:抑制あり」となります。
語義の曖昧性が大きい単語に対して複数の同義語グループに展開させることを抑制する場合に使います。
$ cat sysnonym_dict.csv
000001,1,1,0,0,0,0,,cod,,
000001,1,0,0,0,0,0,,CoD,,
000001,1,0,0,0,0,0,,Call of Duty,,
000002,1,1,0,0,0,0,,cod,,
000002,1,0,0,0,0,0,,COD,,
000002,1,0,0,0,0,0,,化学的酸素要求量,,
$ chikkarpy build -i synonym_dict.csv
(略)
$ echo "cod" | chikkarpy -d synonym.dic
cod
$ echo "COD" | chikkarpy -d synonym.dic
COD cod,化学的酸素要求量
"000001,1,1,0,0,0,0,,cod,,"のように展開制御フラグが1となっているため、「cod」をキーとして同義語検索がされないようになっています。ほかの単語から「cod」は検索できます。
まとめ
以上、同義語の書き方の紹介でした。
今回は自作する方法を紹介しましたが、ワークスでは同義語辞書を人手で作って更新もしています。是非使ってみてください。
http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachisynonym/