うえぽんSW局

古いタイプの日記ブログです。気まぐれに更新してます。

タグ:ブックマークレット

 3年前に作った「選択範囲を要約する人工無能ブックマークレット(680バイト)」の(680バイト)という部分がずっと気になっていたので 479 バイトまで短くしてみました。


 選択範囲を要約した振りをするブックマークレット(479バイト)
 ↑右クリックなどでブックマークすればブックマークレット化できます。

 下が中身。479 byteです。
javascript:(function(D,t,U,S,N,s,p,q){s=((t?t():document.selection.createRange().text)+U).replace(/(\u3002+|[!-~\uFF01-\uFFE5\u300A-\u3015]\s)\s*/g,'$1'+U).replace(/\s/g,'').split(U);function F(x,y){return y?D[x]?D[x].push(y):D[x]=[y]:D[x][Math.random()*D[x].length|0]};for(p in s)if(t=s[p]){for(F(U,t[S](q=0,N));q<t.length-N;)F(t[S](q,N),t[S](N+q++,1));F(t[S](q),U)}do{t=p=F(U);for(s=300;q=F(p),q!=U&&s--;p=p[S](1)+q)t+=q}while(confirm(t))})({},top.getSelection,'\b','substr',3)

 ニュースサイトやブログの記事をマウスで選択し、このブックマークレットを実行すれば要約した振りをします。
 マルコフ連鎖を使ったいわゆる人工無能というやつです。詳しくは以前のページ(のリンク先)を見てください。
 コードの最後にある数字の 3 はマルコフ連鎖の接頭文字数を意味しています。4 とか 5 にすればもう少し賢くなります。

 動作確認したブラウザはWindowsXP上の Firefox 3.6.12、Opera 10.63、IE8 のみです。たぶん他のブラウザ上でも動きます。フレームを使ったページでは動作しません。

 以前のと比べて気になった人もいるかもしれませんが、全角文字を \u**** という形式にしました。例えば '。' は '\u3002' となってます。
 逆に長くなっていますが、なぜそうしたかと言うと、全角文字を2バイトとカウントするのがなんとなくインチキぽく感じたからというのと、ブックマークレット保存時にURLエンコードされてもサイズがあまり膨らまないからです。

 以下はJavaScriptのコードを短くするのに参考にさせていただいたページです。
 ・JS のコードを短かくする Tips - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech
 ・空から降ってくる女の子(ゲームっぽく) - 0xFF
 ・ブックマークレットを短くする方法 - Born Neet
 ・Math.floor を使わずに小数を整数にする - IT戦記

 マルコフ連鎖ネタとしてはこんなものも作られています。
 ・「あたし状態遷移図」、あるいは「あたし約5.2MB」 - 理系男子の書斎には、どうしても小説が少ない。っていうか無い。 - ファック文芸部
このエントリーをはてなブックマークに追加

 かなり昔に「簡易電子透かし(Ctrl+Aで絵が浮ぶ画像)」というブログ記事を書きましたが、この手のトリック画像はIE以外では見ることができない欠点があります。
 どうにかIE以外でも見られないかと考え、いまさらブックマークレットを作ってみました。

 IEのCtrl+Aもどきブックマークレット
 ↑右クリックなどでブックマークすればブックマークレット化できます。

 実行するとクライアント領域をメッシュで覆います。
 ドラッグでメッシュを移動することができます。1ドットずれているような場合はそれで調整してください。
 ダブルクリックでメッシュは消せます。

 下はテスト用画像です。
このエントリーをはてなブックマークに追加

 「圧縮新聞」とか「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バイトの人工無能
このエントリーをはてなブックマークに追加

 秋元@サイボウズラボ・プログラマー・ブログさんで紹介されていたページ中の画像群で遊ぶJavascriptに触発されて、自分もブックマークレットを作ってみました。

 ブックマークに保存してブックマークレットにするか、アドレスバーに貼り付けるかして使って下さい。低スペックPCでは重いかもしれませんが、ウゴウゴルーガみたいに文字が躍り出します。ただし、すべてのブラウザで動く保証はありません。

 ウゴウゴ・ブックマークレット
 ↑右クリック「お気に入りに追加」でブックマークレット化。

 ↓中身はこうなってます。


 実行時のイメージはこんな感じです。

ウゴウゴルーガ化デモ


 やっていることは、インライン要素の座標をランダムに移動しているだけです。ウゴウゴ化しても普通にページを閲覧できます。でも低スペックPCでは重いです。

[修正とか追記:2007/05/20, 2007/11/25]
 いまさらですが、上手く動作しないブラウザがあったので修正しました。座標指定を整数にしただけです。

【余談】
 若い人には「ウゴウゴルーガ」と言うよりも「むしまるQ」(正確には「なんでもQ」)と言った方が分かるのかな? (追記:「なんでもQ」も通じない世代もいるようで…)
このエントリーをはてなブックマークに追加

↑このページのトップヘ