[Linux]」の解説記事です。内部でルイズコピペを自動生成するために使った、ワードサラダの技術について解説しています。■ワードサラダ??みなさんはワードサラダってご存知でしょうか。サンプルとしてこのBlogを上げておきます。なんだか、日本語が変じゃありませんか?ところどころ読めるけど、なんだか変なような...。着目すべきは、「核抑止力」を「強化」するという表現である。がん???なんじゃそら。いった、ぱっと見日本語に見えるんだけど、ちゃんと読むと意味不明、という文章を「ワードサラダ」と呼びます。†1スパマーがプログラムで自動生成して、スパム広告用のBlogに利用しているみたいです。†2さて、こんな文章どうやれば作れるんでしょう?ワードサラダの作り方を書いてあるサイトは結構あるんですが、ちゃんと動くソースコードが貼ってあるサイトはなかなかないんで、実際にやってみましょう。[Linux]」の「辞書作成ユーティリティ」の中にありますので、DLしてみてください。githubでも公開していて、Webから見るならこちらの方が便利かもしれません。利用にはYahoo!デベロッパーネットワークのアプリケーションIDが必要です(OAuthは利用しません)。取得したIDは、parser.rb冒頭の「APP_ID」にセットしてください。文章を解析して、単語にわけ、それぞれの品詞についても調べる事です。受験の時に古文で同じことを手動でさせられましたが(涙)、受験でも何でもありませんのでコンピュータに自動で解析させましょう。形態素解析のソフトにはMeCab等のローカルのライブラリを使うのが定石みたいですが、インストールがめんどくさいので、Yahoo!の構文解析WebAPIを使おうと思います。Web経由なんであまり高速に大量のデータは処理はできませんが、まあ実験には十分でしょう。係り受け解析の結果も使うとそれっぽい日本語が作れるようですが、目的がルイズコピペの無限生成なんで、そこまでやらなくてもそれっぽい文章ができると思います。係受け解析の結果も利用するうまい文章作成ソフトができたら/あったら教えてください。以下、実際に行なってるコードです。「libparser.rb」内にあります。text;endend概ね、’net/http’を使ってAPIのURLにPOSTで文章を送り、結果(XMLで帰ってきます)を’rexml/document’で読み込んで、形態素解析の結果を得るだけです。上げれば、”elements[‘ResultSet/ma_result/word_list/’]”として、DOMを操作する手間を少し省くのがコツ...?それぞれの要素の意味は、surface:字面です。「桃色」だったら「桃色」reading:読み方です。「桃色」だったら「ももいろ」pos:品詞です。「桃色」だったら「名詞」baseform:動詞だった場合の”終止形”です。「届け」だったら「届く」。今回の文章生成には使ってません。■マルコフ連鎖のための辞書を作成さて、以上の形態素解析は自然言語をコンピュータで扱うなら定番の処理で、ワードサラダ生成の処理はここからが本番です。”markov.rb”内にあります。text[i+2]endend=begin・・・(略)・・・=endend簡単にいえば、「ある単語の後にはどんな単語が来るか」というインデックスをつくっています。いう感じの対応表をハッシュと配列を使って記録しています。ハッシュのキーには字面ではなくよみがなを使っていて、これはなんとなくです。この図とは違って同じ単語も何度でも登録していて、一応後で文章を生成したときに、「ルイズ」の後の単語の出現頻度が元の文章と同じになるように調整しています。これだけだと文章があまりにも不安定になるので、「ルイズ/へ」→「届け」、という、ハッシュのキーが二段階になっている辞書もつくっています。これが「三階のマルコフ連鎖」と書かれているところです。■辞書に基づいて実際にマルコフ連鎖して文章を生成というわけで、作った辞書を使って実際に文章を生成してみましょう。markov.rb内にあります。array[rand(array.length)];endendこのdic#next()に、ふたつ前の単語といっこ前の単語を渡すと、今度出力されるべき単語が返されます。上で作った辞書からランダムに選ぶだけです。三階のための辞書は場合によっては組み合わせによって該当する辞書が空の場合があるので、その場合は二階の辞書を使います。すると実際に文章が生成されます。copipe/内にいくつか文章がすでにあります。■ルイズコピペルイズ!ルイズ!ルイズ・フランソワーズたんの桃色ブロンドの髪をクンカクンカしたいお!モフモフ!髪髪モフモフ!カリカリモフモフ...きゅんきゅい!!!!にゃあああああああ!かわいい!ルイズ!ルイズぅぅうううわぁああああああああああああああああああああああ!!小説11巻のルイズちゃんは現実じゃないんだねっ!この!ちきしょ!やめてやる!!あっあんああっああんあアン様ぁあああ!!いやぁああああああああああああん!!!あぁあ!!俺の想いよルイズへ届け!!あっあんああっああんあアン様ぁあ!!あ...小説もアニメもよく考えたら...ルイズちゃんは現実じゃない?にゃああああ...あっあっー!あぁああああああ!!!あぁ!クンカクンカ!ルイズルイズぅううぁわぁああああああああああああ!!スーハースーハー!■吉野家そんな事より1よ、ボケが。お前は本当につゆだくで、それに大盛りギョク(玉子)。したらなんか人がめちゃくちゃいっぱいで座れないんです。よーしパパ特盛頼んじゃうぞー、とか言ってるの。そこでまたぶち切れですよ。ねぎだくってなさいってこった。素人にはお薦め出来ない。刺すか刺されるか、そんな雰囲気がいいんじゃねーか。お前は本当につゆだくを食いたいのかと。そこでまたぶち切れですよ。吉野家ってのはな、もっと殺伐としてるべきなんだよ。得意げな顔して何が、つゆだくって言いたいだけ■「ステーキを食べたくなったので」ステーキを食べたくなったのでステーキの話を書きますが、とある日僕が気づいたのです!やっぱりそうだ、確信した!僕の好きな食べ物は、ステーキより高いステーキソースさえあれば、そもそも本体は肉でステーキ。それ以来、ステーキソースをかけて食べるのでは!?ってことで、食べる!うわーこれもうまい!!やっぱりそうだ、確信した!僕の好きな食べ物は、ステーキより高いステーキソースをかけて食べるのでは!?と、盛り上がったところで本題に行きます。結果から言えば牛となんら変わりませんでしたYO!ということで、食べる!うわーこれもうまい!!という点です。それ以来、ステーキソースでステーキを食べておりました。読めて、でも意味がさっぱり分からない感覚は再現できましたかね?そういえば、難しい本読んだ時とかもそんな気分になるよね...。他の例としてこのサイトを挙げておきます。このBlogだと広告が貼ってませんが...一体なんのために作ったんだ、このBlog。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。それ故に...悔いの残らぬよう、やり遂げなさい。