這裏是一個Python版本:
from collections import Counter
wc=Counter()
with open('tale.txt') as f:
for line in f:
wc.update(line.split())
print wc.most_common(50)
運行上Tale of Two Cities產量:
[('the', 7514), ('and', 4745), ('of', 4066), ('to', 3458), ('a', 2825), ('in', 2447), ('his', 1911), ('was', 1673), ('that', 1663), ('I', 1446), ('he', 1388), ('with', 1288), ('had', 1263), ('it', 1173), ('as', 1016), ('at', 978), ('you', 895), ('for', 868), ('on', 820), ('her', 818), ('not', 748), ('is', 713), ('have', 703), ('be', 701), ('were', 633), ('Mr.', 602), ('The', 587), ('said', 570), ('my', 568), ('by', 547), ('him', 525), ('from', 505), ('this', 465), ('all', 459), ('they', 446), ('no', 423), ('so', 420), ('or', 418), ('been', 415), ('"I', 400), ('but', 387), ('which', 375), ('He', 363), ('when', 354), ('an', 337), ('one', 334), ('out', 333), ('who', 331), ('if', 327), ('would', 327)]
您也可以拿出來與awk
,sort
和head
模塊化/ Unix的類型的解決方案:
$ awk '{for (i=1;i<=NF; i++){words[$i]++}}END{for (w in words) print words[w]"\t"w}' tale.txt | sort -n -r | head -n 50
7514 the
4745 and
4066 of
3458 to
2825 a
2447 in
...
無論語言,配方是一樣的:
- 創建字的associative array及其頻率計數
- 逐行讀取文件中的行,並通過文字
- 排序添加到關聯數組字數組頻率並打印所需數量的條目。
你還需要考慮一個'單詞'是什麼。在這種情況下,我簡單地將空間用作非空間塊之間的分隔符作爲「單詞」。這意味着And
and
+ "And
都是不同的單詞。分隔標點符號是通常涉及正則表達式的附加步驟。
'tr'將字母數字字符的補碼('-c')翻譯爲換行符。 'sort'將單詞帶到一起,然後'uniq -c'爲每個帶有計數的不同單詞生成一行。 'sort -nr'然後按照數字排序計數,從最大到最小,'head -10'給出前10行。在Unix變體中,包括Linux和Cygwin,'man'命令(用於手冊)給出了每個命令的參考。因此,'man tr'會給出'tr'的手冊頁,等等。 – mpez0