一、设计要求
功能点及设计需求
该项目的设计旨在生成《人民的名义》文本的词云和人物关系图,通过分析文本和可视化结果,展示主要人物的关联和词频情况。具体功能点和设计需求如下:
1.文本读取与处理:
- 读取文本文件:从指定路径读取《人民的名义》文本内容,确保文件编码为
gbk
。 - 读取停用词文件:从指定路径读取停用词列表,文件编码为
utf-8
。
2.中文分词:
- 分词处理:使用
jieba
对读取的文本进行分词,处理中文字符以生成单词列表。 - 去除停用词:过滤掉单词列表中的停用词,确保词云中只包含有效信息。
3.词云生成:
- 生成词云:利用 WordCloud 库生成词云图,设置词云图的字体、尺寸和背景颜色,确保中文字符显示正确。
- 词云显示:使用 matplotlib 显示生成的词云图,图像清晰,标签正确。
4.人物关系图绘制:
- 创建无向图:使用 networkx 创建人物关系的无向图,定义主要人物为节点。
- 添加关系边:假设每个人物之间都有直接关系,添加边连接所有节点。
- 图形绘制:使用 matplotlib 绘制人物关系图,设置节点位置、颜色、大小和标签,确保图形美观且易于理解。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
二、设计思路
设计目的是生成一部电视剧《人民的名义》的词云和人物关系图。代码主要分为三个部分:生成词云、绘制人物关系图和主程序调用。以下是详细的设计思路分析:
1. 导入必要的库
import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba import networkx as nx
matplotlib.pyplot
:用于绘制词云和人物关系图。WordCloud
:用于生成词云。jieba
:用于中文分词。networkx
:用于创建和绘制人物关系图。
2. 配置 Matplotlib 以正常显示中文和负号
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False
font.sans-serif
设置为SimHei
(黑体),确保能够显示中文字符。axes.unicode_minus
设置为False
,确保负号可以正常显示。
3. 生成词云的函数
功能描述:读取文本文件并生成词云。
def generate_wordcloud(text_file, stopwords_file): # 读取文本文件 with open(text_file, 'r', encoding='gbk') as f: text = f.read() # 代码略(至少十行)... # 代码略(至少十行)... # 去除停用词 words = [word for word in words if word not in stopwords] # 代码略(至少十行)... # 代码略(至少十行)... # 显示词云 plt.figure(figsize=(10, 5)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show()
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
- 读取文本文件:使用
open
函数读取指定编码的文本文件内容。 - 读取停用词文件:读取停用词文件并将其转换为集合。
- 分词:使用
jieba.lcut
对文本进行分词。 - 去除停用词:过滤掉停用词。
- 生成词云:使用
WordCloud
类生成词云,并设置中文字体文件路径、宽度、高度和背景颜色。 - 显示词云:使用
matplotlib
显示词云。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
4. 绘制人物关系图的函数
功能描述:绘制电视剧人物之间的关系图。
def plot_character_graph(characters): # 创建无向图 G = nx.Graph() # 代码略(至少十行)... # 代码略(至少十行)... # 绘制图形 plt.figure(figsize=(10, 8)) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=3000, font_size=12, font_weight='bold', edge_color='gray') plt.show()
- 创建无向图:使用
networkx
创建无向图G
。 - 添加节点:将每个人物作为节点添加到图中。
- 添加边:假设每个人物之间都有直接关系,添加边。
- 绘制图形:使用
matplotlib
绘制图形,设置节点位置、标签、颜色、大小、字体和边颜色。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
5. 主程序调用
功能描述:读取文件路径和人物列表,生成词云和人物关系图。
# 文件路径 text_file = '人民的名义.txt' stopwords_file = 'stop_words.txt' # 人物列表 characters = [ "李达康", "侯亮平", "高育良", "陈岩石", "祁同伟", "赵东来", "沙瑞金", "丁义珍", "季昌明", "吴慧芬" ] # 代码略(至少十行)... # 代码略(至少十行)...
- 文件路径:定义文本文件和停用词文件的路径。
- 人物列表:定义电视剧中的人物列表。
- 生成词云:调用
generate_wordcloud
函数,生成并显示词云。 - 绘制人物关系图:调用
plot_character_graph
函数,绘制并显示人物关系图。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈
总结
- 导入必要的库:引入词云生成、中文分词和图形绘制所需的库。
- 配置 Matplotlib:确保能够正确显示中文字符和负号。
- 生成词云:读取文本和停用词文件,进行中文分词,生成并显示词云。
- 绘制人物关系图:创建无向图,添加节点和边,绘制并显示人物关系图。
- 主程序调用:定义文件路径和人物列表,生成词云和人物关系图。
该设计实现了一个简单的文本分析和可视化工具,可以对《人民的名义》文本进行词频分析,并展示主要人物之间的关系。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 人民 ” 获取,拿来即用。👈👈👈