統計出文章重複詞語是進行文本分析的重要一步,從詞頻能夠概要的分析文章內容。
本文將講述如何用python3.6版本實現英文文章詞頻的統計,通過本文也可以對python字典的操作有一定的認識。
實現思路:1.輸入文章
2.建立用於詞頻計算的空字典
3.對文本的每一行計算詞頻
4.從字典中擷取資料對到列表中
5.對列表中的資料交換位置,並排序
6.輸出結果
注意事項:1.該代碼只能實現英文文章的詞頻統計,因為中文文章分詞還與其語意有關,需要用到中文分詞技術
2.網上下來的英文文章可能有一些不是utf-8編碼,並且文章中有一些字元包含一些格式符可能或導致解碼錯誤 (UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence)
代碼實現如下:
from string import punctuation#對文本的每一行計算詞頻的函數def processLine(line,wordCounts): #用空格替換標點符號 line=replacePunctuations(line) words = line.split() for word in words: if word in wordCounts: wordCounts[word]+=1 else: wordCounts[word]=1def replacePunctuations(line): for ch in line : #這裡直接用了string的標點符號庫。將標點符號替換成空格 if ch in punctuation: line=line.replace(ch," ") return linedef main(): infile=open("englishi.txt",'r') count=10 words=[] data=[] # 建立用於計算詞頻的空字典 wordCounts={} for line in infile: processLine(line.lower(), wordCounts)#這裡line.lower()的作用是將大寫替換成小寫,方便統計詞頻 #從字典中擷取資料對 pairs = list(wordCounts.items()) #列表中的資料對交換位置,資料對排序 items = [[x,y]for (y,x)in pairs] items.sort() #因為sort()函數是從小到大排列,所以range是從最後一項開始取 for i in range(len(items) - 1, len(items) - count - 1, -1): print(items[i][1] + "\t" + str(items[i][0])) data.append(items[i][0]) words.append(items[i][1]) infile.close()if __name__ == '__main__': main()