4.文本文件“红楼梦.txt”中包含《红楼梦》小说前20章内容。对“红楼梦.txt”中的文本进行分词,并对人物名称进行归一化处理:凤姐、凤姐儿、凤丫头归一为凤姐;宝玉、二爷、宝二爷归一为宝玉;黛玉、颦儿、林妹妹、黛玉道归一为黛玉;宝钗、宝丫头归一为宝钗;贾母、老祖宗归一为贾母;袭人、袭人道归一为袭人;贾政、贾政道归一为贾政;贾琏、琏二爷归一为贾琏。提取出场次数不少于40次的人物名称,将人物名称及其出场次数按照递减排序写入out.txt文件中。
时间: 2023-07-10 11:03:51 浏览: 185
基于Python的红楼梦文本分析.zip
5星 · 资源好评率100%
以下是Python代码实现:
```python
import jieba
from collections import Counter
# 读取文本文件
with open('红楼梦.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 对文本进行分词
words = jieba.lcut(text)
# 定义人物名称归一化函数
def normalize_name(name):
if name in ['凤姐', '凤姐儿', '凤丫头']:
return '凤姐'
elif name in ['宝玉', '二爷', '宝二爷']:
return '宝玉'
elif name in ['黛玉', '颦儿', '林妹妹', '黛玉道']:
return '黛玉'
elif name in ['宝钗', '宝丫头']:
return '宝钗'
elif name in ['贾母', '老祖宗']:
return '贾母'
elif name in ['袭人', '袭人道']:
return '袭人'
elif name in ['贾政', '贾政道']:
return '贾政'
elif name in ['贾琏', '琏二爷']:
return '贾琏'
else:
return name
# 对文本中的人物名称进行归一化处理
names = [normalize_name(word) for word in words if len(word) > 1]
# 统计人物名称出现的次数
name_counts = Counter(names)
# 选取出场次数不少于40次的人物名称
selected_names = [(name, count) for name, count in name_counts.items() if count >= 40]
# 按照出场次数递减排序
selected_names.sort(key=lambda x: x[1], reverse=True)
# 将结果写入文件
with open('out.txt', 'w', encoding='utf-8') as f:
for name, count in selected_names:
f.write(f'{name}: {count}\n')
```
运行完上述代码后,可以在当前目录下生成名为“out.txt”的文件,其中包含出场次数不少于40次的人物名称及其出场次数,按照出场次数递减排序。
阅读全文