词频分析与词云图设计报
告
课程名称:
学生姓名:
班级学号:
实施时间:
教师签字:
填报时间:
目录
一、选题的意义和目的 ...................................................................................................................3
二、所用第三方库概述 ...................................................................................................................3
2.1 jieba 中分分词概述 ....................................................................................................................3
2.2 matplotlib 绘图概述....................................................................................................................3
2.3 wordcloud 词云绘制概述 ...........................................................................................................3
2.4 networkx 网络图绘制概述 .........................................................................................................3
三、程序整体结构分析 ...................................................................................................................4
3.1 词云图形整体代码分析 ............................................................................................................4
3.2 人物社交关系网络图代码整体分析 ........................................................................................4
四、详细代码与功能阐述 ...............................................................................................................4
五、效果演示 .................................................................................................................................11
5.1 词频 .........................................................................................................................................11
5.2 词云 .........................................................................................................................................12
5.3 关系图 .....................................................................................................................................12
六、设计体会 .................................................................................................................................12
6.1 总结 ..........................................................................................................................................12
6.2 存在的问题与展望 ..................................................................................................................13
七、参考文献 .................................................................................................................................13
一、选题的意义和目的
意义:此选题利用分词和词云技术将词频、人物关系可视化,并用图片的形式展现,是的读
者可以根据可视化后的人物关系与词云快速的了解到人物关系以及人物之间发生的事件,使
得读者能够迅速的进入到故事情节当中。
目的:使用 jieba 对于文章进行分词,利用获得的分词进行词频统计并保存。使用 wordcloud
和 networkx 生成词云和人物关系图并保存。
二、所用第三方库概述
2.1 jieba 中分分词概述
NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽
视的力量便是 jieba 分词,号称要做最好的 Python 中文分词组件。jieba 在开源社区的受
欢迎程度非常之高。
jieba 项目目前的 github star 数已经达到 24k,其他热门分词组件像 HanLP star 数
20k、ansj_seg star 数 5.6k、pkuseg-python star 数 5k。可见 jieba 已经稳居中文分词领
域 c 位。jieba 的主要功能是做中文分词,可以进行简单分词、并行分词、命令行分词,当
然它的功能不限于此,目前还支持关键词提取、词性标注、词位置查询等。
2.2 matplotlib 绘图概述
Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是
Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与
NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以
很快的熟悉它。Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI
工具包(比如 PyQt,WxPython、Tkinter)在应用程序中嵌入图形。与此同时,它也支持以
脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用。
2.3 wordcloud 词云绘制概述
词云 (Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种
常见的文本挖掘的方法。wordcloud 是优秀的词云展示是根据文本中的词频,对内容进行可
视化的汇总,可以用来绘制用户画像。以词语为基本单位,通过图形可视化的方式,更加直
观和艺术的展示文本,
2.4 networkx 网络图绘制概述
networkx 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复
杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
利用 networkx 可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经
典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等。
networkx 支持创建简单无向图、有向图和多重图(multigraph);内置许多标准的图论
算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。
networkx 以图(graph)为基本数据结构。图既可以由程序生成,也可以来自在线数据
源,还可以从文件与数据库中读取。
三、程序整体结构分析
3.1 词云图形整体代码分析
首先通过 jieba 库对 read_file 函数读入的文本进行分词,去除长度为 1 的词,这里先直
接输出词频。通过第一次输出的词频,在 stop_words 里添加虚词,并整理指向一个人物的
所有称呼在 same_word 里体现,顺便为之后的人物关系网络任务整理好主要人物的名字(不
包含别称)。接着第二次输出,统计词频到字典,送到用 cloud_figure_config 配置好的词云
图里,用 make_cloud 输出一个 png 词云图文件。
3.2 人物社交关系网络图代码整体分析
由于用换行符分割后的文本太短,因此结合文本情况用换行符和五个空格键分割,得到
list_section。用 read_name_file 函数得到主要任务名字。编写代码用函数 analyze_relationship
输出基于共现关系的人物关系,将两两人物共现次数输出到字典,接着转化为列表,送到配
置好线条,点,图片格式的基于 networkx 的构建图网络函数 draw 中,生成人物社交关系网
络图。
四、详细代码与功能阐述
1. import jieba
2. import matplotlib.pyplot as plt
3. import matplotlib.image as mpimg
4. import networkx as nx
5. from wordcloud import WordCloud
6. import random
7. import sys
8.
9. FILE_PATH = '三国演义.txt'
10. STOPWORDS_PATH = 'stop_words.txt'
11. OUTPUT_FREQ_WORD_NUM = 500
12. NAME_FILE_PATH = 'name.txt'
13. MAX_NODE_SIZE = 4000
14. MIN_NODE_SIZE = 600
导入所需要的库,配置文件路径,节点尺寸和词云上限。
1. def read_file():
2. try:
3. file = open(FILE_PATH, mode='r', encoding='utf-8')
4. except OSError:
5. print('打开待处理文件失败')
6. sys. exit()
7. with file: