「圧縮新聞」とか「3行で要約します。 - 3lines.info」とかが流行ってるようなので、JavaScriptで似たようなものを作ってブックマークレット化してみました。


 選択範囲を要約する人工無能ブックマークレット


 マウスでテキストを選択してブックマークレットを実行すれば、選択テキスト部分を学習し、確認ダイアログにて生成した文章を返します。確認ダイアログのOKを押せば再び文章を生成して返してくれます。キャンセルで終了です。
 Ctrl+Aを押せばページ全体を選択するので活用して下さい。(本当は本文を自動取得したかったのですが、面倒なのでこのような仕様にしました)
 あと、フレームを使ったページでは選択テキストを取得できないので動作しません。

 下はテスト用に2chのコピペです。

この前、ユニクロでパーカーを購入しました。

そのパーカーを着て先日電車に乗った時、いつものようにウォークマンを
聞こうとイヤホンを耳にしたものの何も聞こえませんでした。
電池が切れたのかとしばらくそのままにしてると、前に座ってる女子高生達が
どうも俺の顔を見て笑ってるような気がしました。
「まぁいつものこと」と思いながら、ふとイヤホンを外すと、
俺がイヤホンだと思ってたものはパーカーのヒモでした。
パーカーのヒモの先っぽの丸結びした部分をずっと耳に入れていたのでした。

その時は何もなかったようにイヤホンに付け替えましたが、
家に帰ったあと、そのパーカーを脱ぎ、しんしんと泣きました。


 仕組みを簡単に解説すると、ただのマルコフ連鎖です。ただし、形態素解析は全くせず、文字数単位でN接頭文字1接尾文字のマルコフ連鎖という風にしています(N-gramというのかな?)。日本語は単語あたりの文字数が少ないので、文字単位でも意外とまともな文章を返してくれます。
 接頭文字数はデフォルトでは 3ですが、ソースの頭の部分の「N=3」の数字を増やすと賢くなります。でも 3ぐらいが一番面白味があると思います。

 以下、参考にしたページです。エブログ様のコードをベースに作りました。選択テキスト取得部分はJavaScriptな日々様のまんまです。
 ・マルコフ連鎖で文章生成(JavaScript) - エブログ
 ・ワードサラダ技術について :: Drk7jp
 ・人工無能を作ろう〜マルコフ連鎖(2接頭語と1接尾語の場合)
 ・livedoor Developers Blog:String::Trigram でテキストの類似度を測る - livedoor Blog(ブログ)
 ・JavaScriptな日々 | 選択テキストを取得する方法


[追記:2010/11/06]
 479バイトまで縮めてみました。
 ・479バイトの人工無能