物欲購入目録日誌 写真館
スポンサーサイト
--.--.-- (--:--) スポンサー広告
Twitterでつぶやく
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
MacOSXでruby gemのベイズ推定用ライブラリ (classifier)を利用する方法
2010.10.15 (02:18) 未分類trackback(0)comment(0)
Twitterでつぶやく
MacOSX v10.6.4で日本語テキストを分類することができるrubyのナイーブベイズ推定用ライブラリ (classifier)を利用するための手順を簡単に書いておきます。

・Finkをinstall

ライブラリなどを簡単にinstallするためにFinkをinstallします。

$tar -xvzf fink-0.29.10.tar.gz
$./bootstrap
$/sw/bin/pathsetup.sh
$/sw/bin/fink selfupdate


・gslライブラリのinstall

数値計算用のラブラりであるgslをinstallします。このライブラリを入れることによって推定の計算が早くなりますし,classifierを利用する際に文句を言われなくなります。

$export PATH=$PATH:/sw/bin
$fink install gsl


・gsl-configにパスを通す
gsl-configが利用できるように環境設定ファイルにpathを通しておきます。
finkでinsallすると/sw/binに通します。

$export PATH=$PATH:/sw/bin

・ナイーブベイズ分類器ライブラリclassifierをinstall
gemで簡単に入ります。
$sudo gem install classifier

.形態素解析ライブラリ(MeCab)のinstall
日本語分類を行うにはclassifierに形態素解析した文字列を入れる必要がありますので、日本語の形態素解析は必須なのでmecabをinstallします。
$tar zxfv mecab-0.98.tar.gz
$cd mecab-0.98
$./configure
$make
$make check
$sudo make install


・辞書をインストール
mecab単体では形態素解析ができません、それ用の辞書をinstallしてやる必要がありますので同じサイトに落ちている辞書をinstallします。なを文字コードはutf8にします。
$tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz
$cd mecab-ipadic-2.7.0-20070801
$./configure --with-charset=utf8
$make
$make install


・mecabを試してみる
とりあえず、単体のmecabのinstallが終了したので試してみます。
$mecab
物欲購入目録日誌
物欲 名詞,一般,*,*,*,*,物欲,ブツヨク,ブツヨク
購入 名詞,サ変接続,*,*,*,*,購入,コウニュウ,コーニュー
目録 名詞,一般,*,*,*,*,目録,モクロク,モクロク
日誌 名詞,一般,*,*,*,*,日誌,ニッシ,ニッシ
EOS


ちゃんと形態素解析できているようです。

・mecabのバインディングrubyをinstall

次はこのmecabをrubyから利用するためにmecab-rubyを入れます。
$tar xvfz ./mecab-ruby-0.98.tar.gz
$ruby extconf.rb
$sudo make install



ここまで順調に行っていたのですが、ここでこけました。installは終了したのですが、どうやら辞書の場所をこのmecab-rubyは理解していないようです。そこでいろいろ調べるswigなどをいれてみたりしたのですが、かなり苦しんだのですが以下のようにするといいらしい

http://sites.google.com/site/casualconcj/yutiriti-puroguramu/mecab-ruby-wo-insutoru-suru#TOC-MeCab-Ruby-

作成したmakefileにコンパイラオプションを追記などを行いました。詳しくは上記を参照ください。

それではrubyからMeCabをcallします。
--
#! /usr/bin/ruby
require 'rubygems'
require 'MeCab'

# rubyからMeCabを利用する。
# わかち書きをする
wakati = MeCab::Tagger.new('-O wakati')
puts wakati.parse('物欲購入目録日誌')
--
$./mecab_ruby.rb
物欲 購入 目録 日誌


完全O.Kです。日本語のわかち書きができました!
これでclassifierを利用する準備が完了しました。
もうこれで仕事の90%が完了しました!

あとは実装するだけです!

--
#! /usr/bin/ruby
# -*- coding: utf-8 -*-
#
# classifier sample
#
$KCODE = 'u'
require 'rubygems'
require 'classifier'
require 'stemmer'
require 'MeCab'

# 分類を設定します
bayes = Classifier::Bayes.new('オタク', '普通')
# 形態素解析用
wakati = MeCab::Tagger.new('-O wakati')

# 学習データ
# オタク
# - akiba blogさんの2010.10.15の記事
# http://blog.livedoor.jp/geek/
#
ota = []
ota << 'コミックマーケット79(冬コミ)カタログの予約がゲーマーズ本店で14日に始まった。今年の夏コミ(C78)は例年になく早い?予約開始だったけど、今回の冬コミカタログの予約は去年の冬コミの時と比べて10日ほど遅いスタート。コミケカタログの予約開始をTwitterにポストした反応は、「もうそんな季節か…」「夏から冬はあっというまですね」などなど。'
ota << 'サークルくまたんFlash!主催の東方合同誌「東方LoliBitch合同」に、メロン秋葉原店にエルシャダイPOPが付いてた。ロリな東方キャラが登場する、東方紅楼夢6新刊の18サークルが参加された、大人向け68Pフルカラー同人誌。メロン秋葉原に付いてたPOPは「そんなロリビッチで大丈夫か?」と「大丈夫だ、問題ない」だった。'

#
# 普通
# - 日経新聞
# http://www.nikkei.com/
futu = []
futu << '就業体験を通じ将来の仕事について考える「インターンシップ」。大学3年生が夏休みなどに1週間ほど会社に通い、仕事や雰囲気を知る場として定着したが、最近は期間が短くなり、1日だけの“1dayインターン”も目立つ。参加者の期待に応える工夫も見られる一方、学生が「会社説明会と変わらない」と嘆くケースも増えている。'
futu << '先進国の中央銀行がデフレ圧力の高まりに対応し、購入資産の拡大を通じて大量の資金を供給している。日米欧の名目国内総生産(GDP)に対する中銀の資産残高の比率は15~25%で、2008年9月のリーマン・ショック後に大幅に上昇していることがわかった。先進国の金融緩和競争が生んだ余剰資金は新興国に流れ込み、資産バブルやインフレの温床になりつつある。世界経済は「先進国のデフレ」と「新興国のバブル」が共存す…'

# 学習
# オタク
ota.each do |str|
morph = wakati.parse(str).gsub!(/。|?|!|「|」|、|(|)|(| )/,'')
bayes.train('オタク',morph)
end
# 普通
futu.each do |str|
morph = wakati.parse(str).gsub!(/。|?|!|「|」|、|(|)|(| )/,'')
bayes.train('普通',morph)
end

# 判定する文章
comment = wakati.parse('年末のコミケが楽しみで仕方がない')

# 分類データの数値化
puts bayes.classifications(comment).inspect

# 分類の結果
puts bayes.classify(comment)
--

結果

{"オタク"=>-45.7326056755537, "普通"=>-46.2717175640308}
オタク


という感じになりそれなりに機能しているっぽいです。
とりあえず、これをtwitter botに組み込むように改造してみたりします。
prevhome next












トラックバックURL
→http://tachiphoto.blog61.fc2.com/tb.php/1156-7dbda1f4
home
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。