20200812のMacに関する記事は1件です。

PythonからMeCabを使用してユーザ辞書が適用されずハマった

はじめに

研究目的で実践医療用語が収納されたComeJisyoをmecabのユーザ辞書に登録した際に,辞書が反映されなかった話です.結論から言うとだいぶ初歩的なミスで, mecabの使い方をよく理解していなかったのが原因でした.しかし,自分は結構困ってしまったので,もしかして誰かの役に立つかもしれないので記録を残します.

参考サイト

(1)ComeJisyoダウンロード:https://ja.osdn.net/projects/comedic/
(2)ユーザ辞書の登録:https://qiita.com/quvo/items/9ef250d58971eadf6e1a

(2)の記事は2016年の古い記事のため,(1)で公開されているComeJisyoの一番古いバージョンしかない時期でした.そのため,(2)で紹介されているような辞書をmacで使用するためにUtf-8に変換してdicファイルを生成する必要はなく,今だったら公開されているUtf-8版をダウンロードすれば既にdic形式のファイルも付いています.

なので,参考にするのは(2)のユーザ辞書の登録のみです.

ハマったところ

参考サイト(2)を参考にして,ComeJisyoをユーザ辞書に指定した後,python3でmecabによる形態素解析を行なったところ

import MeCab
tagger = MeCab.Tagger('-Ochasen')
text = '消化器の病気'

print(tagger.parse(text))

出力

消化  ショウカ    消化  名詞-サ変接続     
器 キ 器 名詞-接尾-一般        
の ノ の 助詞-連体化        
病気  ビョウキ    病気  名詞-サ変接続

あれ? ComeJisyoが適用されていたら「消化 器 の 病気」ではなく,「消化器 の 病気」で分かち書きされるはず...
何かがおかしい.

解決

$ mecab
消化器の病気

消化器の病気
消化器   名詞,一般,*,*,*,*,消化器,ショウカキ,ショウカキ,◆::看栄教:5::42354
の 助詞,連体化,*,*,*,*,の,ノ,ノ
病気  名詞,一般,*,*,*,*,病気,ビョウキ,ビョウキ,◆::看助栄教:5::124578

上記のようにmecabをターミナルから使用するとちゃんとユーザ辞書が反映されていることがわかる.このことからpythonでmecabを使用する時に何か間違えていることに思い当たりました.
調べた結果,下記のようにユーザ辞書を指定することで解決しました!

import MeCab
tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/ipadic -u /usr/local/lib/mecab/dic/userdic/ComeJisyoUtf8-2.dic')
text = '消化器の病気'

print(tagger.parse(text))

出力

消化器   名詞,一般,*,*,*,*,消化器,ショウカキ,ショウカキ,◆::看栄教:5::42354
の 助詞,連体化,*,*,*,*,の,ノ,ノ
病気  名詞,一般,*,*,*,*,病気,ビョウキ,ビョウキ,◆::看助栄教:5::124578
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む