辞書データを小さく出来ないか?

1次元のみ

連続した2バイトの相関ではなく、単にバイトの値の頻度分布を見る、という考え方。頻度分布を見ると、差が結構あるように見え、このアイデアは良さそうに思える。


元記事を読んでしばらく考えていたときに思いついた。2バイト相関よりも先に思いつくべきアイデアかもしれない。結果は以下の通り。
2dto1d.rb
encode_test_1d.rb


失敗率が4.7%。ただ辞書サイズは2次元の場合の256分の1。それで失敗率が4倍…。良いのか悪いのかよく分からん。

平均化

次に、2バイト相関のまま、辞書データのマップの隣り合うピクセルを平均化してみて結果を比較してみた。
makecoursevectors.rb
左から順に、EUC, UTF-8, JIS, SHIFT JIS。上の4つが元のデータ、下の4つが8x8ピクセルで平均化した例。

こうやって、粗視化してもなおエンコードごとの見た目の違いがあるので期待できた。
結果は以下の通り。(encode_test_coarse.rb

32x32pixelの粗視化のケースでは、辞書サイズが元の1000分の1で、失敗率が3%。1次元の時よりは若干良いという感じだろうか。