天天看點

整理經濟學人詞頻表(詞頻分割過程)

從奶爸那裡得經濟學人的到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