あなたのブログ、評論します。
土曜日、ぼーっとしているついでに検索エンジンの高速化をするにはどうすればいいのか考えた挙げ句、固有名詞を抜き出すプログラムを書いて、その実験を繰り返していたところ、実験の方が面白くなって副産物が生まれました。
まあ実態としては昔懐かしハナモゲラシステムでして、新しい工夫など何もなく、入力としてブログのURLを渡すとRSSを取り出して評論するあたりしか新しいことはありません。
でも良く読むと時々けっこうパンチラインが効いてたりして、まあたまに笑えます。
文章が繋がっているように見えるよう、ある程度原文の流れを踏襲しているのも特徴。全くムダですが。
そして採点もしてくれます。これまた全く無根拠。
ブログなので同じブログでも日によって違う評論が出てきます。
たまにFlickrで写真をみつけて挿絵を付けてくれます。
なんでこんなものを作ったのかと言いますと・・・
最近、検索エンジンを作っていて、それなりに便利になっては来たのですが、どんどん検索スピードが遅くなっていくわけです。
このままでは遠からず取り返しの付かない遅さになることは間違いなく、どうにかしてそれを解決しなくてはなりません。
検索エンジンを高速化するには、単語毎のインデックスを作る必要があり、そのためには自然に入力された言葉(自然言語)を解析して、どれが固有名詞で、どれが形容詞なのか、それらの関係はどこにあるか、ということを分析しなければなりません。
そういう一連の処理を"形態素解析"と呼び、それを実現するための形態素解析エンジンというものがいくつかオープンソースで出回っています。
けれども、形態素解析の処理はお世辞にも高速とは言い難く、そこだけC言語で書いたりするのです。Googleも外部の形態素解析エンジンを使っています。
それに対して固有名詞を抜き出すだけならストップワード検索だけで事足りる場合があります。
ストップワードとは、英語でいえば「a」「this」「he」「her」「is」のように英語のなかではありふれすぎていて固有名詞とはいえないものです。
これも完璧とは言えませんが、なんちゃってインデックスを作るには悪くない方法です。
そこで極めて適当に、ストップワードを抜き出す正規表現を書いてみました。
$keyword = mb_split("[\s\t・ \[\]\"[]『』=<>\/。/\?\&※:?【】=系的をやのでがにへと(べき|べからず|べからざるを)(かつ)(しかも)(っ[てた])(とき)とも(より)(そのほか)(しかし)(と(いう|いえば|すれば))(この)((なぜ)*なら[ば]*)((し|され)たら)(じゃ)(くらい)(くん)「」(だ(から|けど|が))な(から)(または|さもなくば)(たら)(したり)(する|すれば)((し|され)て)(だ|である)\(\),、。,(さん)\!\?(!)<><>]", $str);
上記のプログラムはまさにこの正規表現によって固有名詞を抜き出し、抜き出した固有名詞にそれっぽい飾り(評論家が言いそうなスノッブな表現のテンプレート)にあてはめて表示するわけです。
こういうソフトのもっと高度なやつが、Ractorというソフトですが、英語しかつかえなかった上に、もう失われてしまいました。