2019年11月11日、形態素解析器Sudachiを開発しているWorksApplicationsから同義語辞書がリリースされました!
同義語辞書の用途は主に、文書検索やチャットボットで表記揺れを吸収するのに使われます。
今回はこの辞書の中身について、PythonのライブラリであるPandasを使って調べてみました。
環境
- Ubuntu (Windows 10 WSL)
- Python 3.7.3
- pandas 0.25.3
Sudachi同義語辞書のダウンロード
$ wget https://raw.githubusercontent.com/WorksApplications/SudachiDict/develop/src/main/text/synonyms.txt
読み込み
ドキュメントを見るとcsv形式のようですね!ここからpythonスクリプトを書いていきます。
import pandas as pd
df = pd.read_csv("synonyms.txt", skip_blank_lines=True,
names=('group_id', 'type', 'expand', 'vocab_id',
'relation', 'abbreviation', 'spelling', 'domain',
'surface', 'reserve1', 'reserve2'))
空行有りcsvなのでskip_blank_lines
を設定しておきます。names
は適当です。
検索
とりあえず見出しが一致する全てのdf
を表示させる関数を作ってみます。
def search_synonyms(word):
for row in df[df.surface==word].itertuples():
print(df[df.group_id==row.group_id].loc[:,['group_id', 'domain', 'surface']])
同義語はグループ番号(group_id
)でまとめられているので、見出し(surface
)がword
と一致している行のグループ番号と同じ行をとってくれば大丈夫そうですね!
一例
例えばsearch_synonyms('巨人')
を実行するとこのようになります!
group_id domain surface
5662 3895 (スポーツ) 読売巨人軍
5663 3895 (スポーツ) 巨人
5664 3895 (スポーツ) 読売
5665 3895 (スポーツ) 巨人軍
5666 3895 (スポーツ) 読売ジャイアンツ
5667 3895 (スポーツ) ジャイアンツ
5668 3895 (スポーツ) Giants
group_id domain surface
31690 16305 (人) 巨人
31691 16305 (人) ジャイアント
31692 16305 (人) giant
球団の「巨人」と一般名詞の「巨人」の様々な表記を取って来ることができました!
まとめ
今回はSudachiの同義語辞書を覗いてみました。Sudachi本体もこの同義語辞書も今後どんどん更新されていくことでしょう。今後のアップデートから目が離せませんね!