python统计红楼梦·人物出现次数
时间: 2023-07-01 08:14:24 浏览: 1037
好的,下面是针对《红楼梦》的人物出现次数统计的示例代码:
```python
import re
# 读取小说文本文件
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
novel_text = f.read()
# 提取人物名称
pattern = r'[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*(?:[族|氏])?'
characters = re.findall(pattern, novel_text)
# 统计人物出现次数
character_count = {}
for character in characters:
if character in character_count:
character_count[character] += 1
else:
character_count[character] = 1
# 输出人物出现次数
for character, count in character_count.items():
print(character, count)
```
这里使用了与前面示例代码相同的方法,不同的是针对《红楼梦》的文本进行了正则表达式的修改,以匹配小说中出现的人物名称。需要注意的是,《红楼梦》中的一些人物名称包含“族”或“氏”等字样,需要在正则表达式中进行匹配。同时,由于《红楼梦》中的人物名称较多,统计时间可能较长,请耐心等待。
相关问题
统计红楼梦人物出场次数python_红楼梦人物出场次数统计及人物出场词云
好的,这个问题我可以回答。首先需要将《红楼梦》的文本进行处理,然后统计人物出现的次数,最后可以生成词云来展示。
下面是一个简单的 Python 代码示例:
```python
import jieba
import numpy as np
from PIL import Image
from wordcloud import WordCloud
from collections import Counter
# 读取红楼梦文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用 jieba 进行分词
words = jieba.lcut(text)
# 读取人物列表
with open('characters.txt', 'r', encoding='utf-8') as f:
characters = f.read().splitlines()
# 统计人物出现次数
counter = Counter(words)
character_counts = {c: counter[c] for c in characters}
# 输出人物出现次数
for c, count in character_counts.items():
print(c, count)
# 生成词云
mask = np.array(Image.open('mask.png'))
wc = WordCloud(background_color='white', mask=mask, font_path='msyh.ttc')
wc.generate_from_frequencies(character_counts)
wc.to_file('wordcloud.png')
```
这段代码做了以下几件事情:
1. 读取《红楼梦》的文本,并使用 jieba 进行分词。
2. 读取人物列表(例如 `characters.txt` 文件)。
3. 使用 `collections.Counter` 统计每个词出现的次数,并从中筛选出人物出现的次数。
4. 输出人物出现次数。
5. 使用 `wordcloud` 库生成词云,并输出到图片文件中。
需要注意的是,这段代码中的 `mask.png` 和 `msyh.ttc` 文件需要自行准备。`mask.png` 是用于生成词云的遮罩图,`msyh.ttc` 是用于生成词云的字体文件。你可以在网上找到这些文件,或者使用自己喜欢的文件。
希望这个回答能够帮助到你!
python统计红楼梦人物出场次数_《红楼梦》人数统计,人物,出场,次数
可以使用Python中的字典(dictionary)来统计《红楼梦》中人物的出场次数。具体步骤如下:
1. 打开《红楼梦》的文本文件,读取所有内容。
```python
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
content = f.read()
```
2. 使用正则表达式(re)匹配出文本中所有的人名。
```python
import re
pattern = re.compile('[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*')
names = re.findall(pattern, content)
```
3. 使用字典统计每个人名出现的次数。
```python
name_count = {}
for name in names:
if name in name_count:
name_count[name] += 1
else:
name_count[name] = 1
```
4. 对字典按照值(出现次数)进行排序。
```python
sorted_name_count = sorted(name_count.items(), key=lambda x:x[1], reverse=True)
```
完整代码如下:
```python
import re
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
content = f.read()
pattern = re.compile('[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*')
names = re.findall(pattern, content)
name_count = {}
for name in names:
if name in name_count:
name_count[name] += 1
else:
name_count[name] = 1
sorted_name_count = sorted(name_count.items(), key=lambda x:x[1], reverse=True)
for name, count in sorted_name_count:
print(name, count)
```
输出结果为每个人名以及出现的次数,可以根据需要进行进一步的处理和分析。
阅读全文