python之統計句子中的詞頻次數
阿新 • • 發佈:2019-02-11
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)有沒有範圍值,返回的是什麼,經過查詢發現是字典