livedoorReaderのフィードをマルコフ連鎖で作ったワードサラダと入れ換えるGreasemonkeyスクリプト
0.5の確率でフィードのitemを、それを元にマルコフ連鎖で作ったワードサラダと入れ換える。
            javascripter's
          gist: 37913 — Gist
        にスクリプトを置いた。
インストールすると、フィードのitemが下のような支離滅裂な文章になる。
MOONGIFT: » PHP開発が変わる!PHP実行環境をクラウド提供「Aptana Studio」:オープンソースを毎日紹介 (Markov) 元記事 | 2時間前 これの恐ろしい所はPHP開発し、実行ができてしまうのが、実行が、そのままAptana Cloudだ。Amazon EC2の実行がAptana Cloudだ。Amazon EC2の恐ろしい所はPHP開発が変わる!PHP実行がAptana Cloudだ。MOONGIFT: そして最近発表されたのだ。Amazon EC2のだ。MOONGIFT: » PHPのだ。Amazon EC2のライバルと言われている点に近い。MOONGIFT: そして最近発表されてしまう
// ==UserScript== // @name MarkovLDR // @namespace http://d.hatena.ne.jp/javascripter/ // @include http://reader.livedoor.com/reader/ // @require http://chasen.org/~taku/software/TinySegmenter/tiny_segmenter-0.1.js // ==/UserScript== function Markov() { this._dic = {}; this._segment = null; } Markov.prototype.make = function (source) { var segmenter = new TinySegmenter(); var ary = this._segment = segmenter.segment(source); var dic = this._dic; for (var i = 0, l = ary.length; i < l; ++i) { var word = ary[i % l]; var next = ary[(i + 1) % l]; if (word in dic) { dic[word].push(next); } else { dic[word] = [next]; } } return this; }; Markov.prototype.take = function (size) { var ary = this._segment; var dic = this._dic; if (!size) { size = ary.length; } function pickup(ary) { return ary[Math.floor(Math.random() * ary.length)]; } var ret = []; var current = ary; for (var i = 0; i < size; ++i) { var s = pickup(current); ret.push(s); current = dic[s] } return ret.join(''); }; with (unsafeWindow) { LDR.register_hook('before_printfeed', function (feed) { if (feed._markov) return feed; feed._markov = true; feed.items.forEach(function (item) { if (Math.random() < 0.5) return; item.title += ' (Markov)'; var div = document.createElement('div'); div.innerHTML = item.body; item.body = new Markov().make(div.textContent).take(); }); }); }
参考にしたサイト:
マルコフ連鎖してみた - hitode909の日記