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()  # 关闭文件

这个是根据我的需求写的循环十个文本并存入数据库的分词,统计了一万个词频

 
 
posted @ 2021-11-27 16:54  帅超007  阅读(995)  评论(0编辑  收藏  举报