zoukankan      html  css  js  c++  java
  • jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)

    py库: jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)

    先来个最简单的:

    # 查找列表中出现次数最多的值
    ls = [1, 2, 3, 4, 5, 6, 1, 2, 1, 2, 1, 1]
    ls = ["呵呵", "呵呵", "呵呵", "哈哈", "哈哈", "拉拉"]
    y = max(set(ls), key=ls.count)
    print(y)

     

    一、字频统计:  ( collections 库)  2017-10-27

    这个库是python 自带的

    http://www.cnblogs.com/George1994/p/7204880.html  Python collections模块总结

    https://www.imooc.com/video/16366  counter的视频  2018-11-26

    先练习一下方法的使用: collections.Counter  (这个库里只有Counter这个类比较好用)

    from collections import Counter
    cnt = Counter()
    for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
        cnt[word] += 1
    print(cnt.most_common())   #[('blue', 3), ('red', 2), ('green', 1)]
    
    cnt = Counter()
    for char in 'hellllooeooo':
        cnt[char] += 1
    print(cnt.most_common())   #[('o', 5), ('l', 4), ('e', 2), ('h', 1)]
    #for key, val in cnt.most_common():
    #    print(key, val)
    复制代码
     
    
    1、随机生成100个英文字母,字频统计:
    
    复制代码
    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    import random
    import collections
    import string
    
    #str1 = '赵钱孙李周吴郑王'
    str1 = string.ascii_uppercase  # 大写 ABCDEFGHIJKLMNOPQRSTUVWXYZ
    #str1 = string.ascii_lowercase # 小写 abcdefghijklmnopqrstuvwxyz
    #str1 = string.ascii_letters   # 大写和小写 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    mylist = [random.choice(str1) for i in range(100)]
    mycount = collections.Counter(mylist)
    for key, val in mycount.most_common(10):  # 有序
        print(key, val)
    复制代码
     
    
    2、读取文本文件,字频统计:  (统计李白981首诗中,最常出现的10个字)
    
    复制代码
    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    import collections
    
    # 读取文本文件,把所有的汉字拆成一个list
    f = open("jieba_text.txt", 'r', encoding='utf8')  # 打开文件,并读取要处理的大段文字
    txt1 = f.read()
    txt1 = txt1.replace('
    ', '')  # 删掉换行符
    txt1 = txt1.replace('', '')  # 删掉逗号
    txt1 = txt1.replace('', '')  # 删掉句号
    mylist = list(txt1)
    mycount = collections.Counter(mylist)
    for key, val in mycount.most_common(10):  # 有序(返回前10个)
        print(key, val)

    一个小练习:扒取李白诗词981篇,进行词频统计:

    前一阵不是有清华附小的小学生论文《大数据分析帮你进一步认识苏轼》么,其中有对苏轼的词频统计。

    为了赶上小学生的水平,刚才做了个小练习,想统计一下李白的981首诗中的每个字的出现频率。代码就不放上来了。写的不太好,但效果差不多做出来了。 

    1、http://www.shicimingju.com/chaxun/zuozhe/1.html   这个页面有李白诗词,但是不完整,所以要进入诗词标题的链接的下一级页面,扒取完整诗词。以及翻页后的页面,再进行扒取,然后存于txt文件

    2、用本页最上面的单字字频统计的代码,统计出李白诗词中,最常见的几个字的次序如下: 不人天云山风月白一何

     

    二、字频统计:    这个没有用第三方库。  2017-10-17

    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    def histogram(s, old_d):
        d = old_d
        for c in s:
            d[c] = d.get(c, 0) + 1
        return d
    
    
    # 读取文件,拆成行 list格式的
    f = open("jieba_text.txt", 'r', encoding='utf8')  # 从文件中读取要处理的大段文字
    lines = []
    for line in f:
        rs = line.rstrip('
    ')  # 删掉换行符
        lines.append(rs)
    print(lines)
    
    # 把行拆成单字,拆成dict格式的
    myWords = dict()
    for i in range(len(lines)):
        myWords = histogram(lines[i], myWords)
    print(myWords)
    
    # myWords={'望': 3, '庐': 1, '山': 9, '瀑': 2, '布': 2, '日': 4, '照': 21, '香': 12, '炉': 1, '生': 2, '紫': 1, '烟': 3}
    a = sorted(myWords.items(), key=lambda item: item[1], reverse=True)  # 按值排序
    print(dict(a))  # 转化为dict

    http://www.cnblogs.com/whaben/p/6495702.html  python 列表排序方法sort、sorted技巧篇

    http://www.cnblogs.com/dylan-wu/p/6041465.html  python的sorted函数对字典按key排序和按value排序

    http://blog.csdn.net/u013679490/article/details/54426324  根据字典中K/V排序

    http://blog.csdn.net/sxingming/article/details/51352807  python 如何反转序列

     

    三、中文分词:    ( jieba 库 )   这个可以处理词汇

    http://www.jianshu.com/p/22cdbbeeb778  jieba的教程

    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    import jieba
    import jieba.analyse
    
    # text = "故宫的著名景点包括乾清宫、太和殿和午门等。其中乾清宫非常精美,午门是紫禁城的正门,午门居中向阳。"
    text = ''
    #jieba.load_userdict("jieba_dict.txt")  # 用户自定义词典 (用户可以自己在这个文本文件中,写好自定制词汇)
    f = open('jieba_text.txt', 'r', encoding='utf8')  # 要进行分词处理的文本文件 (统统按照utf8文件去处理,省得麻烦)
    lines = f.readlines()
    for line in lines:
        text += line
    
    # seg_list = jieba.cut(text, cut_all=False)  #精确模式(默认是精确模式)
    seg_list = jieba.cut(text)  # 精确模式(默认是精确模式)
    print("[精确模式]: ", "/ ".join(seg_list))
    
    # seg_list2 = jieba.cut(text, cut_all=True)    #全模式
    # print("[全模式]: ", "/ ".join(seg_list2))
    
    # seg_list3 = jieba.cut_for_search(text)    #搜索引擎模式
    # print("[搜索引擎模式]: ","/ ".join(seg_list3))
    
    tags = jieba.analyse.extract_tags(text, topK=5)
    print("关键词:    ", " / ".join(tags))

     

    四、词云:    ( WordCloud 库 ) 

    在安装 这个库的时候不是很顺利。所以去这个网站下载.whl文件。下载后暂时保存在c:/Python3/Scripts/wordcloud‑1.3.2‑cp36‑cp36m‑win32.whl

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

    python pip.exe install wordcloud‑1.3.2‑cp36‑cp36m‑win32.whl

    1、例子,最简单词云:

    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    import jieba
    
    txt1 = open('word.txt', 'r', encoding='utf8').read()    # word.txt,随便放点中文文章
    words_ls = jieba.cut(txt1, cut_all=True)
    words_split = " ".join(words_ls)
    
    wc = WordCloud()    # 字体这里有个坑,一定要设这个参数。否则会显示一堆小方框wc.font_path="simhei.ttf"   # 黑体
    my_wordcloud = wc.generate(words_split)
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    
    wc.to_file('zzz.png') # 保存图片文件
    复制代码
     
    
    2、例子,带遮罩的词云:
    
    复制代码
    # -*- coding: utf-8 -*-
    # coding=utf-8
    
    import matplotlib.pyplot as plt
    import wordcloud
    import jieba
    
    txt1 = open('word.txt', 'r', encoding='utf8').read()
    words_ls = jieba.cut(txt1, cut_all=True)
    words_split = " ".join(words_ls)
    
    # 参数都可以注释掉,但必须设置font_path
    wc = wordcloud.WordCloud(
        width=800,
        height=600,
        background_color="#ffffff",  # 设置背景颜色
        max_words=500,  # 词的最大数(默认为200)
        max_font_size=60,  # 最大字体尺寸
        min_font_size=10,  # 最小字体尺寸(默认为4)
        colormap='bone',  # string or matplotlib colormap, default="viridis"
        random_state=10,  # 设置有多少种随机生成状态,即有多少种配色方案
        mask=plt.imread("mask2.gif"),  # 读取遮罩图片!!
        font_path='simhei.ttf'
    )
    my_wordcloud = wc.generate(words_split)
    
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    wc.to_file('zzz.png')  # 保存图片文件

    (参数说明)

    font_path:

    msyh.ttf   微软雅黑
    msyhbd.ttf   微软雅黑 粗体
    simsun.ttc   宋体
    simhei.ttf   黑体

    colormap:

    autumn  从红色平滑变化到橙色,然后到黄色。
    bone  具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
    cool  包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
    copper  从黑色平滑过渡到亮铜色。
    flag  包含红、白、绿和黑色。
    gray  返回线性灰度色图。
    hot   从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
    hsv   从红,变化到黄、绿、青绿、品红,返回到红。
    jet   从蓝到红,中间经过青绿、黄和橙色。它是hsv色图的一个变异。
    line   产生由坐标轴的ColorOrder属性产生的颜色以及灰的背景色的色图。
    pink   柔和的桃红色,它提供了灰度图的深褐色调着色。
    prism   重复这六种颜色:红、橙、黄、绿、蓝和紫色。
    spring   包含品红和黄的阴影颜色。
    summer   包含绿和黄的阴影颜色。
    white   全白的单色色图。
    winter   包含蓝和绿的阴影色。

     http://blog.csdn.net/doiido/article/details/43675465  Python open() 函数 文件处理  (讲的是 open('zz.txt',)   函数的使用)

     

  • 相关阅读:
    1111实验二 作业调度模拟实验
    1006实验一实验报告
    0909对操作系统的认识
    南阳OJ-138 找球号(二)(hash表应用)
    南阳OJ-38 布线问题(最小生成树应用_prim)
    插入排序
    南阳OJ-756 重建二叉树(二叉树的中序遍历和后序遍历求先序遍历)
    南阳OJ-63 小猴子下落(数据结构-二叉树)
    UVA OJ-11095 Maximum Product(暴力求解法)
    UVA OJ-725 Division (暴力求解法)
  • 原文地址:https://www.cnblogs.com/ltb6w/p/10889131.html
Copyright © 2011-2022 走看看