macOS Sierra にMecabをインストールし、Wikipediaとはてなの単語を辞書に追加する

今更ながら、MacBook Air (13-inch, Early 2014)をSierraにアップデートしたので、MeCabを再インストールした。
のだが、単にインストールしてもあれなので、Wikipediaはてなの単語をシステム辞書に追加してみた。

結論から言うと、よくわからない事態に陥り、最終的にはシステム辞書+ユーザー辞書と言う一般的な構成になった。(おい笑)

MeCabをインストール

プライベート用Macが2台あるのだが、そのうち1台はMeCabを入れていなかったので、こちらを参考にターミナルよりMeCabをインストール

$ cd ~/Download
$ git clone https://github.com/taku910/mecab.git
$ cd mecab/mecab
$ ./configure  --enable-utf8-only
$ make
$ make check
$ sudo make install


IPA辞書をインストール

こちらもMeCab同様にターミナルよりインストール

$ cd ../mecab-ipadic
$ ./configure --with-charset=utf8
$ make
$ sudo make install

これで、MeCabが使えるようになったはず。
試しに、ターミナルでMeCabを使ってみる。

$ mecab
今日はスターバックスに来ました。
今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
スター	名詞,一般,*,*,*,*,スター,スター,スター
バックス	名詞,一般,*,*,*,*,バックス,バックス,バックス
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
来	動詞,自立,*,*,カ変・来ル,連用形,来る,キ,キ
まし	助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

一応動いている様子。スターバックスが「スター」と「バックス」に分かれていることが確認できる。

Wikipeiaとはてなの単語をユーザー辞書に追加

MeCabの辞書はシステム辞書とユーザー辞書の2パターンがあり、本当はシステム辞書に追加したかったのだが、色々やっているうちに気づけばmecabが使えない状態になってしまったり、何度かチャレンジしたのだが数時間経っていたため、諦めてユーザー辞書として追加した。

辞書のキーワードリストを取得

まず、こちらを参考に、Wikipediaはてなのキーワードリストを取得

$ cd ~/Download
$ # 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
CSV変換用スクリプトを作成

続いて、取得したキーワードリストからcsv変換を行った。

# makedic.rb で保存

require 'csv'

CSV.open("wiki_hatena.csv", 'w') do |csv|
  %w(jawiki-latest-all-titles-in-ns0 keywordlist_furigana.csv).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
辞書をコンパイル

上で作成したmakedic.rbでdicファイルを作成し、mecab辞書にコンパイル

$ ruby makedic.rb
$ # 色々やった結果、mecab-dict-indexが変なところに入っちゃったので、参考サイトとはpathが異なる
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u wiki_hatena.dic -f utf-8 -t utf-8 wiki_hatena.csv
reading wiki_hatena.csv ... 1332723
emitting double-array: 100% |###########################################|

done!

適当にユーザー辞書フォルダを作成して、そこに置いておく。

$ sudo mkdir /usr/local/lib/mecab/dic/user_dic
$ mv wiki_hatena.dic /usr/local/lib/mecab/dic/user_dic
ユーザー辞書をデフォルトで読み込むように設定

これは、辞書のパスを設定するファイル mecabrc を以下のように編集した。(辞書の置き場所はどこでも大丈夫なので、管理しやすい場所に適宜修正ください)

$ sudo less /usr/local/etc/mecabrc
vi
....
# userdicを以下のように修正
userdic = /usr/local/lib/mecab/dic/user_dic/wiki_hatena.dic
....

これで使える状態になったはずなので、ターミナルから使って確認。

$ # 通常のIPA辞書(システム辞書)
$ mecab
今日はスターバックスに来ました。
今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
スターバックス	名詞,一般,*,*,*,*,スターバックス,*,*
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
来	動詞,自立,*,*,カ変・来ル,連用形,来る,キ,キ
まし	助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

スターバックスがちゃんと単語として認識してくれていることが確認できましたー!


これでテキスト処理ができる最低限のベースができたので、次は機械学習でのテキスト処理にもチャレンジしてみます!


追記(2017/03/24)

最近はWikipediaはてなだけでなく、ネット上でいろんな単語がものすごい勢いで生まれており、そいういうもの辞書として使いたいよ〜、という方向けに「mecab-ipadic-NEologd」というものが2015年に出ていたらしいです。
以下にて適用方法を書きましたので、参考ください。
kimiaki.hatenadiary.jp