美文网首页
习题8:二.4 原题是英文词频统计,现写一个中文词频统计

习题8:二.4 原题是英文词频统计,现写一个中文词频统计

作者: 小伙在杭州 | 来源:发表于2019-04-02 11:25 被阅读0次

    统计《大江大河》中人物出场次数的前30位,再生成人物姓名的词云

    一、步骤

    1.主程序 \color{rgb(0,0,128)}{output} 程序的介绍-----\color{rgb(30,104,139)}{main()}
    2.读取文本 \color{rgb(0,0,128)}{output} 文本的str(ch_f )-----\color{rgb(30,104,139)}{getFile()}
    3.将文本分割成列表 \color{rgb(0,0,128)}{output} 文本list(ls_f)-----\color{rgb(30,104,139)}{ls_File()}
    4.获取键为word,值为次数的dict \color{rgb(0,0,128)}{output} 字典的list形式(items)-----\color{rgb(30,104,139)}{getWordCount()}
    5.显示次数为前30的word \color{rgb(0,0,128)}{output} word,count -----\color{rgb(30,104,139)}{showResult()}
    6.将文本列表输出成只有人物姓名的字符串 \color{rgb(0,0,128)}{output} wc_f-----\color{rgb(30,104,139)}{wcFile()}
    7.生成词云

    二、程序流程图
    程序结构图.png
    三、编写程序
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    def main():  #主程序
        print("统计大江大河中人物出场次数前30,并生成所有人物的词云。")
        ch_f = getFile()
        ls_f = lsFile(ch_f) 
        name = personName()
        items = getWordCount(ls_f,name)  
        wc_f = wcFile(ls_f,name)
        showResult(items)
        wordCloud(wc_f)  #词云
    
    def getFile():  #获取字符串类型的文本
        a = open('D:\\Python练习\\计算机二级教材(python)\\大江大河.txt','r',encoding = 'utf-8')
        ch_f = a.read()
        a.close()
        return ch_f
    
    def lsFile(ch_f):  #将str以人物名字分割成list
        jieba.load_userdict('D:\\Python练习\\计算机二级教材(python)\\人物名字字典.txt')
        ls_f = jieba.lcut(ch_f)
        return ls_f
    
    def personName():  #将自定义分词字典中的中文提取到列表,也就是把人物名全部添加到列表
        a = open('D:\\Python练习\\计算机二级教材(python)\\人物名字字典.txt','r',encoding = 'utf-8')
        b = a.read().split()
        a.close()
        name = []
        for i in b:
            if '\u4e00' <= i <= '\u9fff':
                name.append(i)
        return name
    
    def getWordCount(ls_f,name):  #获取指定词名和出现次数,并以降序列表形式输出
        counts = {}  #创建空字典
        for word in ls_f:
            for n in name:
                if word == n:
                    counts[word] = counts.get(word,0) + 1
                else:
                    continue
        items = list(counts.items())  #将counts字典转换成列表
        items.sort(key = lambda x:x[1],reverse = True)  #以列表的第二项降序排序
        return items
    
    def showResult(items):
        for i in range(30):  
            word,count = items[i]
            print("{:<15}{:>10}".format(word,count))
    
    def wcFile(ls_f,name):
        f = []
        for i in ls_f:
            for n in name:
                if i == n:
                    f.append(i)
                else:
                    continue
        wc_f = ' '.join(f)
        return wc_f
    
    def wordCloud(wc_f):
        fontpath = 'STHUPO.TTF'
        wc = WordCloud(font_path = fontpath,
                       scale = 16, #值越大字体越清晰
                       background_color = 'white', #背景板颜色
                       random_state = 2, #随机样式,
                       collocations = False,)  #去除重复单词
        wc.generate(wc_f)  
        plt.figure(dpi=100) #通过这里可以放大或缩小
        plt.imshow(wc,interpolation='catrom',vmax=1000)
        plt.axis("off")
        plt.show()  #显示图片
    
    main()
    

    输出结果:
    宋运辉 470
    雷东宝 404
    梁思申 250
    宋运萍 119
    杨巡 83
    程开颜 64
    寻建祥 51
    陈平原 48
    水书记 42
    四宝 41
    老书记 39
    东宝 37
    雷母 25
    韦春红 24
    虞山卿 23
    徐县长 22
    小辉 20
    老猢狲 19
    宋季山 18
    红伟 18
    忠富 18
    雷士根 13
    正明 4
    四眼会计 3
    雷书记 3
    程厂长 2
    雷忠富 2
    程母 1
    士根媳妇 1
    雷正明 1


    Figure_1.png

    相关文章

      网友评论

          本文标题:习题8:二.4 原题是英文词频统计,现写一个中文词频统计

          本文链接:https://www.haomeiwen.com/subject/euymbqtx.html