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

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

     
     
  • 相关阅读:
    property可以声明得位置
    实例变量可以声明得位置
    void *与id类型的相互转换
    对象指针
    __weak修饰符
    __strong修饰符
    Objective-C中的自动释放池
    习题6-8 统计一行文本的单词个数 (15分)
    练习4-3 求给定精度的简单交错序列部分和 (15分)
    习题3-5 三角形判断 (15分)
  • 原文地址:https://www.cnblogs.com/chaogehahaha/p/15612342.html
Copyright © 2011-2022 走看看