そこで、ここではUniDicの最新版(2023-03-24)をダウンロードして形態素解析を行う方法と、そのユーザー辞書を作成して形態素解析を行う方法をお伝えします。
目次
環境
今回の作業は、Windowsのwslで、python 3.13のdocker上で行っています。
UniDicのダウンロードと配置
まず最初に、UniDicの最新版を「UniDic」国語研短単位自動解析用辞書よりダウンロードしておきます。
UniDicには現代書き言葉や現代話し言葉、解析用の軽量版や辞書再学習用のフルパッケージ版などいくつもの種類があります。
ここでは、ユーザー辞書を作成するので、現代書き言葉の最新フルパッケージ版のunidic-cwj-202302_full.zipをダウンロードし、使用することにします。
ダウンロード後、適当なディレクトリを作成し、zipファイルを展開しておきます。今回は、unidic-cwj-202302_fullディレクトリに展開しました。
ls -lh
total 7.6G
-rw-r--r-- 1 1000 1000 766 Mar 14 2023 README_unidic-cwj_full.txt
-rw-r--r-- 1 1000 1000 257K Feb 21 2023 char.bin
-rw-r--r-- 1 1000 1000 4.3K Feb 21 2023 char.def
-rw-r--r-- 1 1000 1000 695 Feb 21 2023 dicrc
-rw-r--r-- 1 1000 1000 8.6K Feb 21 2023 feature.def
-rw-r--r-- 1 1000 1000 1.6M Feb 21 2023 left-id.def
-rw-r--r-- 1 1000 1000 224M Feb 21 2023 lex.csv
drwxr-xr-x 2 1000 1000 4.0K Jul 9 14:57 license
-rw-r--r-- 1 1000 1000 763M Feb 21 2023 matrix.bin
-rw-r--r-- 1 1000 1000 5.9G Feb 21 2023 matrix.def
-rw-r--r-- 1 1000 1000 79M Feb 21 2023 model.bin
-rw-r--r-- 1 1000 1000 364M Feb 21 2023 model.def
-rw-r--r-- 1 1000 1000 4.8K Feb 21 2023 rewrite.def
-rw-r--r-- 1 1000 1000 1.8M Feb 21 2023 right-id.def
-rw-r--r-- 1 1000 1000 232M Feb 21 2023 sys.dic
-rw-r--r-- 1 1000 1000 2.4K Feb 21 2023 unk.def
-rw-r--r-- 1 1000 1000 5.7K Feb 21 2023 unk.dic
動作確認
ダウンロードしたUniDicを使用して、fugashiの動作確認をします。
from fugashi import GenericTagger
tagger = GenericTagger('-d unidic-cwj-202302_full -r unidic-cwj-202302_full/dicrc')
text = '麩菓子は、麩を主原料とした日本の伝統的な駄菓子です。'
print(tagger.parse(text))
麩 名詞,普通名詞,一般,*,*,*,フ,麩,麩,ブ,麩,ブ,漢,フ濁,濁音形,*,*,*,*,体,ブ,ブ,ブ,フ,0,C3,*,17839859662209536,64901
菓子 名詞,普通名詞,一般,*,*,*,カシ,菓子,菓子,カシ,菓子,カシ,漢,カ濁,基本形,*,*,*,*,体,カシ,カシ,カシ,カシ,1,C1,*,1758677472256512,6398
は 助詞,係助詞,*,*,*,*,ハ,は,は,ワ,は,ワ,和,*,*,*,*,*,*,係助,ハ,ハ,ハ,ハ,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,8059703733133824,29321
、 補助記号,読点,*,*,*,*,*,、,、,*,、,*,記号,*,*,*,*,*,*,補助,*,*,*,*,*,*,*,6605693395456,24
麩 名詞,普通名詞,一般,*,*,*,フスマ,麩,麩,フスマ,麩,フスマ,和,*,*,*,*,*,*,体,フスマ,フスマ,フスマ,フスマ,"0,3",C2,*,18052890040082944,65676
を 助詞,格助詞,*,*,*,*,ヲ,を,を,オ,を,オ,和,*,*,*,*,*,*,格助,ヲ,ヲ,ヲ,ヲ,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,11381878116459008,41407
主 名詞,普通名詞,一般,*,*,*,シュ,主,主,シュ,主,シュ,漢,*,*,*,*,*,*,体,シュ,シュ,シュ,シュ,1,C3,*,4403827570778624,16021
原料 名詞,普通名詞,一般,*,*,*,ゲンリョウ,原料,原料,ゲンリョー,原料,ゲンリョー,漢,*,*,*,*,*,*,体,ゲンリョウ,ゲンリョウ,ゲンリョウ,ゲンリョウ,3,C2,*,3235046710452736,11769
と 助詞,格助詞,*,*,*,*,ト,と,と,ト,と,ト,和,*,*,*,*,*,*,格助,ト,ト,ト,ト,*,"名詞%F1,動詞%F1,形容詞%F2@-1",*,7099014038299136,25826
し 動詞,非自立可能,*,*,サ行変格,連用形-一般,スル,為る,し,シ,する,スル,和,*,*,*,*,*,*,用,シ,スル,シ,スル,0,C5,*,5370298291593857,19537
た 助動詞,*,*,*,助動詞-タ,連体形-一般,タ,た,た,タ,た,タ,和,*,*,*,*,*,*,助動,タ,タ,タ,タ,*,"動詞%F2@1,形容詞%F4@-2",*,5948916285711041,21642
日本 名詞,固有名詞,地名,国,*,*,ニッポン,日本,日本,ニッポン,日本,ニッポン,固,*,*,*,*,*,*,国,ニッポン,ニッポン,ニッポン,ニッポン,3,*,*,7821659499274752,28455
の 助詞,格助詞,*,*,*,*,ノ,の,の,ノ,の,ノ,和,*,*,*,*,*,*,格助,ノ,ノ,ノ,ノ,*,名詞%F1,*,7968444268028416,28989
伝統 名詞,普通名詞,一般,*,*,*,デントウ,伝統,伝統,デントー,伝統,デントー,漢,*,*,*,*,*,*,体,デントウ,デントウ,デントウ,デントウ,0,C2,*,7089659599528448,25792
的 接尾辞,形状詞的,*,*,*,*,テキ,的,的,テキ,的,テキ,漢,*,*,*,*,*,*,接尾相,テキ,テキ,テキ,テキ,*,C4,*,6892847018156544,25076
な 助動詞,*,*,*,助動詞-ダ,連体形-一般,ダ,だ,な,ナ,だ,ダ,和,*,*,*,*,*,*,助動,ナ,ダ,ナ,ダ,*,名詞%F1,*,6299110739157697,22916
駄 接頭辞,*,*,*,*,*,ダ,駄,駄,ダ,駄,ダ,漢,*,*,*,*,*,*,接頭,ダ,ダ,ダ,ダ,*,P2,*,6301034884506112,22923
菓子 名詞,普通名詞,一般,*,*,*,カシ,菓子,菓子,カシ,菓子,カシ,漢,カ濁,基本形,*,*,*,*,体,カシ,カシ,カシ,カシ,1,C1,*,1758677472256512,6398
です 助動詞,*,*,*,助動詞-デス,終止形-一般,デス,です,です,デス,です,デス,和,*,*,*,*,*,*,助動,デス,デス,デス,デス,*,"形容詞%F2@-1,動詞%F2@0,名詞%F2@1",*,7051468750332587,25653
。 補助記号,句点,*,*,*,*,*,。,。,*,。,*,記号,*,*,*,*,*,*,補助,*,*,*,*,*,*,*,6880571302400,25
EOS
UniDicのユーザー辞書を作成
fugashiは形態素解析器MeCabのCythonラッパーなので、UniDicのユーザー辞書の作成は実際にはMeCabで行うことになり、左文脈IDや右文脈ID、コストの値があらかじめ必要になります。しかし、これらの値を求めるのは大変なので、ここではMeCabのコストの自動推定機能を使うことにします。ただ、このコストの自動推定もひと手間加えないと上手くいきません。
matrix.defの退避
matrix.defのコピーをmatrix.def.copyとしてとっておきます。
matrix.defの書き換え
matrix.defの1行目に記載されている値を確認します。
head -n 1 matrix.def
21202 18859
この2つの値が逆順になっているようなので、手動で書き換えます。
sed -i -e "1c18859 21202" matrix.def
エントリのCSV
エントリのCSVを準備します。ここでは、「麩菓子」で一つの単位として扱われるようにします。user_unidic.csvとして保存しておきます。
麩菓子,,,,名詞,普通名詞,一般,*,*,*,フガシ,麩菓子,麩菓子,フガシ,麩菓子,フガシ,漢,*,*,*,*,*,*,体,フガシ,フガシ,フガシ,フガシ,*,*,*,*,*
コストの自動推定
先ほど作成したuser_unidic.csvを元にコストの自動推定を行います。コストの自動推定後のCSVをuser_unidic_completion.csvとして出力することにします。
fugashi-build-dict -m unidic-cwj-202302_full/model.bin -d unidic-cwj-202302_full -u user_unidic_completion.csv -a user_unidic.csv
コストの自動推定後のCSVは次のようになりました。
麩菓子,16563,17911,9916,名詞,普通名詞,一般,*,*,*,フガシ,麩菓子,麩菓子,フガシ,麩菓子,フガシ,漢,*,*,*,*,*,*,体,フガシ,フガシ,フガシ,フガシ,*,*,*,*,*
退避したmatrix.defを元に戻す
退避しておいたmatrix.def.copyをmatrix.defに戻します。
ユーザー辞書の作成
先ほど作成したuser_unidic_completion.csvを使って、ユーザー辞書user_unidic.dicを作成するには次のようにします。
fugashi-build-dict -d unidic-cwj-202302_full -u user_unidic.dic user_unidic_completion.csv
/usr/local/bin/fugashi-build-dict -f utf8 -t utf8 -d unidic-cwj-202302_full -u user_unidic.dic user_unidic_completion.csv
unidic-cwj-202302_full/pos-id.def is not found. minimum setting is used
reading user_unidic_completion.csv ... 1
emitting double-array: 100% |###########################################|
done!
ユーザー辞書を使って形態素解析する
作成したユーザー辞書user_unidic.dicを使って形態素解析するには次のようにします。
from fugashi import GenericTagger
tagger = GenericTagger('-d unidic-cwj-202302_full -r unidic-cwj-202302_full/dicrc -u user_unidic.dic')
text = '麩菓子は、麩を主原料とした日本の伝統的な駄菓子です。'
print(tagger.parse(text))
麩菓子 名詞,普通名詞,一般,*,*,*,フガシ,麩菓子,麩菓子,フガシ,麩菓子,フガシ,漢,*,*,*,*,*,*,体,フガシ,フガシ,フガシ,フガシ,*,*,*,*,*
は 助詞,係助詞,*,*,*,*,ハ,は,は,ワ,は,ワ,和,*,*,*,*,*,*,係助,ハ,ハ,ハ,ハ,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,8059703733133824,29321
、 補助記号,読点,*,*,*,*,*,、,、,*,、,*,記号,*,*,*,*,*,*,補助,*,*,*,*,*,*,*,6605693395456,24
麩 名詞,普通名詞,一般,*,*,*,フスマ,麩,麩,フスマ,麩,フスマ,和,*,*,*,*,*,*,体,フスマ,フスマ,フスマ,フスマ,"0,3",C2,*,18052890040082944,65676
を 助詞,格助詞,*,*,*,*,ヲ,を,を,オ,を,オ,和,*,*,*,*,*,*,格助,ヲ,ヲ,ヲ,ヲ,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,11381878116459008,41407
主 名詞,普通名詞,一般,*,*,*,シュ,主,主,シュ,主,シュ,漢,*,*,*,*,*,*,体,シュ,シュ,シュ,シュ,1,C3,*,4403827570778624,16021
原料 名詞,普通名詞,一般,*,*,*,ゲンリョウ,原料,原料,ゲンリョー,原料,ゲンリョー,漢,*,*,*,*,*,*,体,ゲンリョウ,ゲンリョウ,ゲンリョウ,ゲンリョウ,3,C2,*,3235046710452736,11769
と 助詞,格助詞,*,*,*,*,ト,と,と,ト,と,ト,和,*,*,*,*,*,*,格助,ト,ト,ト,ト,*,"名詞%F1,動詞%F1,形容詞%F2@-1",*,7099014038299136,25826
し 動詞,非自立可能,*,*,サ行変格,連用形-一般,スル,為る,し,シ,する,スル,和,*,*,*,*,*,*,用,シ,スル,シ,スル,0,C5,*,5370298291593857,19537
た 助動詞,*,*,*,助動詞-タ,連体形-一般,タ,た,た,タ,た,タ,和,*,*,*,*,*,*,助動,タ,タ,タ,タ,*,"動詞%F2@1,形容詞%F4@-2",*,5948916285711041,21642
日本 名詞,固有名詞,地名,国,*,*,ニッポン,日本,日本,ニッポン,日本,ニッポン,固,*,*,*,*,*,*,国,ニッポン,ニッポン,ニッポン,ニッポン,3,*,*,7821659499274752,28455
の 助詞,格助詞,*,*,*,*,ノ,の,の,ノ,の,ノ,和,*,*,*,*,*,*,格助,ノ,ノ,ノ,ノ,*,名詞%F1,*,7968444268028416,28989
伝統 名詞,普通名詞,一般,*,*,*,デントウ,伝統,伝統,デントー,伝統,デントー,漢,*,*,*,*,*,*,体,デントウ,デントウ,デントウ,デントウ,0,C2,*,7089659599528448,25792
的 接尾辞,形状詞的,*,*,*,*,テキ,的,的,テキ,的,テキ,漢,*,*,*,*,*,*,接尾相,テキ,テキ,テキ,テキ,*,C4,*,6892847018156544,25076
な 助動詞,*,*,*,助動詞-ダ,連体形-一般,ダ,だ,な,ナ,だ,ダ,和,*,*,*,*,*,*,助動,ナ,ダ,ナ,ダ,*,名詞%F1,*,6299110739157697,22916
駄 接頭辞,*,*,*,*,*,ダ,駄,駄,ダ,駄,ダ,漢,*,*,*,*,*,*,接頭,ダ,ダ,ダ,ダ,*,P2,*,6301034884506112,22923
菓子 名詞,普通名詞,一般,*,*,*,カシ,菓子,菓子,カシ,菓子,カシ,漢,カ濁,基本形,*,*,*,*,体,カシ,カシ,カシ,カシ,1,C1,*,1758677472256512,6398
です 助動詞,*,*,*,助動詞-デス,終止形-一般,デス,です,です,デス,です,デス,和,*,*,*,*,*,*,助動,デス,デス,デス,デス,*,"形容詞%F2@-1,動詞%F2@0,名詞%F2@1",*,7051468750332587,25653
。 補助記号,句点,*,*,*,*,*,。,。,*,。,*,記号,*,*,*,*,*,*,補助,*,*,*,*,*,*,*,6880571302400,25
EOS
「麩菓子」で一つの単位として扱われるようになりました。