見出し画像

GiNZA入門 (3) - ユーザー辞書

「GiNZA」のユーザー辞書を追加する方法をまとめました。

・GiNZA 4.0.5

前回

1. GiNZA のインストール

(1) 「Google Colab」で以下のコマンドを実行。

!pip install -U ginza

(2) メニュー「ランタイム → ランタイムを再起動」で「Google Colab」を再起動。​

2. 追加する単語の確認

今回は、「となりのトトロ」という単語をユーザー辞書に追加します。デフォルト辞書では未対応であることを確認します。

import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('となりのトトロが好き')

# 形態素分割
for sent in doc.sents:
    for token in sent:
        print(token)
となり
の
トトロ
が
好き

3. ユーザー辞書の作成

ユーザー辞書のCSVを作成して、「Goolge Colab」にアップロードします。

・/content/user_dic.csv

となりのトトロ,4786,4786,5000,となりのトトロ,名詞,固有名詞,一般,*,*,*,トナリノトトロ,となりのトトロ,*,*,*,*,*

辞書の書式は、次のとおりです。

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

詳しくは、以下で確認できます。「GiNZA」の形態素解析は「SudachiPy」を使っているので、辞書の仕様は「Sudachi」と同じになります。

4. ユーザー辞書のビルド

ユーザー辞書のビルドを行います。

!sudachipy ubuild \
  -s /usr/local/lib/python3.7/dist-packages/sudachidict_core/resources/system.dic \
  user_dic.csv

Pythonパッケージのパス下の「sudachidict_core/resources/system.dic」を指定します。成功すると、「user.dic」が生成されます。

Pythonパッケージのパスの調べ方は、次のとおり。

import sys
import pprint
pprint.pprint(sys.path)

5. 設定ファイルへのユーザ辞書の追加

SudachiPyの設定ファイルにユーザ辞書の設定を追加します。SudachiPyの設定ファイルは、Pythonパッケージのパス下の「sudachipy/resources/sudachi.json」にあります。

・/usr/local/lib/python3.7/dist-packages/sudachipy/resources/sudachi.json 

{
   "characterDefinitionFile" : "char.def",
   "userDict" : ["/content/user.dic"],      ← ユーザー辞書の設定の追加
   "inputTextPlugin" : [
       :

​6. 追加した単語の確認

ユーザー辞書で対応できたことを確認します。

import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('となりのトトロが好き')

# 形態素分割
for sent in doc.sents:
    for token in sent:
        print(token)
となりのトトロ
が
好き

【おまけ】 ユーザー辞書の設定追加スクリプト

import sys
import os

# システム辞書のパス
sys_dic_path = ''
for path in sys.path:
    path = path+'/sudachidict_core/resources/system.dic'
    if os.path.exists(path):
        sys_dic_path = path
        break
print('sys_dic_path:', sys_dic_path)

# ユーザー辞書のパス
user_dic_path = os.getcwd()+'/user.dic'
print('user_dic_path:', user_dic_path)

# sudahci.jsonのパス
sudachi_path = None
for path in sys.path:
    path = path+'/sudachipy/resources/sudachi.json'
    if os.path.exists(path):
        sudachi_path = path
        break
print('sudachi_path:', sudachi_path)

# userDictの追加
if sudachi_path != None:
    lines = []
    with open(sudachi_path) as f:
        lines = f.readlines()
    for i in range(len(lines)-1):
        if lines[i].find('"characterDefinitionFile"') >= 0 and lines[i+1].find('"userDict"') < 0:
            lines.insert(i+1,'    "userDict" : ["'+user_dic_path+'"],\n')
            with open(sudachi_path, 'w', encoding='utf-8', newline='\n') as f:
                f.writelines(lines)
            print('update')
            break

次回



この記事が気に入ったらサポートをしてみませんか?