python绘制三国演义词云图

这篇具有很好参考价值的文章主要介绍了python绘制三国演义词云图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入模块

1.jieba的安装与使用

pip install jieba
conda install -c conda-forge jieba

Python2.X版

  • 全自动安装:easy_install jieba 或者 pip install jieba
  • 半自动安装:先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py install
  • 手动安装:将jieba目录放置于当前目录或者site-packages目录
  • 通过import jieba 来引用

Python3.X版

  • 目前master分支是只支持Python2.x 的

  • Python3.x 版本的分支也已经基本可用: https://github.com/fxsjy/jieba/tree/jieba3k

  •  git clone https://github.com/fxsjy/jieba.git
     git checkout jieba3k
     python setup.py install

        使用国人开发的jieba(结巴的拼音)库来进行智能分词,并加入空格,才能被wordcloud库所用。

        中文智能分词:‘西安全城下大雨’,应该分成‘西安’,‘全城’,‘下大雨’。而不是‘西’,‘安全’,‘城下’,‘大雨’

(1)jieba分词的三种模式:精确模式、全模式、搜索引擎模式

        - 精确模式:把文本精确的切分开,不存在冗余单词

        - 全模式:把文本中所有可能的词语都扫描出来,有冗余

        - 搜索引擎模式:在精确模式基础上,对长词再次切分

(2)jieba库常用函数

①分词

  • jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式
  • jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode
  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list

②词性标注 

  • 标注句子分词后每个词的词性,采用和ictclas兼容的标记法

  •   >>> import jieba.posseg as pseg
      >>> words = pseg.cut("我爱北京天安门")
      >>> for w in words:
      ...    print w.word, w.flag
      ...
      我 r
      爱 v
      北京 ns
      天安门 ns

2.词云wordcloud库的安装与使用

        词云(Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法。wordcloud是优秀的词云展示第三方库,wordcloud能够将一段文本变成一个词云。词云在我们的生活中经常能够看到,无论是中文的词云还是英文的词云。   

(1)wordcloud库的安装

pip install wordcloud 

conda install -c conda-forge wordcloud

(2)wordcloud库的使用

        wordcloud库把词云当做一个WordCloud对象,

        即wordcloud.WordCloud()是一个代表文本对应词云的对象,一个词云就是一个WordCloud对象。wordcloud库可以根据文本中词语出现的频率等一系列参数来绘制词云,在绘制词云时,词云的形状、尺寸、颜色包括字体都是可以设定的。

        由文本变为词云,wordcloud库大概做了4件事:1.wordcloud库以空格为分隔符,将文本分割成单词;2.wordcloud库会在文本中统计每一个单词出现的次数,单词出现次数越多,那么单词显示的词云效果的字体越大,反之则反。并且将只有1到2个字符的单词过滤掉;3.wordcloud库会根据统计单词出现的次数,为不同的单词配置显示的字号;4.进行布局。

一.实验步骤 

Step1)安装jieba库,wordcloud库

1.PyCharm环境安装

①安装jieba库

三国演义词云图片python代码,python,python,开发语言,中文分词

②安装wordcloud库

三国演义词云图片python代码,python,python,开发语言,中文分词

2.检查环境安装

①检查jieba库

三国演义词云图片python代码,python,python,开发语言,中文分词

 ②检查wordcloud库

三国演义词云图片python代码,python,python,开发语言,中文分词

Step2)导入jieba、wordcloud模块

# 导入模块
import jieba  # 分词
import wordcloud as wc  # 词云
import jieba.posseg as pseg

Step3)导入“三国演义.txt”文件

文件操作的步骤为:

三国演义词云图片python代码,python,python,开发语言,中文分词

为了简便操作,本实验选用with语句导入文件。

# 导入文件“三国演义”
with open(r'C:\Users\ROG\Desktop\三国演义.txt', 'r',encoding='utf-8') as f:
    tf = f.read()

Step4)对文件对象精选分词和词性标注

        由于jieba库中,jieba.lcut方法只能分词,不能标注词语的词性,本实验采用jieba库中pseg模块,利用pseg.lcut方法,完成分词并标注词性。

# 分词
seg_list = pseg.lcut(tf)

Step5)词频统计

        由于实验目的是为了将《三国演义》中常见人名进行去重后生成词云,所以,本实验对词语进行了筛选,分别进行了以下三种筛选操作:

三国演义词云图片python代码,python,python,开发语言,中文分词

①词语长度筛选

if len(word.word) >= 2

②词语词性筛选

查询jieba词性标注表:

三国演义词云图片python代码,python,python,开发语言,中文分词

word.flag == 'nrfg' or word.flag == 'nr'

 ③人名去重

        if word.word in ('玄德','玄德曰','刘皇叔','皇叔'):
            rword = '刘备'
        elif word.word in ('乱世奸雄','治世能臣','阿瞒','乱世枭雄','孟德','丞相'):
            rword = '曹操'
        elif word.word in ('碧眼小儿','紫髯鼠辈','孙仲谋'):
            rword = '孙权'
        elif word.word in ('诸葛亮','卧龙先生','伏龙','军师','孔明曰'):
            rword = '孔明'
        elif word.word in ('关公','云长'):
            rword = '关羽'
        else:
            rword = word.word

