python编程实现《红楼梦》词云,输出排序前(学号最后一位数字+5)的人物,,词云形状为所实现的自动轨迹图形形状。
时间: 2024-02-18 14:05:35 浏览: 185
好的,这是一个很有趣的问题!首先,我们需要安装一些必要的Python库,比如jieba,wordcloud和matplotlib。你可以在终端中使用以下命令来安装它们:
```
pip install jieba wordcloud matplotlib
```
接下来,我们需要从《红楼梦》中提取人物的数据。可以使用Python中的正则表达式来实现这个功能。下面是一段代码,可以读取《红楼梦》的文本文件,然后提取出所有人名,并统计它们出现的次数:
```python
import re
from collections import Counter
def extract_names(filename):
with open(filename, 'r', encoding='utf-8') as f:
text = f.read()
pattern = re.compile(r'[^\u4e00-\u9fa5]')
text = re.sub(pattern, '', text)
jieba.load_userdict('names.txt')
words = jieba.cut(text)
names = [word for word in words if len(word) > 1]
c = Counter(names)
return c.most_common()
result = extract_names('hongloumeng.txt')
```
在这段代码中,我们使用了jieba库来进行中文分词,并加载了一个自定义的词典(names.txt),其中包含了《红楼梦》中所有的人名。然后我们使用Counter类来统计每个人名出现的次数,并返回一个按照出现次数排序的列表。
接下来,我们需要生成词云。在这里,我们可以使用wordcloud库来实现。下面是一段代码,可以根据上面提取出的人名生成词云图:
```python
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
def generate_wordcloud(words, shapefile):
img = Image.open(shapefile)
mask = np.array(img)
wc = WordCloud(font_path='msyh.ttc',
background_color='white',
max_words=2000,
mask=mask,
contour_width=3,
contour_color='steelblue')
wc.generate_from_frequencies(words)
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
generate_wordcloud(dict(result[:int(-1 * int('学号最后一位数字') + 5)]), 'shape.png')
```
在这段代码中,我们使用了一张自定义的形状图形(shape.png)来作为词云的形状。然后我们使用WordCloud类来生成词云图,并使用ImageColorGenerator类来根据形状图形进行着色。最后,我们使用matplotlib库来显示词云图。
完成以上步骤后,你就可以生成一个华丽的《红楼梦》人物词云图了!
阅读全文