手抜き固有表現抽出の試行

そのうち、ついったーの人工無能を作ろうと思っているので今回はその前段階。


ついったーのログを解析しようとすると、固有表現*1の扱いが結構面倒なことになりそうだなぁと思ったので、その扱いについて少し工夫出来ないか?と考えた。


固有表現抽出に関しては一般的には単語の前後のつながりなどを学習とかして統計的に処理・抽出するのが一般的なのかなぁと思う訳ですが、そもそも適当にbot作りたいだけなのにそんな小難しいことをやりたくない!


そこで「Wikipediaの見出し語を辞書として使えば、とりあえず普通の辞書に載ってないような固有名詞が沢山使えるようになるんじゃないの?」と思ってとりあえずやってみた。*2
というのが今回のお話。

Wikipediaのデータの準備

まず下準備としてWikipediaのページ名一覧を取ってくる必要がある訳ですが、これは実はWikipedia側で用意してくれているので大変便利ですね。

Wikipedia:データベースダウンロード

ここからリンクを辿っていく事でWikipedia上の様々なデータがダウンロードできる。神。今回は手抜きで見出し語一覧のみを使用するのでall-titles-in-ns0.gzをダウンロードする。

辞書形式へ変換

次に取得してきたページ名一覧をMeCab用辞書に変換する。MeCabの辞書の作成法はMeCab:単語の追加方法に詳しく書かれているのでこの通りに行うことにする。あ、MeCabのインストール先とか環境によって違うと思うので適当に調整して下さい。

  1. all-titles-in-ns0.gzを解凍してall-titles-in-ns0を取り出す
  2. sed -e 's/"/""/g';s/^/"/;s/$/"/' all-titles-in-ns0 > all-titles-escaped.txt などとしてカンマなどをエスケープする
  3. sed -e 's/$/,-1,-1,5,名詞,固有名詞,一般,*,*,*,*,*,*,*/' all-titles-escaped.txt > all-titles.csv で辞書変換用csvファイルを作成する*3 *4
  4. /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u all-titles.dic -f utf8 -t utf8 all-titles.csv として辞書ファイルを作成する
  5. ~/.mecabrcにuserdic = /home/foo/bar/all-titles.dic などと追加する

以上でお手軽手抜き辞書の完成!

試用

試しに「となりのトトロを観た」という文章を解析してみると、

となりのトトロ	名詞,固有名詞,一般,*,*,*,*,*,*
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
観	動詞,自立,*,*,一段,連用形,観る,ミ,ミ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

という解析結果が得られ、『となりのトトロ』という作品名をきちんと取れるようになる。
ただ、このまま使うと逆に解析に失敗するケースもいくつかあるみたいなのでもう少し改善が必要っぽい。


という訳で、以上、手抜き固有表現抽出の試行に見せかけたMeCab辞書の作成法に関するお話でした。
辞書を追加するだけだと表記揺れとかに全然対応できませんね。

*1:というか固有名詞、固有表現って言った方がかっこいいかなと思って適当に言ってみました。ごめんなさいごめんなさい><

*2:そもそも商用辞書とか使えればこんなの全然必要なさそうな感じなんじゃないの?とも思った

*3:今回は見出し語を仮に一般固有名詞としてみた。実際には違うものも多々あるのでより正確な辞書を作るためには見出しページ内のコンテンツを解析する必要があると思われる。幸い構造化されたデータベースも配布されてる事だし誰かやっt(ry

*4:今回は単語のコストを適当に5としてみた。根拠はない。その見出しページのコンテンツをコーパスとしてパラメータ推定とかやればより最適なコストを設定できるんじゃないかと思った