どう書く?org : コード中の文字の頻度分析

original page : http://ja.doukaku.org/181/

プログラムコード中の文字の頻度は言語によって相当にばらつきがあると思います。ある言語はピリオドが頻出するとか、別の言語はカッコの頻出頻度が高い、とか。そこで、

* 文字の頻度解析をするプログラムを作成し、

* 適当なプログラムに対して実行し、結果を出力して、そのような頻度になっている理由を教えてください。

(その言語で書かれた「典型的な」プログラムコード、といえるようなものがあると良いのですが・・)

簡単すぎるという方は、複数文字にしてみたり単語の頻度にしてみてください。

参考;Wikipedia 頻度分析

http://ja.wikipedia.org/wiki/%E9%A0%BB%E5%BA%A6%E5%88%86%E6%9E%90

#6523

original page : http://ja.doukaku.org/comment/6523/

$R_ROOT/library/base/R-ex/ 以下にあるサンプルコードを読ませてみました。

1.全文字
--------------------------------------------------
> l <- sort(table.files(list.files()), dec=TRUE)
> data.frame(num=l, percent=100*l/sum(l))
num percent
24237 14.418975436
e 10816 6.434609824
a 8258 4.912815082
t 8005 4.762301372
# 7733 4.600484262
s 7641 4.545752003
i 7009 4.169765187
...

一番上の文字はスペースです。サンプルコードだけに、コメント文字(#)が多いようです。


2.アルファベット
--------------------------------------------------
> l2 <- sort(l[letters], dec=TRUE)
> data.frame(num=l2, percent=100*l2/sum(l2))
num percent
e 10816 11.3734109
a 8258 8.6835824
t 8005 8.4175438
s 7641 8.0347848
i 7009 7.3702142
n 6325 6.6509637
r 6214 6.5342433
o 5715 6.0095269
...

一般的な英語の文章におけるアルファベットの頻度と大体同じになるようです。
(おそらく多くの言語で同じ結果になると思いますが・・・)


3.その他
--------------------------------------------------
> l3 <- sort(l[c(">", "<", "+", "-", "*", "/")], dec=TRUE)
> data.frame(num=l3, percent=100*l3/sum(l3))
num percent
- 1479 39.886731
< 980 26.429342
* 787 21.224380
/ 181 4.881338
+ 171 4.611650
> 110 2.966559

"-" と "<" が群を抜いて多いのは、付値(assignment:"<-")演算子のせいでしょう。

# table for one file
table.file <- function(f){
    table(unlist(strsplit(readLines(f), "")))
}

# table for multiple files (one file can be also accepted)
table.files <- function(files){
    table(unlist(sapply(files, function(f)(strsplit(readLines(f), "")))))
}