yotiky Tech Blog

とあるエンジニアの備忘録

MeCab.DotNet にユーザー辞書を追加する

目次

インストール

本家 MeCab より Windows 用のバイナリパッケージをダウンロードします。

f:id:yotiky:20210126163108p:plain:w350

ダウンロードしたインストーラーを実行します。 今回は辞書の文字コードは「SHIFT-JIS」を選択。

f:id:yotiky:20210126163445p:plain:w350

辞書の作成

以下の形式の csv でデータを作成します。末尾に追加エントリもできるようです。

表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音

引用元


作成例1)

山田太郎,,,10,名詞,一般,,,,,やまだたろう,ヤマダタロウ,ヤマダタロウ,独自辞書

f:id:yotiky:20210126175451p:plain


作成例2)

山田花子,,,10,名詞,一般,,,,,やまだはなこ,ヤマダハナコ,ヤマダハナコ,独自辞書



管理者権限でコマンドを開いて mecab-dict-index を実行します。

cd C:\Program Files (x86)\MeCab
bin\mecab-dict-index -d "dic\ipadic" -u "dic\userdic\userdic1.dic" -f shift-jis -t utf-8 "dic\userdic\userdic1.csv"
bin\mecab-dict-index -d "dic\ipadic" -u "dic\userdic\userdic2.dic" -f shift-jis -t utf-8 "dic\userdic\userdic2.csv"

オプションは以下の通り。

mecab-dict-index [options] files
-d : システム辞書のディレクトリ
-u : ユーザー辞書の保存先
-f : CSVファイルの文字コード
-t : ユーザー辞書の文字コード

実装

前回のアプリを元に修正します。

yotiky.hatenablog.com


前項で作成した辞書をシステム辞書と同じ実行ディレクトリの dic フォルダに配置します。(bin\Debug\netcoreapp3.1\dic など)

MeCabTagger を作成する際に、ユーザー辞書を設定したパラメータを引数に指定します。

    var param = new MeCabParam();
    param.DicDir = @"dic";
    param.UserDic = new[] { "userdic1.dic", "userdic2.dic" };
    var tagger = MeCabTagger.Create(param);


ユーザー辞書を追加しなかった場合、「山田太郎」が「山田」と「太郎」で分解されます。 f:id:yotiky:20210126185034p:plain


ユーザー辞書を追加した場合、「山田太郎」が名詞として1つになっています。また、末尾に追加した「独自辞書」のエントリも問題なく動いてます。 f:id:yotiky:20210126184930p:plain

参考

辞書を作成できるサンプルアプリを公開してる方もいらっしゃいました。

resanaplaza.com

関連記事