统计词频本实验采用字典get()方法

counts[rword] = counts.get(rword,0) + 1

词频统计完整代码:

# 词频统计
counts = {}
for word in seg_list:
    if len(word.word) >= 2 and ( word.flag == 'nrfg' or word.flag == 'nr' ):
        if word.word in ('玄德','玄德曰','刘皇叔','皇叔'):
            rword = '刘备'
        elif word.word in ('乱世奸雄','治世能臣','阿瞒','乱世枭雄','孟德','丞相'):
            rword = '曹操'
        elif word.word in ('碧眼小儿','紫髯鼠辈','孙仲谋'):
            rword = '孙权'
        elif word.word in ('诸葛亮','卧龙先生','伏龙','军师','孔明曰'):
            rword = '孔明'
        elif word.word in ('关公','云长'):
            rword = '关羽'
        else:
            rword = word.word
        counts[rword] = counts.get(rword,0) + 1

Step6)词频排序

        本实验采用列表sort()函数排序,sort() 函数用于对原列表进行排序,key参数采用匿名函数lambda x:x[1],reverse参数选择True。

# 词频排序
items = list(counts.items())
items.sort(key= lambda x:x[1],reverse=True)

Step7)输出词频前20个人名

# 输出词频前20个人名
for i in range(20):
    word, count = items[i]
    print("{}:{}".format(word,count))

Step8)绘制词云图

        本实验采用wordcloud库WordCloud方法绘制词云图,参数设置如下:

        图片背景颜色:background_color='white'

        图片宽:width=2000

        图片高:height=1600

        最多显示词语数量:max_words=1000

        字体:font_path="C:/Windows/Fonts/simhei.ttf"

        采用wordcloud库generate_from_frequencies方法根据词频字典,依据词频数,绘制词云图。

        将图片保存至C:/Users/ROG/Desktop,命名为:三国演义词云图.jpg

        绘制词云图完整代码如下:

# 绘制词云图
w = wc.WordCloud( background_color='white',
                  width=2000 ,
                  height=1600 ,
                  max_words=1000 ,
                  font_path="C:/Windows/Fonts/simhei.ttf"  )
w.generate_from_frequencies(counts)

# 保存图片
w.to_file("C:/Users/ROG/Desktop/三国演义词云图.jpg")

全过程代码如下:

# 导入模块
import jieba  # 分词
import wordcloud as wc  # 词云
import jieba.posseg as pseg

# 导入文件“三国演义”
with open(r'C:\Users\ROG\Desktop\三国演义.txt', 'r',encoding='utf-8') as f:
    tf = f.read()

# 分词
seg_list = pseg.lcut(tf)

# 词频统计
counts = {}
for word in seg_list:
    if len(word.word) >= 2 and ( word.flag == 'nrfg' or word.flag == 'nr' ):
        if word.word in ('玄德','玄德曰','刘皇叔','皇叔'):
            rword = '刘备'
        elif word.word in ('乱世奸雄','治世能臣','阿瞒','乱世枭雄','孟德','丞相'):
            rword = '曹操'
        elif word.word in ('碧眼小儿','紫髯鼠辈','孙仲谋'):
            rword = '孙权'
        elif word.word in ('诸葛亮','卧龙先生','伏龙','军师','孔明曰'):
            rword = '孔明'
        elif word.word in ('关公','云长'):
            rword = '关羽'
        else:
            rword = word.word
        counts[rword] = counts.get(rword,0) + 1


# 词频排序
items = list(counts.items())
items.sort(key= lambda x:x[1],reverse=True)

# 输出词频前20个人名
for i in range(20):
    word, count = items[i]
    print("{}:{}".format(word,count))

# 绘制词云图
w = wc.WordCloud( background_color='white',
                  width=2000 ,
                  height=1600 ,
                  max_words=1000 ,
                  font_path="C:/Windows/Fonts/simhei.ttf"  )
w.generate_from_frequencies(counts)

# 保存图片
w.to_file("C:/Users/ROG/Desktop/三国演义词云图.jpg")

二.数据记录与处理

1.词频排名前20的人名

三国演义词云图片python代码,python,python,开发语言,中文分词

2.三国演义人名词云图

三国演义词云图片python代码,python,python,开发语言,中文分词

三.结果分析

           根据词云图结合词频统计表分析可知:

        《三国演义》中出现频率最高的人物是刘备,出乎很多资深读者意料地,刘皇叔力压「三绝」排名榜首。其次是孔明,从出山后就是演义核心看点,曹刘死后一段故事的当然主角。紧接着是曹操,乱世枭雄,天下英雄谁敌手?三国演义前半部分,讲的就是曹刘的故事。

        由此也可以反映出作者罗贯中“尊刘抑曹”的态度。“尊刘”的原因是刘备代表汉朝皇室正统,反映了广大人民渴望统一,反对分裂、拥护仁政,反对暴政的根本要求;他把诸葛亮塑造为智慧的化身,极大地鼓舞了人们对自身能力的信心,促使人们在斗争实践中不断丰富和发展自己的智慧;

