MeCabとUniDicの辞書でふりがなを振る方法 2015/07/20
MeCabで形態素解析して日本語のテキストにふりがなを振るには -Oyomi
というオプションを付けます。
$ echo "形態素解析しました" | mecab -Oyomi
ケイタイソカイセキシマシタ
MeCabでは -d
オプションで辞書を切り替えることができて、UniDicの辞書がインストールされていれば、それを使うことができます。しかし、UniDicの辞書でふりがなを振る方法がわかりません。以下のようにエラーになってしまいます。
$ echo "形態素解析しました" | mecab -d /usr/local/lib/mecab/dic/unidic -Oyomi
writer.cpp(63) [!tmp.empty()] unkown format type [yomi]
ちょっとググると以下のように -O '' -F '%f[6]' -U '%m' -E '\n'
と付ければよい、という記事もありましたが、期待したとおりにはなりません。
$ echo "形態素解析しました" | mecab -d /usr/local/lib/mecab/dic/unidic -O '' -F '%f[6]' -U '%m' -E '\n'
ケイタイソカイセキスルマスタ
「スルマスタ」って日本語を勉強し始めたばかりの外国人ですか。
で、UniDicの辞書の中身を見てみたところ、結論としてはふりがなを素直に振ることはできなさそうです。
辞書はCSV形式になっており、左から5つ目の列を -F '%f[0]'
、6つ目の列を -F '%f[1]'
というふうに参照することができ、
-F '%f[6]'
は11列目を参照するという意味です。確かにCSVファイルを見ると11列目にふりがならしきものがあります。ついでに14列目と16列目も同じくふりがなっぽいです。
例えば「辞書」という単語。
辞書,5146,5146,6855,名詞,普通名詞,一般,*,*,*,ジショ,辞書,辞書,ジショ,辞書,ジショ,漢,*,*,*,*
しかし、「形態」という単語を見ると、14列目と16列目はふりがなではなく、発音を表す列だということがわかります。
形態,5146,5146,7203,名詞,普通名詞,一般,*,*,*,ケイタイ,形態,形態,ケータイ,形態,ケータイ,漢,*,*,*,*
したがって -F '%f[6]'
というオプションを使って11列目を参照するようにするとふりがなになるのではないかと期待してしまいますが、実際にはそれだと「しました」が「スルマスタ」になってしまいます。
なぜかというと「し」は「する」の連用形で、辞書を見ると次のようになっています。
し,1853,1853,6783,動詞,非自立可能,*,*,サ行変格,連用形-一般,スル,為る,し,シ,する,スル,和,*,*,*,*
つまり11列目は「し」のふりがなではなく「する」のふりがなになっています。
14列目は「し」の発音になっていますので、-F '%f[9]'
を使えばとりあえずは発音を得ることはできます。
$ echo "形態素解析しました" | mecab -d /usr/local/lib/mecab/dic/unidic -O '' -F '%f[9]' -U '%m' -E '\n'
ケータイソカイセキシマシタ
ふりがなを得たいのであれば、MeCabデフォルトのipadicを使うのがよさそうです。