Zipf’s law
物事は本当にZipfの法則に従うのか調べてみましょう.
Zipf’s lawとは
言語学者Zipfが普及させた,自然言語における各単語の出現回数に関する法則です.
「出現頻度の順位がn位の単語の出現頻度は,1/nに比例する」というもので,簡単に書くと
出現頻度1位の単語の出現回数をxとすると,出現頻度2位の単語の出現回数はx/2となり,3位の単語の出現回数はx/3となり,n位の単語の出現回数はx/nとなる,というものです.
厳密には拡張され,「出現頻度の順位がn位の単語の出現頻度は,1/(n^s)に比例する」となています.n^sは「nのs乗」です.
Zipfが発見したわけではないようです.
調査結果
英文における単語の出現回数を調査してみます.
(当然ながら、調べている人は沢山います)
綺麗に Zipf's lawに従いました.特にデータ1とデータ2.
調査方法
調査対象データ
gutenberg.org に無料公開されている書籍のテキストデータを使用.
データの加工
以下を行いました.
・全文字を小文字化
・" を削除
・単語末尾の . , ; を削除
数え方
文を 半角スペース と 改行 で単語に分割し,同じ文字列は同じ単語としました.出現頻度2以上の語のみを集計しました.
数えるコマンド
ruby words.rb | sort | uniq -c | sort -n -r | awk '$1>1{print $1}' > cnt.txt
words.rbはこちら
while l=gets do
l.chomp!.split.each do | w |
w.downcase!
w.gsub!(/"/,"")
w.gsub!(/[\.,;]$/,"")
print w, "\n"
end
end
参考
Zipf's law Wikipedia(English) Wikipedia(和) 英語記事の方が充実しています.
https://www.gutenberg.org/