Help us understand the problem. What is going on with this article?

neologd辞書をjuman/juman++で使えるようにするスクリプト作った

More than 1 year has passed since last update.

本スクリプトは、Insight Tech公開のリポジトリから入手可能です。

※ 長く気がついていませんでしたが、辞書生成途中でエラーが起きていて、多くのエントリが変換されないままになっていました。最新の版では修正済みです。

この記事で紹介すること

  • neologd辞書の有効性
  • neologd辞書をJUMAN/JUMAN++で利用できるようにするためのスクリプト紹介

neologd辞書とは?

正式にはmecab-ipadic-neologdという名称で、mecabの追加辞書として設計されています。

形態素解析器をweb上のテキストに適用するには、標準の辞書では対応できないケースが多々ありました。特にドラマの名前、スラング的な語(オマエモナーなど)などが顕著です。

例えば、昨年の年末に話題になった逃げるは恥だが役に立つは標準のipadicでは1語と認識できません。

標準ipadic

% echo "逃げ恥は毎週みている" | mecab
逃げ  名詞,一般,*,*,*,*,逃げ,ニゲ,ニゲ
恥 名詞,一般,*,*,*,*,恥,ハジ,ハジ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
毎週  名詞,副詞可能,*,*,*,*,毎週,マイシュウ,マイシュー
み 動詞,自立,*,*,一段,連用形,みる,ミ,ミ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる  動詞,非自立,*,*,一段,基本形,いる,イル,イル
EOS

neologd

% echo "逃げ恥は毎週みている" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd 
逃げ恥   名詞,固有名詞,一般,*,*,*,逃げ恥,ニゲハジ,ニゲハジ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
毎週  名詞,副詞可能,*,*,*,*,毎週,マイシュウ,マイシュー
み 動詞,自立,*,*,一段,連用形,みる,ミ,ミ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる  動詞,非自立,*,*,一段,基本形,いる,イル,イル
EOS

neologdはこのように、次々と世の中に出現する新語に次々と対応していこう!という非常に精力的なプロジェクトです。
neologdのプロジェクトページによると、週に2回の更新が実施されているとのことです。(2017/2/24現在)

Juman/Juman++とは?

Juman/Juman++は京都大学の黒橋・河原研究室で開発されている形態素解析器です。

Jumanはmecabよりも単語の意味分類を細かく実施してくれる点で、大きく異なります。

% echo "逃げ恥は毎週みている" | juman  
逃げ にげ 逃げる 動詞 2 * 0 母音動詞 1 基本連用形 8 "代表表記:逃げる/にげる 自他動詞:他:逃がす/にがす"
恥 はじ 恥 名詞 6 普通名詞 1 * 0 * 0 "代表表記:恥/はじ 漢字読み:訓 カテゴリ:抽象物"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS

毎週 の行にカテゴリ:時間という表示があるのが見れます。
このように、単語の意味分類を実施しているため、カテゴリを利用した集計も可能です。

一方、Juman++はJumanの後継として2016年に登場した形態素解析器です。
形態素解析時にRNNを利用しており、「単語の意味的な類似度」を考慮しながら、単語区切りが可能です。

また、Juman++はJumanと同じフォーマットなので、Jumanで可能だったことをそのまま置き換えることができます。

特にKNPとの組み合わせでは、大きな威力を発揮します。
Juman/KNP という組み合わせを Juman++/KNP という組み合わせに置き換えることができます。

neolod2juman

さて、本記事のメイントピックです。

Juman/Juman++ユーザーとしては、毎週のように更新されるneologd言語資源は喉から手が出るほど欲しいものです。

そこで、それを実現してくれるスクリプトを作りました。それがneologd2jumanです。

neologdのエントリをJuman辞書形式に変換してくれます。

ただし、neologdのすべてのエントリを変換するわけではなく、 名詞/固有名詞 のみです。

neologdとJuman辞書の品詞体系は別の体系を利用しており、1対1の変換関係を構築するのは困難です。固有名詞のみは共通しているだろう。と考え、このようなアプローチにしています。

また、辞書の見出し語が40文字以上の場合はjuman用の辞書に追加されません。
辞書生成コマンドがエラーを出してしまうからです・・

スクリプトの実行とインストール

Ubuntu14.04とMac El Capitanで動作確認をしています。

必要なもの

  • Juman
  • Juman++ (Juman++用に辞書を使いたい場合のみ)
  • makeコマンド
  • python3

手順

手順を紹介します。
Juman用に辞書を用意するには、以下の手順でOKです。

  1. git clone git@github.com:fumankaitori/neologd2juman.git
  2. make

コマンドが無事に全実行されると、

New juman dictionary is at /usr/local/share/juman/juman-neologd-dic
New jumanrc file is at /usr/local/share/juman/jumanrc

という表示があります。
jumanコマンドを呼ぶときに、 -r [jumanrcのパス] をつけると、neologd辞書が適応されます。

echo "逃げ恥は毎週みている" | juman -r /usr/local/share/juman/jumanrc
逃げ恥 にげはじ 逃げ恥 名詞 6 固有名詞 3 * 0 * 0 "代表表記:逃げ恥/にげはじ"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS

いいですね!一語で獲得することができました。
形態素解析器では、品詞間の連続コストを考慮しているので、「辞書に存在する=必ず獲得できる」わけではないようです。

参考までにgithubのリポジトリでは、うまく獲得できた例を掲載しています。

Juman++で使う

手作業が必要になります。
Juman++をダウンロードすると、 dict-build というディレクトリがあります。
このディレクトリ下のディレクトリ userdicneologd-user-dict.dic を配置します。
(neologd-user-dict.dic はneologd2jumanのmake過程で生成されます)

その後に、dict-buildmakeinstall.sh を実行します。

% cd dict-build
% cp [PATH-TO-YOUR neologd-user-dict.dic FILE] userdic/neologd-user-dict.dic
% make
% [sudo] ./install.sh

Jumanの時と違い、特別なコマンドは不要です。

% echo "逃げ恥は毎週みている" | jumanpp                                 
逃げ恥 にげはじ 逃げ恥 名詞 6 固有名詞 3 * 0 * 0 "代表表記:逃げ恥/にげはじ"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS

逃げ恥 はneologd辞書追加前は1語ではなかったので、今度は成功しました。

参考までに、neologd辞書適応前は下のようになります。

逃げ にげ 逃げ 名詞 6 普通名詞 1 * 0 * 0 "代表表記:逃げ/にげv 自他動詞:他:逃がす/にがす 連用形名詞化:形態素解析"
恥 はじ 恥 名詞 6 普通名詞 1 * 0 * 0 "代表表記:恥/はじ 漢字読み:訓 カテゴリ:抽象物 漢字"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間 漢字"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS

まとめ

  • neologd辞書をjuman/juman++利用できるようにした
  • 新語にうまく対応できている様子
  • ぜひご利用ください〜

最後に、このスクリプトはInsight Techから公開されています。Insight Techでは、不満買取センターユーザーの声を元にした調査事業をしています。
マーケティング調査のご用命をお待ちしております。

Ultra-grand-child
ぼくは「自然言語処理えんじにあ」のつもりなんですが、 いつのまにか「でーたさいえんてぃすと」と名付けられ、 最近では「えーあいじんざい」と呼ばれています。
https://kensuke-mitsuzawa.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away