MeCabはいつも用意された辞書を使うだけだったので今回は作る方にまわってみる
Mecabって何??
MeCabはオープンソースの形態素解析エンジンで、奈良先端科学技術大学院大学出身、現GoogleソフトウェアエンジニアでGoogle 日本語入力開発者の一人である工藤拓によって開発されている。名称は開発者の好物「和布蕪(めかぶ)」から取られた。 ref: https://ja.wikipedia.org/wiki/MeCab
Mecabは作者がめかぶが好きだったからつけたと :open_mouth:
$ mecab 私はメロンが好きです 私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ は 助詞,係助詞,*,*,*,*,は,ハ,ワ メロン 名詞,一般,*,*,*,*,メロン,メロン,メロン が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 好き 名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
こんな感じで入力した文章を品詞に分解してくれる
わかち書きだって出来る
$ mecab -O wakati
私はメロンが好きです
私 は メロン が 好き です
辞書について
MeCab辞書にもとづいて形態素解析を行っているのでその辞書が当然必要となる
辞書にはユーザー辞書とシステム辞書というものがあって
- システム辞書がMecab使用時に必ず1つ使うもので辞書更新が頻繁でない時や解析速度をおとしたくない時に使われる
- ユーザー辞書に関してはMeCab使用時に複数指定することが出来て辞書の更新が頻繁だったりする場合はこちらを使う
MeCab自体で辞書は提供されている http://taku910.github.io/mecab/#download から使用しても良いが僕の観測範囲だと
この辞書を使っている人が多いようです
例えば 広瀬すずは女優です
を形態素解析をしてその差を見る
MeCabで提供されている辞書を使った場合
$ mecab 広瀬すずは女優です 広瀬 名詞,固有名詞,人名,姓,*,*,広瀬,ヒロセ,ヒロセ すず 名詞,固有名詞,人名,名,*,*,すず,スズ,スズ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 女優 名詞,一般,*,*,*,*,女優,ジョユウ,ジョユー です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
次にmecab-ipadic-neologdを使った場合
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd 広瀬すずは女優です 広瀬すず 名詞,固有名詞,人名,一般,*,*,広瀬すず,ヒロセスズ,ヒロセスズ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 女優 名詞,一般,*,*,*,*,女優,ジョユウ,ジョユー です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
今回の例だと広瀬すずという一括りで僕らは認識しているので形態素解析をした時もそのまとまりで出てきてほしいはずです
MeCabで提供されている辞書を使った場合は広瀬すずが広瀬とすずに分かれてしまうので意図した結果にならないですが
mecab-ipadic-neologdを使うと広瀬すずと出してくれました!!
ここまでははmecab-ipadic-neologdすげーって話
ここからが本題
自分で辞書を作成してみる
今回はココナッツケーキを例にする
$ mecab ココナッツケーキ ココナッツ 名詞,一般,*,*,*,*,ココナッツ,ココナッツ,ココナッツ ケーキ 名詞,一般,*,*,*,*,ケーキ,ケーキ,ケーキ EOS $ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd ココナッツケーキ ココナッツ 名詞,一般,*,*,*,*,ココナッツ,ココナッツ,ココナッツ ケーキ 名詞,一般,*,*,*,*,ケーキ,ケーキ,ケーキ EOS
MeCabで提供されている辞書を使ってもmecab-ipadic-neologdの辞書を使ってもココナッツとケーキにわかれてしまう
単語の追加に関しては 公式にも記載されているのでそちらを参考にしつつやっていく
まず下記のフォーマットにのっとってcsvを作成していきます
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
ココナッツケーキ,,,10,名詞,一般,*,*,*,*,ココナッツケーキ,ココナッツケーキ,ココナッツケーキ
※ この時一番最後に改行をいれないように注意してください。改行が入るとコンパイル時にエラーになります
# -d DIR: システム辞書があるディレクトリ # -u FILE: FILE というユーザファイルを作成 # -f charset: CSVの文字コード # -t charset: バイナリ辞書の文字コード $ /usr/local/libexec/mecab/mecab-dict-index \ -d /usr/local/lib/mecab/dic/ipadic \ -u user.dic \ -f utf-8 \ -t utf-8 \ user_dict.csv
コンパイルが終わるとuser.dic
が出来ているはずなので-u
でユーザー辞書を指定してあげればちゃんと意図した結果になるはずです
mecab -u user.dic
ココナッツケーキ
ココナッツケーキ 名詞,一般,*,*,*,*,ココナッツケーキ,ココナッツケーキ,ココナッツケーキ
EOS