去除非中文字符
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))