日本語形態素解析器spaCyでのユーザ辞書の使い方

KEYWORD

python, spaCy, 形態素解析, テキスト分析 

どんなときに使うか?

 近年、半導体回路の爆発的な効率化とデータテックの向上により、toCビジネスでは商品レビュー、口(クチ)コミ、そしてSNSの投稿などのビッグテキストデータが活用できるようになってきました。特に、toCのうちのカスタマー(Customer)や消費者(Comsumer)の行動ログから過去から未来に架けて市場トレンドの洞察像をつくれるようになりました。"各ユーザにどんなより良いサービスを届けられるか?"を仮説立ててサービスを組み立てるアプローチが1つ主流になっているように感じます。ここではそのテキスト分析する際に利用する形態素解析器の1つであるspaCyの使い方、そして日本語に特化したGiNZAモデルの使い方を記します。

事前準備

・Python 3.7.7
・Ubuntu 20.04 LTS(WSL)
・spaCy
・pyenv

pip install -U pip setuptools wheel
pip install -U spacy SudachiPy ginza ja_ginza_electra

ソースコード

# -*-coding:utf-8 -*-
"""
 形態素解析の実行ファイル。
"""

import spacy

def main():
   nlp:spacy.Language = spacy.load('ja_ginza_electra')
   text:str = 'このカーディガンはずっと前に株式会社Heroyukiで子どもの入園式のために買いました。'
   doc:spacy.tokens.doc.Doc = nlp(text)
   for token in doc:
     print(token.text, type(token))
if __name__ == '__main__':
   main()

ユーザ辞書の作成

 spaCy-GiNZAはSudachiPyを形態素解析器として使っています。
ユーザ辞書作成の手順は以下の通りです。
① フォーマットに従ってユーザ辞書を作成します。
② 手順①で作成したファイルからSudachiPyシステムが読み込める形式ファイル(user.dic)を生成します。
③ 手順②で作成したファイルをSudachiPyが読めるように設定ファイルにユーザ辞書の場所を書き込みます。

① ユーザ辞書の作成

Sudachiのユーザ辞書のフォーマットは次のようになります。

見出し(表層形), 左連接ID, 右連接ID, 連接コスト, 見出し, 品詞1, 品詞2, 品詞3, 品詞4, 品詞 (活用型), 品詞 (活用形), 読み, 正規化表記, 辞書形ID, 分割タイプ, A単位分割情報, B単位分割情報, 未使用

具体的には、ファイル名をuser_dictionary.csvとすると、中身は以下の通り。

株式会社Heroyuki,4789,4789,5000,株式会社Heroyuki,名詞,固有名詞,一般,*,*,*,*,株式会社Heroyuki,*,*,*,*,*
(株)Heroyuki,4789,4789,5000,(株)Heroyuki,名詞,固有名詞,一般,*,*,*,*,株式会社Heroyuki,*,*,*,*,*

このように同じ意味合いですが異なる表現で記される"異表記"があります。異表記をユーザ辞書に登録しておくとテキスト分析するときに良いことがあります。

surface_form:str = '(株)Heroyuki' #表層形
lemma:str = '(株)Heroyuki' #見出し語
norm_form:str = '株式会社Heroyuki' #正規化表現

print("{},4789,4789,5000,{},名詞,固有名詞,一般,*,*,*,*,{},*,*,*,*,*".format(surface_form,lemma,norm_form))

② ユーザ辞書をSudachiPyが読めるuser.dicに変換する。

# SudachiPyが読めるユーザ辞書(user.dic)の作成
$ sudachipy ubuild -s ~/site-packages/sudachidict_core/resources/system.dic user_dictionary

③SudachiPyがユーザ辞書を使うように設定ファイルで指令する。

$ vi  ~/site-packages/sudachipy/resources/sudachi.json 
```
{
   "systemDict" : null,
    "characterDefinitionFile" : "char.def",
    "userDict" : ["your_path/user.dic"],
    ...(省略)
}
```

以上です。

日本語の形態素解析について

 この他にも日本語の形態素解析器はMecabなどがあります。しかし、現在(2022年4月時点)も開発継続中でOSSなのはspaCyとJUMAN++です。もしこれ以外にもOSSで開発中の形態素解析器があれば教えて下さい。spaCyは継続的に開発されているOSSであり、多言語モデルがあることから商用利用に良いと私は思います。どこかでDockerコンテナによりユーザ辞書をチームに共有するところまで追記できればと思います。

参照

https://www.kspub.co.jp/book/detail/5274101.html

いいなと思ったら応援しよう!