Mecabに辞書登録
前回のmecab環境構築の続きになります。
辞書がデフォルトのままなので、「これは三井住友VISAカードです」を形態素解析をすると下記のようになってしまう。
echo 'これは三井住友VISAカードです。' | mecab --unk-feature "未知語" これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 三井 名詞,固有名詞,組織,*,*,*,三井,ミツイ,ミツイ 住友 名詞,固有名詞,地域,一般,*,*,住友,スミトモ,スミトモ VISA 未知語 カード 名詞,一般,*,*,*,*,カード,カード,カード です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
正しくは「三井住友カード」で一つの名詞として出てきてほしいので、辞書を新しく作る。
辞書として一番いいのは人の手で作られた辞書なので、手っ取り早くwikipediaから頂戴する。
wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz gunzip jawiki-latest-all-titles-in-ns0.gz
wikipediaのデータのままでは、辞書としてうまく機能しないので正しいCSVに整形する。
rubyで変換スクリプトが出回っているので今回はそれを使う。
#wikipedia.rb require 'csv' CSV.open("wikipedia.csv", 'w') do |csv| %w(jawiki-latest-all-titles-in-ns0).each do |filename| open(filename).each do |title| title.strip! next if title =~ %r(^[+-.$()?*/&%!"'_,]+) next if title =~ /^[-.0-9]+$/ next if title =~ /曖昧さ回避/ next if title =~ /_\(/ next if title =~ /^PJ:/ next if title =~ /の登場人物/ next if title =~ /一覧/ title_length = title.length if title_length > 3 score = [-36000.0, -400 * (title_length ** 1.5)].max.to_i csv << [title, nil, nil, score, '名詞', '一般', '*', '*', '*', '*', title, '*', '*'] end end end end
ここで辞書のコンパイルをする
ruby wikipedia.rb /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u wikipedia.dic -f utf-8 -t utf-8 wikipedia.csv reading wikipedia.csv ... 1605477 emitting double-array: 100% |###########################################| done!
正確に形態素解析できるか試す
echo 'これは三井住友VISAカードです。' | mecab --unk-feature "未知語" -u /usr/local/src/mecab-ipadic-2.7.0-20070801/wikipedi.dic これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 三井住友VISAカード 名詞,一般,*,*,*,*,三井住友VISAカード,ミツイスミトモヴィザカード,ヴィザカード です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
このままだと複合語をうまく取り出せません。
もうすこし改善する必要があります。
echo 'ダートマス会議は、人工知能という分野を確立することとなった会議の通称である。' | mecab --unk-feature "未知語" -u /usr/l ocal/src/mecab-ipadic-2.7.0-20070801/card.dic ダート 名詞,一般,*,*,*,*,ダート,ダート,ダート マス 名詞,一般,*,*,*,*,マス,マス,マス 会議 名詞,サ変接続,*,*,*,*,会議,カイギ,カイギ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 、 記号,読点,*,*,*,*,、,、,、 人工 名詞,一般,*,*,*,*,人工,ジンコウ,ジンコー 知能 名詞,一般,*,*,*,*,知能,チノウ,チノー という 助詞,格助詞,連語,*,*,*,という,トイウ,トユウ 分野 名詞,一般,*,*,*,*,分野,ブンヤ,ブンヤ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 確立 名詞,サ変接続,*,*,*,*,確立,カクリツ,カクリツ する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル こと 名詞,非自立,一般,*,*,*,こと,コト,コト と 助詞,格助詞,一般,*,*,*,と,ト,ト なっ 動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 会議 名詞,サ変接続,*,*,*,*,会議,カイギ,カイギ の 助詞,連体化,*,*,*,*,の,ノ,ノ 通称 名詞,一般,*,*,*,*,通称,ツウショウ,ツーショー で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル 。 記号,句点,*,*,*,*,。,。,。 EOS
複合語として出てきてほしいのは「ダートマス会議」「人工知能」
次回はwikipediaのタイトルから複合語を抽出できるようにします。