# 導入擴展庫 import re # 正則表達式庫 import jieba # 結巴分詞 import jieba.posseg # 詞性獲取 import collections # 詞頻統計庫 import numpy # numpy數據處理庫 from PIL import Image # 圖像處理庫 import wordcloud # 詞雲展示庫 import matplotlib.pyplot as plt # 圖像展示庫(這里以plt代表庫的全稱) import utils # 主要功能自定義設置 userdict = '用戶詞典.txt' # 用戶詞典 StopWords = './data/stopword.txt' # 停用詞庫 number = 10000 # 統計個數 background = './a.png' # 詞頻背景 def test(): # 讀取文件 fn = open(Analysis_text, 'r', encoding='UTF-8') # 打開文件 string_data = fn.read() # 讀出整個文件 fn.close() # 文本預處理 pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定義正則表達式匹配模式(空格等) string_data = re.sub(pattern, '', string_data) # 將符合模式的字符去除 # 動態調整詞典 # jieba.suggest_freq('小小花', True) # True表示該詞不能被分割,False表示該詞能被分割 # 添加用戶詞典 # jieba.load_userdict(userdict) # 文本分詞 seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True) # 精確模式分詞+HMM object_list = [] # 去除停用詞(去掉一些意義不大的詞,如標點符號、嗯、啊等) with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile: stopwords = set(meaninglessFile.read().split('\n')) stopwords.add(' ') for word in seg_list_exact: # 循環讀出每個分詞 if word not in stopwords: # 如果不在去除詞庫中 object_list.append(word) # 分詞追加到列表 # 詞頻統計 word_counts = collections.Counter(object_list) # 對分詞做詞頻統計 word_counts_top = word_counts.most_common(number) # 獲取前number個最高頻的詞 # 輸出至工作台,並導出“詞頻.txt”文件 # print('\n詞語\t詞頻\t詞性') # print('——————————') # fileOut = open(Output, 'w', encoding='UTF-8') # 創建文本文件;若已存在,則進行覆蓋 # fileOut.write('詞語\t詞頻\t詞性\n') # fileOut.write('——————————\n') return word_counts_top if __name__ == '__main__': list = ['x_train'] # list = ['lvyou','tiyu','jiaoyu','shishang','keji','caijing','yule','lishi','chongwu','jiankang'] for v in list: Analysis_text = './xinwen/'+v+'.txt' # 分析文檔 Output = './cipin/'+v+'.txt' # 輸出文件 word_counts_top = test() for TopWord, Frequency in word_counts_top: # 獲取詞語和詞頻 print(TopWord + '\t', str(Frequency) + '\t',v) # 逐行輸出數據 print(type(Frequency)) # fileOut.write(TopWord + '\t' + str(Frequency) + '\t' + '\n') # 逐行寫入str格式數據 utils.insert(TopWord,Frequency,v) # fileOut.close() # 關閉文件
這個是根據我的需求寫的循環十個文本並存入數據庫的分詞,統計了一萬個詞頻