Python中文分词及词频统计
# 导入扩展库 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() # 关闭文件
这个是根据我的需求写的循环十个文本并存入数据库的分词,统计了一万个词频