コード中の文字の頻度分析
出題者です。 こちらで用意していた回答は awk を使ったものでした。一応解説すると、組み込み変数FSを空にし、1行単位の文字毎に連想配列に格納しています。
1 2 3 4 5 6 7 8 9 | # 1文字版
BEGIN { FS="" }
{ for (i=1; i<=NF; i++) ht[$i]++}
END { for (c in ht) print ht[c],c }
# 3文字版
BEGIN { FS="" }
{ for (i=1; i<=NF-2; i++) { ht[$i$(i+1)$(i+2)]++}}
END { for (c in ht) print ht[c],c }
|
Posted feedbacks - R
$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:"<-")演算子のせいでしょう。
1 2 3 4 5 6 7 8 9 | # 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), "")))))
}
|



crane
#6382()
Rating0/0=0.00
プログラムコード中の文字の頻度は言語によって相当にばらつきがあると思います。ある言語はピリオドが頻出するとか、別の言語はカッコの頻出頻度が高い、とか。そこで、
(その言語で書かれた「典型的な」プログラムコード、といえるようなものがあると良いのですが・・)
簡単すぎるという方は、複数文字にしてみたり単語の頻度にしてみてください。
参考;Wikipedia 頻度分析
http://ja.wikipedia.org/wiki/%E9%A0%BB%E5%BA%A6%E5%88%86%E6%9E%90
1 reply [ reply ]