読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

NMeCab でも mecab-ipadic-neologd を使ってみた

C#

Twitter で新しい MeCab 用の辞書が公開されたことを知ったので、例によって NMeCab で試してみました。

[O] MeCab 用の新語辞書 mecab-ipadic-neologd を公開しました

MeCab に付いている IPA 辞書はかなり更新されていないので新語に弱いですが、今回公開された新しい辞書は Wikipedia やはてなキーワードなどから新語を収録しているらしいです。これは素晴らしいですね。

この mecab-ipadic-neologd は Linux か OS X 上でビルドする必要があるみたいなので、適当に立ち上げてあった Ubuntu の仮想マシン上にインストールして、バイナリ辞書を Windows にコピーしてくることにします。

公開された辞書はインストール時に IPA 辞書をベースにしてコンパイルしてくれるみたいです。ちなみに辞書のサイズはコンパイル後で 390MB ほどありました。かなりの語集のようです。

インストールの手順は README に書いてある通りなので、特に紹介などしません。

mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd · GitHub

とりあえず、そのまま NMeCab に辞書を食わせてみたところ、文字コード名が UTF8 と埋め込まれているらしく Encoding.GetEncoding でエラーになりました。仕方ないので、UniDic を使ったときのように NMeCab 側を弄って対応することにしました。

もうちょっと良い方法はあると思うんですが、とりあえず動かしてみたいので ToLower だけしておきます。

// UTF8 みたいな大文字のパターンも来るらしいので ToLower しておく
string charSet = StrUtils.GetString(reader.ReadBytes(32), Encoding.ASCII).ToLower();

// utf8 だと GetEncoding が例外を投げるので utf-8 にする
this.encoding = Encoding.GetEncoding(charSet == "utf8" ? "utf-8" : charSet);

この修正で NMeCab でも mecab-ipadic-neologd を読み込めるようになったので、早速テスト用の文章を使ってどのように解析されるのか調べます。

とりあえず「それが、運命石の扉の選択か。エル・プサイ・コングルゥ。」という厨二病な文章で試します。

f:id:shiba-yan:20150315013448p:plain

「運命石の扉」や「エル・プサイ・コングルゥ」を分割せず、いい感じに解析されてますね。でも流石に「運命石の扉」を「シュタインズゲート」と読み仮名を振るとは思わなかったです。

ちなみに IPA 辞書の場合は以下のような感じになりました。

f:id:shiba-yan:20150315013537p:plain

「エル・プサイ・コングルゥ」は MeCab によって名詞と推定されたのか、ちゃんと 1 単語として認識されています。これはこれで MeCab 凄いですね。

個人的に mecab-ipadic-neologd を使う最大のメリットとして、固有名詞が大量に追加されているので ASP.NET や C# といった単語でも問題なく処理できる点だと思ってます。

f:id:shiba-yan:20150315015058p:plain

ASP.NET / C# / F# / Visual Basic などの単語を、ちゃんと固有名詞として認識しています。

ちなみに IPA 辞書を使った場合には悲惨な感じになります。

f:id:shiba-yan:20150315015139p:plain

今後も自動的にアップデートされていくらしいので、素の IPA 辞書を使うより mecab-ipadic-neologd を使った方が良い結果が得られるのは間違いなさそうです。