1. 程式人生 > >python之統計句子中的詞頻次數

python之統計句子中的詞頻次數

1.貼題

題目來自MOOC
《用Python玩轉資料》(南京大學)
第四周程式設計作業

對於一個已分詞的句子(可方便地擴充套件到統計檔案中的詞頻):
我/是/一個/測試/句子/,/大家/趕快/來/統計/我/吧/,/大家/趕快/來/統計/我/吧/,/大家/趕快/來/統計/我/吧/,/重要/事情/說/三遍/!
可以用collections模組中的Counter()函式方便地統計詞頻,例如可用如下程式碼:

import collections
s = "我/是/一個/測試/句子/,/大家/趕快/來/統計/我/吧/,/大家/趕快/來/統計/我/吧/,/大家/趕快/來/統計/我/吧/,/重要/事情/說/三遍/!/"
s_list = s.split('/') 
[s_list.remove(item) for
item in s_list if item in ',。!”“'] collections.Counter(s_list)

這個問題也可以通過字典來解決,請編寫用字典解決本問題的程式,為便於OJ系統自動判斷,程式最後輸出字串中包含的不同詞的個數。
程式參考框架

def countfeq(s):
   ... ...
   return a dict
if __name__ == "__main__":
   s = input()
   ... ...
   s_dict = countfeq(s)
   print(len(s_dict.keys()))

輸入格式:
字串

輸出格式:
整數

輸入樣例(因為oj系統限制,測試用例設為判斷英文單詞個數,請注意英文標點,假設僅包含,和.):
Spring/is/coming/./Spring/is/coming/.

輸出樣例:
3
時間限制:500ms記憶體限制:32000kb

2.說明

思路很簡單,就是建立一個字典,key為單詞,value為個數,數個數使用collections裡面的Counter函式。

3.參考程式碼

話不多說,貼程式碼。

import collections #匯入庫
def countfeq(s): #詞頻統計函式
    s_list = s.split('/')  #以"/"為分界將字串變成列表
    [s_list.remove(item) for
item in s_list if item in ',.'] #將',.'去除 dic = collections.Counter(s_list) #利用Counter函式統計個數 return dic #返回字典 if __name__ == "__main__": s = input() #輸入字串 s_dict = countfeq(s) #執行函式 print(len(s_dict.keys())) #列印字典key的長度(個數),即為不同單詞的個數

4.後記

雖然這道題不難,根據給出的框架能夠很容易地解答出來,但是學到了

  • 一個函式,collections.Counter(list)可以生成字典,key為list裡的字元或單詞,value為個數
  • list.remove(item)把list裡面的某個字元或單詞去除,也可以巢狀迴圈和條件語句
  • 寫程式碼的時候疑問過collections.Counter(s_list)有沒有範圍值,返回的是什麼,經過查詢發現是字典