統計文章詞頻(python實現)
阿新 • • 發佈:2019-02-19
統計出文章重複詞語是進行文字分析的重要一步,從詞頻能夠概要的分析文章內容。
本文將講述如何用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]=1 def replacePunctuations(line): for ch in line : #這裡直接用了string的標點符號庫。將標點符號替換成空格 if ch in punctuation: line=line.replace(ch," ") return line def 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()