中文文本處理——去除非中文字符、去除停用詞、統計詞頻

去除非中文字符 

 1 path1 = 'path1.txt'     #打開須要處理的txt文件
 2 path2 = 'path2.txt'   #儲存處理後的數據
 3 f = open(path1, 'r', encoding= 'utf-8', errors= 'ignore')  #將文本格式編碼爲utf-8,防止編碼錯誤
 4 fw = open(path2,'w', encoding='utf-8',errors= 'ignore')  5 for line in f:       #逐行處理
 6     constr = ''      #記錄每行處理後的數據
 7     for uchar in line:  8         if uchar >= u'\u4e00' and uchar <= u'\u9fa5':    #是中文字符
 9             if uchar != ' ':        #去除空格
10                 constr += uchar       11     fw.write(constr+'\n')      #寫入處理後的數據,每行以空格隔開

在打開文本文件時,若是刪掉這兩個條件python

encoding= 'utf-8', errors= 'ignore'
可能會出現如下報錯。

解決辦法:

首先,保存(或者另存爲)文件時,將編碼一項選擇utf-8格式。而後打開文件時,寫入時代碼寫爲編碼

f = open(path1, 'r', encoding= 'utf-8', errors= 'ignore')
 
 

 

 這樣就能夠正常打開文件了。spa

去除停用詞、統計詞頻

 首先下載一個停用詞的文本文件。能夠在GitHub上下載。code

1.首先使用jieba分詞對已去掉非中文的數據進行分詞。orm

2.而後根據停用詞表,對分詞後的文本去除停用詞。blog

3.統計詞頻,輸出頻率最高的前三十個ip

 1 import jieba  2 import jieba as jieba  3 
 4 path2 = "path2.txt"    #打開已去除掉非中文的文本文件
 5 path3 = "D:/stopwords_u.txt"    #停用詞txt
 6 txt = open(path2, encoding="utf-8").read()  #加載待處理數據文件
 7 stopwords = [line.strip() for line in open(path2, encoding="utf-8").readlines()] #加載停用詞  8 words = jieba.lcut(txt)     #分詞
 9 counts = {}                 #計數{word,frequency}
10 for word in words: 11     if word not in stopwords:          #不在停用詞表中
12         if len(word) == 1:        #長度爲1的話,不儲存 13             continue
14         else:                #不是停用詞且詞長度不爲1 15             counts[word] = counts.get(word, 0) + 1
16 
17 items = list(counts.items()) 18 items.sort(key=lambda x: x[1], reverse=True) 19 for i in range(30):            #輸出詞頻統計前30項 20     word, count = items[i] 21     print("{:<10}{:>7}".format(word, count))
相關文章
相關標籤/搜索