![見出し画像](https://assets.st-note.com/production/uploads/images/75712154/rectangle_large_type_2_3b524ee6c968beb787257f3a9cd8a4f0.png?width=800)
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が発見したわけではないようです.
調査結果
英文における単語の出現回数を調査してみます.
(当然ながら、調べている人は沢山います)
![](https://assets.st-note.com/img/1648517259182-bEh7DVZjuv.png)
![](https://assets.st-note.com/img/1648517265805-oammY46SPt.png)
![](https://assets.st-note.com/img/1648532172029-e6vjetyoIo.png)
綺麗に Zipf's lawに従いました.特にデータ1とデータ2.
調査方法
調査対象データ
gutenberg.org に無料公開されている書籍のテキストデータを使用.
データ1
https://www.gutenberg.org/ebooks/1 より
https://www.gutenberg.org/cache/epub/1/pg1.txt を使用
データ2, 3
https://www.gutenberg.org/browse/scores/top#books-last30 より
https://www.gutenberg.org/files/84/84-0.txt データ2
https://www.gutenberg.org/files/1342/1342-0.txt データ3
データの加工
以下を行いました.
・全文字を小文字化
・" を削除
・単語末尾の . , ; を削除
数え方
文を 半角スペース と 改行 で単語に分割し,同じ文字列は同じ単語としました.出現頻度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/
この記事が気に入ったらサポートをしてみませんか?