从网络上爬取红楼梦,对人物出场的次数进行词频统计,并将前10个人物姓名通过词云展示。
时间: 2024-11-16 14:20:04 浏览: 44
在Python中,我们可以使用一系列库来实现这个任务,包括requests用于网络爬取、BeautifulSoup解析HTML,nltk或jieba处理文本,collections计算词频,以及wordcloud生成词云。
首先,你需要访问《红楼梦》的网页并获取文本数据。可以考虑找一些开源的电子书版本,如Project Gutenberg,然后将其下载成txt文件,便于后续操作。
1. 使用requests库从网站上抓取内容:
```python
import requests
url = "https://www.gutenberg.org/files/8/8-0.txt" # 替换为实际链接
response = requests.get(url)
content = response.text
```
2. 解析文本内容,提取人物名字:
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(content, 'html.parser')
# 这里假设人物名出现在特定标签或规律下,例如“<name>”或正则表达式匹配
names = [name.text for name in soup.find_all('name')] or re.findall(r'[A-Za-z\u4e00-\u9fa5]+', content)
```
3. 使用nltk或jieba进行分词,并计算词频:
```python
import nltk
from collections import Counter
if not nltk.download('punkt'): # 如果尚未安装中文分词包
nltk.download('punkt')
tokens = [token for name in names for token in nltk.word_tokenize(name)] # 或者jieba.lcut()
frequency = Counter(tokens)
```
4. 创建并显示词云:
```python
from wordcloud import WordCloud
top_10_names = frequency.most_common(10) # 获取最常出现的10个人物名及其频率
wordcloud = WordCloud(width=800, height=600, background_color='white').generate_from_frequencies(dict(top_10_names))
wordcloud.to_file('top_10_names.png') # 保存词云图片
```
阅读全文