コードを舐める日々

でざいんがいいかんじです

mecab でマルコフ連鎖をためしてみる。

そういうのは、とても好き。
昔からやりたがっていたこと。
何よりも、プログラミングに任せて自動的にマルコフ連鎖で文章をおかしくない程度に要約させるのは神秘的で不思議なものを感じる。
すばらしいエントリーに出会ったので試してみました。
マルコフ連鎖で日本語をもっともらしく要約する - ザリガニが見ていた...。

上記の記事を参考に My MacBook Pro(Mac OS X 10.5.7 rubyは1.8.7)に試してみた。

まずは、mac ports を使えるようにしておく。(もう既にそうしてあるので略する)
詳しくは、下記のエントリーがオススメです。
MacPortsでステキなUNIXツールをインストール - はこべにっき#

$ sudo port install mecab +utf8
$ sudo port install mecab-ipadic-utf8
$ sudo port install rb-mecab

と入れる。
試しに Mecab が通るかどうかチェックする。

$ mecab -O wakati #mecab起動、わかち書きとして
Rubyも楽しくかけるところがいいですね! #ここを入力してリターンした結果が下記の行です。
Ruby も 楽しく かける ところ が いい です ね ! #上記の行を入力した結果、単語に合わせて半角を挿入した結果

mecab も無事に入りました。

さて、「ザリガニが見ていた」に載っていたコードを走らせてみる。

$ ruby mecab.rb 
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- nokogiri (LoadError)
	from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
	from mecab.rb:3

Ruby モジュールの nokogii が入っていないエラー。下記のように入れる。

$ sudo gem install nokogiri
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.3.2
1 gem installed
Installing ri documentation for nokogiri-1.3.2...
Installing RDoc documentation for nokogiri-1.3.2...

再度、実行してみるが、何が足りない。

HI.  You're using libxml2 version 2.6.16 which is over 4 years old and has
plenty of bugs.  We suggest that for maximum HTML/XML parsing pleasure, you
upgrade your version of libxml2 and re-install nokogiri.  If you like using
libxml2 version 2.6.16, but don't like this warning, please define the constant
I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 before requring nokogiri.

mecab.rb:12: undefined method `attribute' for nil:NilClass (NoMethodError)

libxml2が入っていないようだ。port コマンドで入れよう。

$ sudo port install libxml2

これでいけるんだろう。

$ ruby mecab.rb 
HI.  You're using libxml2 version 2.6.16 which is over 4 years old and has
plenty of bugs.  We suggest that for maximum HTML/XML parsing pleasure, you
upgrade your version of libxml2 and re-install nokogiri.  If you like using
libxml2 version 2.6.16, but don't like this warning, please define the constant
I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 before requring nokogiri.

mecab.rb:12: undefined method `attribute' for nil:NilClass (NoMethodError)

あれ、、re-install とあるから再度 nokogiri を入れ直すってことかな。

$ sudo gem install nokogiri
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.3.2
1 gem installed
Installing ri documentation for nokogiri-1.3.2...
Installing RDoc documentation for nokogiri-1.3.2...

今度こそ。

$ ruby mecab.rb
 JR東海は11月、東海道・山陽新幹線で営業運転してもらうねらいがある。 ちなみに、営業運転後の深夜に走行実験する。新幹線の優位性を理解している。山陽区間での試験走行で320キロを出したことはあるが、330キロは初めて。 ちなみに、営業運転しているN70キロ。
$ ruby mecab.rb
 JR東海は11月、東海道区間を最高270キロ、山陽区間を同300系は現在、東海道・山陽新幹線で営業運転する高速鉄道の世界最速は、米原―京都で関係者を乗せて走行する計画。新幹線システムの導入を検討中の国々に、日本の新幹線の優位性を理解している。山陽区間での試験走行で320キロは初めて。 ちなみに、営業運転する高速鉄道国際シンポジウム」に合わせ、営業運転する高速鉄道の世界最速は、中国(北京―天津)の320キロを出したことはあるが、3300系で、時速3300キロで運転しているN700系は現在、東海道区間を同30キロより速く、同月に名古屋市で開催する「高速鉄道の世界最速は、中国(北京―天津)の320キロは初めて。 走行試験は、中国(北京―天津)の350キロより速く、同月に名古屋市で開催する「高速鉄道国際シンポジウム」に合わせ、営業運転する高速鉄道国際シンポジウム」に合わせ、営業運転後の深夜に走行実験する。 走行試験は、中国(北京―天津)の350キロは初めて。 N700系で、時速330キロは初めて。 走行試験は、中国(北京―天津)の320キロ。

おお!ちなみにwww.asahi.comにある記事からマルコフ連鎖によって要約したものになります。
乱数で文節を決めているプログラムになっているので、毎回違った結果になっていて面白いですね。
もっとアルゴリズムの勉強したくなってきた。