LoginSignup
33
36

More than 5 years have passed since last update.

Mecabにニコニコ大百科 はてなキーワード Wikipediaの名詞辞書を追加して強化する

Posted at

Mecab様で高速気軽に形態素解析ができます。導入も楽ですし、各種プログラムから呼び出すのも簡単です。基本はIPA辞書を使うと思いますが、御存知の通りネットスラングには対応していなかったり、固有名詞には弱かったりします。なので、今回はニコニコ大百科 はてなキーワード Wikipediaからデータを引っ張ってきて辞書を強化してあげます。

各種データの用意

Wikipedia

$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
$ gunzip jawiki-latest-all-titles-in-ns0.gz

はてなキーワード

$ wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
$ nkf -w --overwrite keywordlist_furigana.csv

ニコニコ大百科

こちらから「ニコニコ大百科データ」をダウンロードします。head.zipの方です。

$ unzip head.zip

変換スクリプト

convert.rb
require 'csv'

def output(title, type)
  title_length = title.length
  return nil unless title_length > 3

  score = [-36000.0, -400 * (title_length ** 1.5)].max.to_i
  [title, nil, nil, score, '名詞', '一般', '*', '*', '*', '*', title, '*', '*', type]
end

CSV.open("user.csv", 'w') do |csv|
  # niconico
  Dir::foreach('./niconico') do |f|
    next unless f =~ /^head[0-9]{4}\.csv$/
    open("./niconico/#{f}").each do |line|
      title = line.split(',')[1].gsub('"','')
      out = output(title, 'niconico')
      csv << out unless out.nil?
    end
  end

  # hatena
  open('keywordlist_furigana.csv').each do |line|
   title = line.split("\t")[1].strip

   out = output(title, 'hatena')
   csv << out unless out.nil?
  end

  # Wikipedia
  open('jawiki-latest-all-titles-in-ns0').each do |line|
    title = line.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.gsub!('_', ' ')

    out = output(title, 'wikipedia')
    csv << out unless out.nil?
  end
end

このRubyスクリプトでCSVに変換してあげます。そして、mecab-dict-indexを使ってdicファイルに変換すれば終了です。

$ ruby convert.ruby
$ mv user.csv /usr/local/lib/mecab/dic/ipadic
$ cd /usr/local/lib/mecab/dic/ipadic
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u user.dic -f utf-8 -t utf-8 user.csv

ユーザ辞書を使う

$ mecab -u user.dic
おにくだいすき!ゼウシくん
おにくだいすき!ゼウシくん   名詞,一般,*,*,*,*,おにくだいすき!ゼウシくん,*,*,niconico
EOS

ちゃんとゼウシくんが認識されましたね。ただ、記号などが含まれるゲームとかアニメとかの固有名詞の一致は結構難しいですね。ここらへんの表記ゆれに対応するには、どうするのがいいんだろうか。

33
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36