聊斋

import jieba
from collections import Counter

1. 核心:人物别名映射表(标准名:[所有别名],按需扩充聊斋角色)

name_map = {
"聂小倩": ["小倩", "聂姑娘"],
"宁采臣": ["宁生", "采臣"],
"燕赤霞": ["燕道人", "燕侠"],
"狐女小翠": ["小翠"],
"连城": ["连姑娘"],
"乔生": ["乔年"],
# 你可以继续添加聊斋所有人物对应别称
}

反向生成:别名 → 标准名,方便快速查找

alias_to_std = {}
for std_name, alias_list in name_map.items():
for alias in alias_list:
alias_to_std[alias] = std_name

2. 把所有人名、别名加入jieba自定义词典,防止分词拆分人名

all_names = set()
for std, aliases in name_map.items():
all_names.add(std)
all_names.update(aliases)
for word in all_names:
jieba.add_word(word)

3. 待处理聊斋文本(替换成你的小说全文)

text = """
聂小倩夜晚来到宁采臣房间,小倩十分温柔,宁生心中动容。
燕赤霞路过救下采臣,燕道人剑法高超。小翠活泼可爱,狐女小翠擅长幻术。
"""

4. jieba精确分词

cut_words = jieba.lcut(text)

5. 统一替换所有别名为标准人名

standard_names = []
for word in cut_words:
if word in alias_to_std:
# 匹配到别名,替换成标准名
standard_names.append(alias_to_std[word])
elif word in name_map:
# 本身就是标准名,直接保留
standard_names.append(word)

6. 统计合并后的人物总词频

count_result = Counter(standard_names)

7. 输出结果

print("=== 合并别名后的人物出场统计 ===")
for name, cnt in count_result.most_common():
print(f"{name}:出现{cnt}次")

posted @ 2026-06-15 23:10  何裕双  阅读(4)  评论(0)    收藏  举报