设计一个程序,读出“Romance of the Three Kingdoms.txt”文件中的三 国演义全文,将常见人名进行去重后生成词云,并列出词频最高的 10-20 个词, 并形成词云,不用去重
时间: 2024-02-17 17:05:34 浏览: 23
好的,这个任务可以分为以下几部分:
1. 读取文件并提取人名
2. 对人名进行计数
3. 生成词频最高的10-20个词
4. 生成词云
我们可以使用Python中的一些第三方库来实现这些功能。具体实现如下:
```python
# 导入所需的库
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取文件
with open('Romance of the Three Kingdoms.txt', 'r', encoding='utf8') as f:
text = f.read()
# 提取人名
words = jieba.cut(text)
names = []
for word in words:
if len(word) > 1 and word[0] == '第': # 排除章节名
continue
names.append(word)
# 计数
name_cnt = Counter(names)
name_cnt = dict(name_cnt.most_common())
# 生成词频最高的10-20个词
top_names = list(name_cnt.keys())[:20]
# 生成词云
wc = WordCloud(font_path='msyh.ttc', background_color='white', max_words=2000, width=800, height=600)
wc.generate_from_frequencies(name_cnt)
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
解释一下代码:
1. 使用jieba库进行中文分词,提取人名。
2. 对人名进行计数,并使用字典的方式保存结果。
3. 取出前20个最高频的人名,作为词云的输入。
4. 使用WordCloud库生成词云,并使用matplotlib库显示结果。
需要注意的是,这个版本的代码没有去重,所以结果中可能会出现同一个人名出现多次的情况。如果需要更准确的处理方式,可以使用同义词词典进行替换。