エンコード判定機
飲み会の話題にて。なんか、文字エンコード判定がしょぼくてどうこうというはなし。世の中のエンコード判定がどうなってるのか知らないけど、ルールベースでそのエンコードの範囲からはずれたら false とかしてるのかな。でも、やっぱりそこは、入力文字列: 、エンコード:
に対して、
なんてな方法で。N-gram 使って、データが長ければ適当にサンプリングすれば OK。
ということで、byte bigram、(いいかげん)でそこら辺に落ちてた IRC のログをつかって学習。ひらがなはけっこう簡単に判別できる。出現頻度の低い文字列がダメで、「魑魅魍魎」を判定できなかった。ごちゃごちゃいじったが、結局 byte bigram が文字 unigram 程度の効果しかないのがあれだ。なんか悔しいので、trigramにしたらきれいに判定できるようになりましたと。代わりに係数データが 100 MB 超えて、なんか悲しい。疎行列として扱わないとダメですね。しかし、上の単語はトレーニングセット中に偶然出てきたので良かったが、未知熟語には弱そうだなぁとかそんな感じ。