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


去除非中文字符 

 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')      #寫入處理后的數據,每行以空格隔開

在打開文本文件時,如果刪掉這兩個條件

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

解決辦法:

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

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

 

 這樣就可以正常打開文件了。

去除停用詞、統計詞頻

 首先下載一個停用詞的文本文件。可以在GitHub上下載。

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

2.然后根據停用詞表,對分詞后的文本去除停用詞。

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

 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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM