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 を読み込めるようになったので、早速テスト用の文章を使ってどのように解析されるのか調べます。
とりあえず「それが、運命石の扉の選択か。エル・プサイ・コングルゥ。」という厨二病な文章で試します。
「運命石の扉」や「エル・プサイ・コングルゥ」を分割せず、いい感じに解析されてますね。でも流石に「運命石の扉」を「シュタインズゲート」と読み仮名を振るとは思わなかったです。
ちなみに IPA 辞書の場合は以下のような感じになりました。
「エル・プサイ・コングルゥ」は MeCab によって名詞と推定されたのか、ちゃんと 1 単語として認識されています。これはこれで MeCab 凄いですね。
個人的に mecab-ipadic-neologd を使う最大のメリットとして、固有名詞が大量に追加されているので ASP.NET や C# といった単語でも問題なく処理できる点だと思ってます。
ASP.NET / C# / F# / Visual Basic などの単語を、ちゃんと固有名詞として認識しています。
ちなみに IPA 辞書を使った場合には悲惨な感じになります。
今後も自動的にアップデートされていくらしいので、素の IPA 辞書を使うより mecab-ipadic-neologd を使った方が良い結果が得られるのは間違いなさそうです。