任务二:三国演义人名词云。 设计一个程序,读出“Romance of the Three Kingdoms.txt”文件中的三 国演义全文,将常见人名进行去重后生成词云,并列出词频最高的 10-20 个词, 并形成词云(可以有不同的形状)。 例:'玄德','刘备','玄德曰','刘皇叔','皇叔'都是同一个人
时间: 2023-12-01 12:04:53 浏览: 132
以下是实现该任务的Python代码:
```python
import jieba
from wordcloud import WordCloud
from PIL import Image
import numpy as np
# 读取文本文件
with open('Romance of the Three Kingdoms.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用jieba分词,获取人名
words = jieba.cut(text)
names = []
for word in words:
if len(word) == 2 and word[0] != word[1]:
names.append(word)
# 对人名进行去重
names = list(set(names))
# 统计人名出现的次数
name_count = {}
for name in names:
count = text.count(name)
if count > 0:
name_count[name] = count
# 按照出现次数排序,选择前20个
sorted_name_count = sorted(name_count.items(), key=lambda item: item[1], reverse=True)[:20]
# 输出前20个词和它们的频率
for name, count in sorted_name_count:
print(name, count)
# 生成词云
mask = np.array(Image.open('mask.png'))
wc = WordCloud(font_path='msyh.ttc', background_color='white', mask=mask, max_words=2000)
wc.generate_from_frequencies(name_count)
wc.to_file('wordcloud.png')
```
上述代码首先使用jieba分词工具对文本进行分词,获取人名。然后对人名进行去重,并统计每个人名出现的次数。接着按照出现次数排序,选择前20个人名并输出它们的频率。最后使用WordCloud库生成词云,其中使用了一个形状为mask.png的图片作为词云的形状。生成的词云保存在wordcloud.png文件中。
需要注意的是,上述代码中使用了一个字体文件msyh.ttc,需要提前下载并放置到代码所在的目录下。同时,需要准备一个形状为mask.png的图片作为词云的形状,可以使用任意形状的图片。