LoginSignup
15
7

More than 3 years have passed since last update.

Sudachi 同義語辞書をPandasで読み込んで同義語検索してみた

Last updated at Posted at 2019-11-18

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本体もこの同義語辞書も今後どんどん更新されていくことでしょう。今後のアップデートから目が離せませんね!

15
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7