设计一个程序,读出“三国演义.txt”文件中的三国演义全文,将常见人名进行去重后生成词云,并列出词频最高的10-20个词,并形成词云(可以有不同的形状)。 例:'玄德','刘备','玄德曰','刘皇叔','皇叔'都是同一个人。python代码
时间: 2023-12-02 17:06:41 浏览: 92
好的,以下是Python代码实现:
```python
import re
from collections import Counter
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import numpy as np
import jieba
from PIL import Image
# 读取文件内容
with open('三国演义.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 使用正则表达式提取人名
pattern = r'[\u4e00-\u9fa5]{2,}(?:\u3001[\u4e00-\u9fa5]{2,})*[曰|之|乃]'
names = re.findall(pattern, content)
# 去重
names = list(set(names))
# 统计词频
name_count = Counter(names)
# 排序,取前10-20个词频最高的人名
top_names = name_count.most_common(20)
# 打印排名
for i, name in enumerate(top_names):
print(f'第{i+1}名:{name[0]},出现{str(name[1])}次')
# 生成词云
# 加载停用词
stopwords = set(STOPWORDS)
with open('stopwords.txt', 'r', encoding='utf-8') as f:
for line in f:
stopwords.add(line.strip())
# 加载背景图片
bg_image = np.array(Image.open('bg.jpg'))
# 生成词云
wc = WordCloud(background_color='white', max_words=2000, mask=bg_image,
stopwords=stopwords, font_path='simhei.ttf', random_state=42)
# 生成词云图像
wc.generate_from_frequencies(name_count)
# 生成颜色值
image_colors = ImageColorGenerator(bg_image)
# 显示词云图像
wc.to_file('output.jpg')
```
注:需要将代码中的文件路径改为实际路径。同时需要安装所使用的第三方库。
阅读全文