jieba分词

点击查看代码
import jieba
from collections import Counter

# 添加自定义词典确保人物名称正确切分
character_names = [
    '孙悟空', '孙行者', '行者孙', '齐天大圣', '美猴王', '弼马温',
    '唐僧', '唐三藏', '玄奘', '御弟圣僧',
    '猪八戒', '猪悟能', '天蓬元帅', '呆子',
    '沙僧', '沙和尚', '沙悟净', '卷帘大将',
    '如来', '如来佛祖', '释迦牟尼',
    '观音', '观世音', '菩萨',
    '玉帝', '玉皇大帝',
    '太白金星',
    '太上老君',
    '菩提祖师'
]
for name in character_names:
    jieba.add_word(name)

# 人物别名映射字典
name_mapping = {
    '孙行者': '孙悟空', '行者孙': '孙悟空', '齐天大圣': '孙悟空', 
    '美猴王': '孙悟空', '弼马温': '孙悟空',
    '唐三藏': '唐僧', '玄奘': '唐僧', '御弟圣僧': '唐僧',
    '猪悟能': '猪八戒', '天蓬元帅': '猪八戒', '呆子': '猪八戒',
    '沙和尚': '沙僧', '沙悟净': '沙僧', '卷帘大将': '沙僧',
    '如来佛祖': '如来', '释迦牟尼': '如来',
    '观世音': '观音', '菩萨': '观音',
    '玉皇大帝': '玉帝'
}

# 读取《西游记》文本
with open('xiyouji.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 分词处理
words = jieba.lcut(text)

# 统一人物名称并统计
character_counter = Counter()
for word in words:
    # 统一人物称呼
    normalized_name = name_mapping.get(word, word)
    # 只统计主要人物
    if normalized_name in ['孙悟空', '唐僧', '猪八戒', '沙僧', 
                          '如来', '观音', '玉帝', 
                          '太白金星', '太上老君', '菩提祖师']:
        character_counter[normalized_name] += 1

# 获取出现频率最高的前十位
top_characters = character_counter.most_common(10)

print("《西游记》主要人物出现频率:")
for character, count in top_characters:
    print(f"{character}: {count}次")
posted @ 2025-06-22 21:38  佘婷婷  阅读(11)  评论(0)    收藏  举报