四.实验改进 

Step1)提高分词精确度

        可以发现,在词频统计时,程序把“魏兵”、“曹兵”误认为人名,程序精确度还需进一步提升。

        通过建立去除词库,利用遍历的思想,去除错误识别词。

# 去除停用词
list_tf2 = tf2.split()
for i in list_tf2:
    del(counts[i])

# 词频排序
items = list(counts.items())
items.sort(key= lambda x:x[1],reverse=True)

        去除后的词频统计结果为:

三国演义词云图片python代码,python,python,开发语言,中文分词三国演义词云图片python代码,python,python,开发语言,中文分词

可以看出,去除后的词频统计均为人名。

Step2)改变词云图形状

导入模块

import numpy as np
from PIL import Image

读取底板图形文件:

pic = np.array(Image.open('C:/Users/ROG/Desktop/图片3.png'))

调整词云图参数:

w = wc.WordCloud( background_color='white',
                  mask=pic,
                  width=2000 ,
                  height=1600 ,
                  max_words=1000 ,
                  font_path="C:/Windows/Fonts/simhei.ttf"  )
w.generate_from_frequencies(counts)

改变形状后的词云图展示:

三国演义词云图片python代码,python,python,开发语言,中文分词

三国演义词云图片python代码,python,python,开发语言,中文分词

三国演义词云图片python代码,python,python,开发语言,中文分词

三国演义词云图片python代码,python,python,开发语言,中文分词文章来源地址https://www.toymoban.com/news/detail-764720.html

到了这里,关于python绘制三国演义词云图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python绘制词云图

    作者简介 :一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。 座右铭 :未来是不可确定的,慢慢来是最快的。 个人主页 :极客李华-CSDN博客 合作方式 :私聊+ 这个专栏内容 :BAT等大厂常见后端java开发面试题详细讲解,更新数目10

    2024年02月12日
    浏览(47)
  • Python绘制基础词云图

    Python的词云制作。 词云介绍: 词云是对文本进行可视化呈现的一种方式, 词云出现的次数越多,字体越大,颜色越醒目, 可以通过词云快速获取文本的主要内容 给大家看一下词云绘制的效果:     用来绘制词云的第三方库:wordcloud,在导入前需要下载。 在绘制之前需要先创

    2024年02月04日
    浏览(75)
  • 使用Python绘制各种方法的词云图

     这样一张极其简单的词云图算是做好了,当然我们可以给它添加一个背景图片,例如下面这张图片,  主要需要添加的代码如下所示  除此之外,还有另外一个模块 stylecloud 绘制出来的词云图也是非常酷炫的,其中我们主要是用到下面这个函数  最后我们来看一下如何用

    2024年02月12日
    浏览(41)
  • Python(wordcloud):根据文本数据(.txt文件)绘制词云图

    本文将介绍如何利用python来根据文本数据(.txt文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。 1、安装相关的库 2、 导入相关的库 3、 相关库的介绍 jieba: 结巴分词库,一个中文分词库。由于中文文本的每个汉字都是连续书写的,

    2024年04月16日
    浏览(58)
  • Python(wordcloud):根据词频信息(xlsx、csv文件)绘制词云图

    本文将介绍如何用python根据词频信息(xlsx、csv文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。 1、安装相关的库 2、导入相关的库 1、文件读取 本文使用的数据集是excel文件(后缀名是.xlsx),该文件包含2个字段:以及对应的

    2024年01月18日
    浏览(36)
  • 使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

    这篇博客将介绍如何使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓。 使用Python绘制端午dragboat消消乐 美轮美奂的界面效果 选了我最爱的小林老师的漫画图~ 纵有千种风情,更与谁人说。 端午粽子原始图VS素描图: 端午粽子

    2024年02月08日
    浏览(47)
  • 解决:pycharm绘制词云-中文会被显示成方框乱码

    目录 一.问题1描述 二. 问题1的原因及解决办法 三.问题2描述 四.问题2原因及解决办法        利用大数据进行文本分析,对文本进行处理后,希望直观的将数据绘制成图云查看分词效果,但整个词云全为方框乱码: 此时绘制词云的代码为:           wordcloud默认是不支持显

    2024年02月16日
    浏览(44)
  • 读取csv数据到词云图并保存图片

    要用的第三方库 pyecharts snap_selenium pandas 用snap_selenium中的snapshot,但是snapshot,只支持Chrome,和Safari 而我用的edge,但是我有msedgedriver,以前写selenium爬虫的时候,驱动edge。 所以,我决定偷梁换柱,把snapshot的源码中的Chrome给改了。 😆😆😆😆 看源码 偷梁换柱 可以驱动,小操

    2024年02月06日
    浏览(71)
  • 论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)

    需求 论文中对多分类评价需要 混淆矩阵已获得,需要可视化 给出数据 混淆矩阵的定义以及如何读图不再描述,这里仅给出绘制方法 给出数据:8分类任务 实验代码 给出所需的包 numpy和matplotlib 定义分类标签 这里可以修改为自己所需的标签以及分类任务,如二分类只需要 两

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包