python三国演义人名词云: 设计一个程序,读出“三国演义.txt”文件中的三国演义全文,将常见人名进行去重后生成词云,并列出词频最高的10-20个词,并形成词云(可以有不同的形状)。 例:'玄德','刘备','玄德曰','刘皇叔','皇叔'都是同一个人。任务拓展:利用列表或字典来存储同一个人。学会修改对形成的词云或字典来储存同一人完整代码
时间: 2023-12-18 14:05:02 浏览: 152
以下是实现该任务的Python代码:
```python
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取文件
with open('三国演义.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 使用jieba分词
words = jieba.lcut(content)
# 定义人名列表
names = []
# 遍历分词结果,将人名加入列表
for word in words:
if len(word) == 2 and word[0] != word[1]:
names.append(word)
# 定义人名字典
name_dict = {}
# 遍历人名列表,将同一人名加入字典
for name in names:
if name in name_dict:
name_dict[name] += 1
else:
name_dict[name] = 1
# 定义同一人名的列表
same_names = [['玄德', '刘备', '玄德曰', '刘皇叔', '皇叔'], ['关公', '云长', '关云长'], ['孟德', '曹操', '孟德曰'], ['孔明', '诸葛亮', '孔明曰'], ['吕布', '奉先', '布奉先'], ['袁绍', '公路', '丞相'], ['袁术', '公路', '术父'], ['刘表', '景升', '刘景升'], ['吕蒙', '子明', '蒙子明'], ['周瑜', '公瑾', '周郎', '瑜公瑾'], ['陆逊', '伯言', '丞相']]
# 修改字典中的同一人名
for same_name in same_names:
for name in same_name[1:]:
if name in name_dict:
name_dict[same_name[0]] += name_dict[name]
del name_dict[name]
# 按照词频倒序排列字典
sorted_name_dict = sorted(name_dict.items(), key=lambda x: x[1], reverse=True)
# 取出前10-20个词
top_names = sorted_name_dict[:20]
# 生成词云
wc = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600, max_words=200, max_font_size=100, contour_width=2, contour_color='steelblue')
wc.generate_from_frequencies(dict(top_names))
plt.imshow(wc)
plt.axis('off')
plt.show()
```
代码运行后,会生成一个形状为矩形的词云图,其中包含了三国演义中出现频率最高的人名。如果要修改对同一人名的储存方式,可以在遍历人名列表时,使用一个字典来记录同一人名的列表。具体实现方式可以参考代码中的 `same_names` 列表。
阅读全文