1. 程式人生 > >整理經濟學人詞頻表(詞頻分割過程)

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

從奶爸那裡得經濟學人的到6個詞頻統計txt檔案,因為要匯入單詞軟體,所以用python整理了一下。

三個高頻詞的txt,簡單的做了去重合並之後。處理低頻詞,粗略一看,發現由於詞頻過低,單詞表排列像是字典一樣,經常是同樣字母開頭的詞連續十來個。

於是想把相同詞頻的打亂一下順序,這裡記錄一下打亂過程。

一開始的想法是:既然是按照a-z排列的,從199詞頻降到20詞頻。應該是180組a-z的單詞。所以如果後一個單詞比前一個單詞首字母的ascii值小,說明到下一詞頻了。按照這個原理寫成下面程式碼試一下:

temp_arr,num = [],0
for i in range(len(words)):
    temp_arr.append(words[i])
    if
i==len(words)-1 or ord(words[i][0])>ord(words[i+1][0]): num+=1 print(num,len(temp_arr)) temp_arr=[]
1844 34
1845 12
1846 15
1847 1
1848 14
[Finished in 0.8s]

得到1800多組是什麼鬼啊?列印一下最後幾組看看:

……'unlit', 'uptown', 'unobtainable', 'walkover']
1847 1
['virago']
1848 14
['utilitarianism'
, 'voguish'……

看來詞頻表並不絕對按照a-z的順序,偶有前後位置移動。改成ord(words[i][0])>ord(words[i+1][0])+10:忽略10個以內的字母表錯位,再試試:

277 4
278 194
279 215
280 2
281 3
282 217
283 221
284 221
285 2
286 220
287 4
288 250
289 258
290 276
[Finished in 0.5s]

還有一些兩三個單詞一組,再打印出來看看

270 3
['abattoir', 'agora', 'yorktown']
271 217
272 221
273
221 274 2 ['addax', 'wunderkind'] 275 220 276 4 ['additionally', 'academe', 'accoutrements', 'yolk'] 277 250 278 258 279 276 [Finished in 0.6s]

哦,原來是字母表邊界問題。如果忽略邊界問題,我們統計能得到多少組?

174 217
175 221
176 221
177 220
178 250
179 258
180 276
[Finished in 0.6s]

Perfect! 就是180。說明思路還是對的。剩下的就是邊界問題處理一下就行了,繼續往下寫。

temp_arr,all_arr = [],[]
for i in range(len(words)):
    temp_arr.append(words[i])
    if i==len(words)-1 or ord(words[i][0])>ord(words[i+1][0])+10:
        if len(temp_arr)>5:
            all_arr.append(temp_arr)
            temp_arr=[]
        else:
            # 處理邊界問題,單詞重新分配到前面和後面一組裡。
            arr = []
            for w in temp_arr:
                if ord(w[0])>ord('m'):
                    all_arr[-1].append(w)
                else:
                    arr.append(w)
            temp_arr = arr
# 輸出結果
total,words = 0,[]
for arr in all_arr:
    total+=len(arr)
    random.shuffle(arr) # 亂序處理
    words+=arr
print(total)
print(len(words))
11890
11890
[Finished in 0.7s]

重整詞頻表完畢。

相關推薦

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

從奶爸那裡得經濟學人的到6個詞頻統計txt檔案,因為要匯入單詞軟體,所以用python整理了一下。 三個高頻詞的txt,簡單的做了去重合並之後。處理低頻詞,粗略一看,發現由於詞頻過低,單詞表排列像是字典一樣,經常是同樣字母開頭的詞連續十來個。 於是想把相同詞

結對編程-詞頻統計第9組

eas 去除 耗時 rep NPU 分享 get img 完成 1、Fork倉庫的Github項目地址: https://github.com/linlkg/PairProject2018 2、預估各個模塊開發耗費的時間: PSP2.1 PersonalSoftwar

21天刷題計劃之4.1—詞頻統計Java語言描述

題目描述: 請設計一個高效的方法,找出任意指定單詞在一篇文章中的出現頻數。 給定一個string陣列article和陣列大小n及一個待統計單詞word,請返回該單詞在文章中的出現頻數。保證文章的詞數小於等於1000。 分析: 其實最簡單的方法就是遍歷陣列然後

C實現頭插法和尾插法來構建單鏈不帶頭結點

res rgb eof uci fun while data 尾插法 輸入數據 鏈表的構建事實上也就是不斷插入節點的過程。而節點的插入能夠分為頭插法和尾插法。頭插法就是在頭結點後插入該節點,始終把該節點作為第一個節點。尾插法就是在鏈表的最後一個節點處插入元

雙向循環鏈C語言描述

雙向循環鏈表 還要 ons 函數 保存 hat 加載 dir dict   下面以一個電子英漢詞典程序(以下簡稱電子詞典)為例,應用雙向循環鏈表。分離數據結構,可以使邏輯代碼獨立於數據結構操作代碼,程序結構更清晰,代碼更簡潔;電子詞典的增、刪、查、改操作分別對應於鏈表的插入

雙向循環鏈C語言描述

open color end int fin spa assert not des 代碼清單 1 // dictionary.h 2 #ifndef __DICTIONARY_H__ 3 #define __DICTIONARY_H__ 4 5 #i

【數據結構】之順序Java語言描述

arraylist 表數據 nbsp real 不同 1.5 根據 長度 tar   之前總結過使用C語言描述的順序表數據結構。在C語言類庫中沒有為我們提供順序表的數據結構,因此我們需要自己手寫,詳細的有關順序表的數據結構描述和C語言代碼請見【我的這篇文章】。   在Jav

【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日禮物 堆+鏈模擬費用流

line make 前驅 string urn return namespace 禮物 iostream 【BZOJ3502】PA2012 Tanie linie Description n個數字,求不相交的總和最大的最多k個連續子序列。 1<= k<

--oracle刪除數據庫無主鍵中重復的記錄

數據庫 create 數據庫表 new 刪除 distinct 主鍵 alter bsp --oracle刪除數據庫表(無主鍵)中重復的記錄 1, CREATE TABLE newtable as SELECT distinct * FROM

Leetcode之鏈前200道

ica div eth color exc type rmi 鏈表 res Easy 1. Merge Two Sorted Lists: Merge two sorted linked lists and return it as a new list. The new

考研王道數據結構-順序綜合應用1

typedef SQ src 動態分配 作用 測試 value com 順序表 本節代碼主要來自王道單科18頁的綜合應用題。 一、18頁第1題。從順序表中刪除具有最小值的元素(假設唯一)並由函數返回被刪元素的值。空出的位置由最後一個元素填補,若順序表為空則顯示出錯信

考研數據結構-順序綜合應用4

即將 .... change 線性 div clu AS TE style 本節代碼主要來自王道單科18頁的綜合應用題。 八、已知在一維數組A[m+n]中依次存放著兩個線性表(a1,a2,a3,....am)和(b1,b2,b3,...bn)。試編寫一個函數,將數組中

HDU 2050折線分割平面

des print 分享 several def while 要求 earch sele 傳送門: http://acm.hdu.edu.cn/showproblem.php?pid=2050 折線分割平面 Time Limit: 2000/1000 MS (Java/Ot

MySQL之單增刪改查+ 基本命令

偏移量 update 不為 也會 其他 insert 分享圖片 UNC 插入 1、MySQL之最基本命令    1、創建數據庫 命令:CREATE DATABASE 數據庫名; 舉例:CREATE DATABASE student; 2、指定要操作的數據庫 命令:USE 數

合併兩個單鏈連結串列方式

假設頭指標為La、Lb單鏈表分別為線性表LA、LB的儲存結構,現在要合併La、Lb得到單鏈表Lc void MergeList_L(LinkList La, LinkList Lb, LinkList Lc){ //已知La、Lb的元素按值非遞減排列 //歸併La、Lb得到單鏈表Lc,

購物動態連結串列+鬧鐘提醒多執行緒

基本連結串列的應用 增 刪 查 找 排 模糊查詢 核心程式碼如下: #include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> #incl

linux運維工程師面試常見問題整理8--預設埠篇持續更新ing

歡迎喜歡實施運維及資料的小夥伴加入群進行談論! 運維技術群:263859509 1.中介軟體類 中介軟體名稱 預設埠 tomcat 8080 wildfly

Python資料型別、運算子、流程語句條件結構,迴圈結構斐波那契數列、99乘法for,while

一、Python變數型別 型別 數值型、字串、元組、列表、字典等 例:c/c++、java是強型別的程式語言,一個變數在使用前確定型別,在程式期間,變數的型別是不能改變的; 指令碼語言:shell、python、perl、javaScript弱型別; Pytho

單鏈C語言實現學習記錄

# 單鏈表(C語言實現)學習記錄 ## 概念 ### 連結方式儲存 連結方式儲存的線性表簡稱為連結串列(Linked List)。 連結串列的具體儲存表示為: 用一組任意的儲存單元來存放線性表的結點(這組儲存單元既可以是連續的,也可以是不連續的)。 連結串列中結點的邏輯次序和物理次序不一定

資料結構與演算法——線性之順序JAVA語言實現

資料結構與演算法——線性表之順序表(JAVA語言實現 ) 線性表是由n個數據元素組成的優先序列。 線性表中每個元素都必須有相同的結構,線性表是線性結構中最常用而又最簡單的一種資料結構。線性表由儲存結構是否連續可分為順序表和連結串列。順序表指線性表中每個元素按順序依次儲存,線性表中邏