設計思路:
1.為了統計資料具有實際意義:
<1>統計中需要剔除一些無統計意義的詞,例如 am is are 等虛詞、代詞、連詞等。
<2>一般的文章句首單詞首字母為大寫,此時需要將此類情況的大寫字母轉化為小寫字母,但值得一提的是,許多專有名詞入如 who iphone 等詞不應作此類處理。
<3>①為了應對文章總詞數較少(幾十個詞)造成大多數單詞僅僅只出現一次的情況,程式選取出現頻率高於5%的詞不**章總詞數取值均無條件輸出。
②為了應對文章詞數很多(5w~50w詞)造成輸出序列太長,程式選取出現頻率高於0.01%的詞。③中等篇幅的文章,在出現頻率高於0.01%的條件上加上至少出現2次的條件。
2.為了統計的高效性:
對源單詞集合和無需統計的單詞集合根據字典序進行快速排序(平均o(nlogn)),再進行順序查詢(o(n))以獲得相同詞的重複次數,得到的詞在無需統計的單詞集合中查詢(o(nlogn)),只有在無需統計的單詞集合中不出現才能被統計如結果集,最後對結果集以出現次數為關鍵字進行降序排序(o(nlogn)),輸出結果。總複雜度為(o(nlogn)),測試中課瞬間完成統計10w詞級別的輸入量。
(如果使用
紅黑樹的二叉檢索樹
實現無意義詞集合的維護以及
最後統計結果的維護效率可能還能小幅提公升,可用stl的set實現,總複雜度仍為(o(nlong)))
3.為了程式的健壯性和適用性:
<1>程式輸出保持固定且較強適應性的輸出格式,程式會自動過濾掉輸入檔案中允許任意次序穿插的符號、漢字、標點、空格等非英文本元(但不能有unicode格式字元),此外程式盡量降低了因某些特殊情況的發生造成格式混亂的可能。
<2>在當輸入檔案為空時,按照統一的格式輸出相應異常提示,並結束程式。
<3>由於輸出條件的控制造成輸出為空時,也按照統一的格式輸出相應異常提示,並結束程式。
例如:當輸入乙個詞數很多的檔案(10w個詞),而恰好每個詞均出現了不足(100000x0.05%=10次),那麼作者認為,這篇文章不具有足夠的關於詞彙出現次數(頻率)的統計意義。
<4>對於程式的輸入輸出已經需要剔除的單詞,程式均使用檔案存放。對於輸入輸出較大或者需要剔除詞集需要修改時,這樣的io方式能夠擴大程式的適用範圍。(在程式開頭**部分建立一張需要剔除詞的表的做法太low了)
<5>關於如何找到需要剔除的詞,若僅僅是自己陳列能想到的詞,或者借助搜尋引擎獲取他人收集的虛詞表。測試表明這樣的做法遺漏較多(作者使用100w詞英文**實際測試結果顯示,仍然有幾十個無意義詞在統計結果的前列)。因此獲得虛詞以及無意義詞有效的方法是:輸入一篇100w詞及其以上單詞量的文章,選取統計到的前100-150個單詞複製到需要剔除的詞的檔案中,並檢查其中包含有的有意義詞重新刪去即可。測試表明,此種方法獲得的無意義詞表十分有效,在之後的各個量級統計中均很難找到無意義的統計詞被列入結果。
4.附圖展示不同輸入的結果:
<1>大資料量輸入:
《大衛.科波維爾》英文版統計結果如下:(26.7w詞)
(耗時:0.6080s)
此處省略若干統計資訊。
從結果中可以看出,幾乎所有的代詞介詞連詞一類統計意義不大的詞均已被剔除在外。
<2>小資料量輸入:oracle官網首頁統計結果如下:(耗時:0.0030s)
<3>當輸入為類似單詞表一樣各個資料出現次數不能體現出差異並且詞數較大時,作者認為這樣的詞集沒有足夠的統計意義,因此輸出提示資訊。
諸如以下輸入:
此處省略若干單詞。
統計結果如下:
此例子充分證明程式可自動過濾漢字標點等非英文本元,並對於沒有足夠統計意義的輸入提供提示資訊。
<4>當找不到in.txt檔案過in.txt檔案為空時。
<5>當程式輸入比較大,需要1秒甚至數秒的運算時間時,程式需要輸出提示資訊表示程式正在正常執行而非卡死。
此例將輸入263.6w單詞,檔案大小12.7m。
統計結果如下:
5.實現**如下:
python 詞頻統計 中英文
calhamletv1.py 英文統計程式 def gettext txt open hamlet.txt r read txt txt.lower for ch in txt txt.replace ch,將文字中特殊字元替換為空格 return txt hamlettxt gettext wor...
Python 文字詞頻統計中英文
統計一段英文中 出現次數最多的幾個單詞 def get text text open eng.txt r read text text.lower 所有單詞都替換成小寫 for ch in 去噪,歸一化處理,把所有特殊符號替換為空格 text text.replace ch,return text ...
統計分析的體會
客戶給了一張基本的資料表,然後讓我做大量的計算,並且動態 靜態的做統計分析報表,經過了長達兩個月的苦戰,終於作完了。體會如下 1 一張存放中間統計結果的表是必要的,如果能夠將客戶的統計分析需要經過計算才能顯示的字段囊括在內是最好不過了,畢竟在查詢的過程中作計算是一件很討厭的事,雖然有資料冗餘,但是簡...