從奶爸那裡得經濟學人的到6個詞頻統計txt檔案,因為要導入單詞軟體,是以用python整理了一下。
三個高頻詞的txt,簡單的做了去重合并之後。處理低頻詞,粗略一看,發現由于詞頻過低,單詞表排列像是字典一樣,經常是同樣字母開頭的詞連續十來個。
于是想把相同詞頻的打亂一下順序,這裡記錄一下打亂過程。
一開始的想法是:既然是按照a-z排列的,從199詞頻降到20詞頻。應該是180組a-z的單詞。是以如果後一個單詞比前一個單詞首字母的ascii值小,說明到下一詞頻了。按照這個原理寫成下面代碼試一下:
temp_arr,num = [],
for i in range(len(words)):
temp_arr.append(words[i])
if i==len(words)- or ord(words[i][])>ord(words[i+][]):
num+=
print(num,len(temp_arr))
temp_arr=[]
[Finished in s]
得到1800多組是什麼鬼啊?列印一下最後幾組看看:
……'unlit', 'uptown', 'unobtainable', 'walkover']
['virago']
['utilitarianism', 'voguish'……
看來詞頻表并不絕對按照a-z的順序,偶有前後位置移動。改成
ord(words[i][0])>ord(words[i+1][0])+10:
忽略10個以内的字母表錯位,再試試:
[Finished in s]
還有一些兩三個單詞一組,再列印出來看看
['abattoir', 'agora', 'yorktown']
['addax', 'wunderkind']
['additionally', 'academe', 'accoutrements', 'yolk']
[Finished in s]
哦,原來是字母表邊界問題。如果忽略邊界問題,我們統計能得到多少組?
[Finished in s]
Perfect! 就是180。說明思路還是對的。剩下的就是邊界問題處理一下就行了,繼續往下寫。
temp_arr,all_arr = [],[]
for i in range(len(words)):
temp_arr.append(words[i])
if i==len(words)- or ord(words[i][])>ord(words[i+][])+:
if len(temp_arr)>:
all_arr.append(temp_arr)
temp_arr=[]
else:
# 處理邊界問題,單詞重新配置設定到前面和後面一組裡。
arr = []
for w in temp_arr:
if ord(w[])>ord('m'):
all_arr[-].append(w)
else:
arr.append(w)
temp_arr = arr
# 輸出結果
total,words = ,[]
for arr in all_arr:
total+=len(arr)
random.shuffle(arr) # 亂序處理
words+=arr
print(total)
print(len(words))
[Finished in s]
重整詞頻表完畢。
附上整理好的詞頻表(200+的高頻表隻做了去重處理,200-低頻詞按詞頻亂序處理 ),需要的可以下載下傳。
連結: https://pan.baidu.com/s/1GQwE9_OG_mQ-E7Z1_Y1W_w 密碼: fp7x