統計一段文章的單詞頻率,取出頻率最高的5個單詞和個數(python)
阿新 • • 發佈:2018-11-11
練習題:統計一段英語文章的單詞頻率,取出頻率最高的5個單詞和個數(用python實現)
怎麼判定單詞?
1 不是字母的特殊字元作為分隔符分割字串 (避免特殊字元的處理不便,全部替換成'-')
2 遍歷字串,取每個word
3 正則匹配
怎麼統計個數?
將wordlist的word和word的個數放入dict,排序
''' dinghanhua 2018-11-11 練習:一段英文文章,統計每個單詞的頻率,返回出現頻率最高的5個單詞和次數 ''' import re art = ' If we want to" run Locust \ / distributed on multiple machines we would also have to specify the master host when starting the slaves (this is not needed when running Locust distributed on a single machine, since the master host defaults to 127.0.0.1):' ''' 怎麼判定單詞? 1 不是字母的特殊字元作為分隔符分割字串 2 遍歷字串,取每個word 3 正則匹配 怎麼統計個數? 將wordlist的word和word的個數放入dict,排序 '''
# 找出所有不是字母的字元替換成統一的字元,spit()分割之後便是單詞 word_dict = {} #用於統計 word:個數 word_list = [] #用於存放所有單詞 for letter in art: if not letter.isalpha(): art = art.replace(letter,'-') word_list= art.split('-') #分隔單詞 x = word_list.count('') for i in range(x): #刪除多餘的空子串 word_list.remove('') print('所有的單詞列表:',word_list)
#正則表示式分隔 for letter in art: if not letter.isalpha(): special_set.add(letter) print('所有不是字母的字元:',special_set) pattern = '' for s in special_set: pattern+= s pattern = '['+pattern+']' word_list = re.split(pattern,art) #還要去除空格
# 遍歷字串,獲取每個word追加到wordlist word ='' word_list2 = [] for letter in art: if letter.isalpha(): #如果是字母,追加到word word += letter else: if word != '': word_list2.append(word) #不是字母,word不為空的話追加wordlist word = '' # word置空 print(word_list2)
# 正則表示式匹配單詞 pattern = r'[a-zA-Z]+' word_list3 = re.findall(pattern,art) #正則表示式就是精簡 print(word_list3)
最後的統計的程式碼:
#統計 for word in word_list: word_dict[word] = word_list.count(word) #key=單詞,value=單詞在list裡的count #取最多的前五個 print(sorted(word_dict.items(),key = lambda x:x[1],reverse=True)[0:5]) #dict根據value倒序,取前5個
the end!