glitch20071121.pl

usage

% perl glitch20071121.pl [filetype] [frequency param] [repeat] < [src] > [dist]
% perl glitch20071121.pl image 1000000 10 < sakkaku.jpg > sakkaku_glitch.jpg
% perl glitch20071121.pl text 13 2 < netrunner.txt > netrunner_glitch.txt

jpeg image


japanese text

from http://mala.nowa.jp/entry/41ca6cdb15

インターネットはとても楽しい。インターネットを使っているのかをタダで聴くことができた。もっとである修正のかをを見ことができた。もっと機DVDを見プロテクトをはずす事ができた。P2Pでラジオを中継している人もいた。発売前の漫画を読むことができた。もっとのかを見たりかには世界中である。ができたして無知ができに翻訳して字幕を付けているたもして。もっとであるゲーム機のかを遊ぶことができた。そういったことが、ネットランナーが多くのかにはずているた。世の中にはなかなか便利だのになかなか広まらない。」そんな沢山ある。もっとことができずとも「インターネットは便利だ。」そんな空気にはなかなかつつある。。「インターネット、これは革命的だ!」そんな思っている。世の中はなかなか変わらないもの」。梅田もちおの本にはなかなかができとかそんなことしか書いてなくている無知も教えているくれなかった。もっと具体的だワレズ下さい。どこですか。もっとはなかなか変わらが世界一安い国になった。もっとはなかなか巡らされたり。、無知を遅延している。もっと室であるた。もっとような雑誌の良いインターネッターばかりで、挙げ句にはケータイであるとか言い出す脳みそが退化した。たちもいる。もっとスカイプってのでタダで電話ができらしいぜ」そんなことが年前から知ってるわ。ピコピコ携帯小説読んでる暇があったらネトランを見世の中はなかなか変わらない。Winnyがあれだけ社会問題にはている参加ノードはなかなか変わら万ノードはある。もっとができ万だったらどうなってた。もっと。もっとは無知国民の個人情報をDVD撮り動画ができたて酷いことにはてただろう。。もっとは言う。少し自信な雑誌げに言う。モラルのかをも、無知を方、問題である。YouTubeエヴァを見たりし無知動画で将棋を見たり、無知をあるを見たりし機嫌な雑誌だ。もっとははなかなかに満ちているた、無知ブロンド死体幼女が犬に犯されたりする無修正のができ転がっているのかある。CDをコピーしている3にはするだけ社会アングラだの何も言われている。。も、た。だ。CDやDVDをコピーしたりしてあるを見してアニメをタダであるたりしている。進んである。ちょっとずつ、上手くいきつつある。には。もっとや任天堂のかは素晴らしい。もっとはとインターネットは何も、たかを多くの人に知って欲しい。もっとのかを前提として成立しているたビジネスはなかなか崩壊している。いい。もっと情報を見たりぶちまけてしまえばいい。無知を大衆を見たりができ変化には興味ができ。おじさま方、梅田もちおの本よりもネトランを見う。それから、無知をなかなか変わらのかに現金を見たりしている。もっと雑誌だ。みんな買おう。俺は買わない。恥ずかしいし。もっと

code

#!/usr/bin/perl
use strict;
use warnings;

my $filetype = shift;
my $freq = shift;
my $repeat = shift;

my $string = '';
while (<>) {
	$string .= $_;
}

my $token_ref = ($filetype eq 'text')
	? tokenize_japanesetext($string)
	: tokenize_general($string);

for my $i (0..$repeat) {
	$token_ref = glitch_by_estimation($token_ref);
}

print join '', @{$token_ref};
print "\n" if ($filetype eq 'text');

sub tokenize_general {
	my $str = shift;
	my @array = split //, $str;
	return \@array;
}

sub tokenize_japanesetext {
	use Encode;
	
	use Text::MeCab;
	my $mecab = Text::MeCab->new;
	my $str = shift;
	
	$string = decode('utf-8',$string);
	$string =~ tr/\r\n//;
	
	my @tokens;
	for (my $node = $mecab->parse($str); $node; $node = $node->next) {
		push @tokens, $node->surface;
	}
	
	return \@tokens;
}

sub glitch_by_estimation {
	my $array_ref = shift;
	my @array = @$array_ref;
	my %bigram;
	for my $i (2..$#array) {
		$bigram{$array[$i-1]}->{$array[$i]}++;
	}
	
	my @newarray = ($array[0]);
	for my $i (1..$#array) {
		unless ($i % int(rand($freq)+1)) {
			my $list = $bigram{$array[$i-1]};
			my @sorted = sort {$list->{$b} <=> $list->{$a}} keys %$list;
			my $estimated = $sorted[0] || $array[$i];
			
			push @newarray, $estimated;
		}
		else {
			push @newarray, $array[$i];
		}
	}
	
	return \@newarray;
}