zoukankan      html  css  js  c++  java
  • 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()  # 关闭文件

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

     
     
  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/chaogehahaha/p/15612342.html
Copyright © 2011-2022 走看看