LoginSignup
2
6

More than 5 years have passed since last update.

Docker上のmecabにWikipedia見出し語とはてなキーワード一覧をユーザ辞書として追加

Posted at

ton7i9i/mecab-python3を使ってdocker上でmecabのコンテナーを作りました。
https://hub.docker.com/r/ton7i9i/mecab-python3/

mecabを起動して、形態素解析を行いました。
空の境界」で入力すると:
   空 名詞,一般,,,,,空,ソラ,ソラ
   の 助詞,連体化,,,,,の,ノ,ノ
   境界 名詞,一般,,,,,境界,キョウカイ,キョーカイ
になりました。

Wikipedia見出し語とはてなキーワード一覧をユーザ辞書として追加すれば問題を解決することができます。

まずは最新版のWikipedia見出し語とはてなキーワード一覧を取得します。

はてなキーワードキーワード一覧

$ curl -L http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv | iconv -f euc-jp -t utf-8 > keywordlist_furigana.csv

Wikipedia見出し語

$ curl -L http://dumps.
wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz | gunzip > jawiki-latest-all-titles-in-ns0

mecabにユーザ辞書として追加する場合、指定のフォーマットのCSVファイルを作成する必要がありますので、csvファイルを作ります。

sample.rb
require 'csv'

#Wikipedia見出し語とはてなキーワード一覧のファイルを指定
 original_data = {
 wikipedia: 'jawiki-latest-all-titles-in-ns0', hatena: 'keywordlist_furigana.csv'}

#custom.csvを作成し,上記のファイルを順番に読み込む
CSV.open("custom.csv", 'w') do |csv|
 original_data.each do |type, filename|
  next unless File.file? 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 =~ /一覧/

   # スコアの決定とCSVの作成。ここでは全て名詞となり、最後にwikipediaかhatenaをつけてい
   # また,1文字以下のものは省いている
   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, '*', '*', type]
   end
  end
 end
end

スクリプトを実行すればCSVファイルが作成されます。

$ ruby sample.rb

その前に、

$ pip install ruby

を忘れないてください。

最後に、コンパイルをすれば辞書を作成することができます。

$ /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -u wiki.dic -f utf-8 -t utf-8 custom.csv
  • オプションの意味
    • -d dir: システム辞書があるディレクトリ
    • -u file: fileというユーザファイルを作成
    • -f charset: csvの文字コード
    • -t charset: バイナリ辞書の文字コード


ここで問題を発生しました、多くのサイトを調べるとオプションの意味が書いてますが、システム辞書とユーザ辞書のディレクトリの場所がわからない。

そこで、コマンドラインでシステム辞書のディレクトリを探すために

$ find / -name "mecab-dict-index"

を入力すれば mecab-dict-index のある場所を特定することができます。←最初はディレクトリを探すコマンドが知らなかった (T . T)
同じく

$ find / -name "dicrc"

を入力すればユーザー辞書のディレクトリを特定することができます。

$ mecab -u wiki.dic

を入力し、mecabを起動して「空の境界」を入力すると
   空の境界 名詞,一般,,,,,空の境界,,,wikipedia
になりました。成功!!

おつかれさま。Goodbye

2
6
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
2
6