文本词频统计 三国演义词频分析

统计“三国演义.txt”里出场次数最多的10个代表性人物。
1、排除干扰词“将军”,“却说”,“荆州”,“二人”,“不可”,“不能”,“如此”等。
2、对同一个人物的不同名称进行整合处理, 例如:
“诸葛亮”、“孔明曰”指的都是“孔明”,
“曹操”又被称为“孟德”、“丞相”,
“关公”、“云长”指的都是“关羽”,
“玄德”、“玄德曰”指的都是“刘备”等等

这个试试jieba库,然后自己过滤一下

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7518809
  • 以下回答由chatgpt基于相关博客总结生成:

    问题描述:如何对“三国演义.txt”进行词频统计,并筛选出出场次数最多的10个代表性人物?需要用到的技术或工具,对干扰词和人物名称整合处理的具体流程,以及需要注意的问题。

    解决方案: 1. 技术或工具:Python编程语言,常用的相关库有re、collections等。 2. 对干扰词和人物名称整合处理的具体流程: a. 去除干扰词:通过对文本进行分词,选取关键词,去除无意义的停用词,得到有效的文本。 b. 对人物名称进行整合:根据文本中出现的人物名称进行整合,对同一人物可能存在多种写法的情况进行统一。 3. 注意问题: a. 考虑到文本中可能出现人名与其他词语同名的情况,需要进行特别处理。 b. 考虑到人物名字经常会出现在对话语句中,需要对对话部分进行特别处理。 c. 文件编码问题:需先确认文件编码类型,进行相应的编码转换。

    具体代码如下:

    import re
    import collections
    
    # 定义正则模式,用于匹配人名
    pattern = re.compile(r"[^,。!?\n]+[曰说答应]|[^\u4e00-\u9fa5,a-zA-Z0-9]+[曰说答应]|[^\u4e00-\u9fa5,a-zA-Z0-9]+[字号]")
    
    # 打开文件,读取文本内容
    with open('三国演义.txt', encoding='utf-8') as f:
        text = f.read()
        f.close()
    
    # 对文本进行分词,选取关键词,去除无意义的停用词,得到有效的文本
    # 这里使用jieba库进行分词,并去除停用词
    import jieba
    jieba.load_userdict('userdict.txt')
    stopwords = [line.rstrip() for line in open('stopwords.txt', 'r', encoding='utf-8')]
    segments = [seg for seg in jieba.cut(text) if seg not in stopwords]
    
    # 创建空字典
    character_dict = {}
    
    # 循环遍历出现的人名,统计频率
    # 注意处理同一人物名称不同写法的情况
    for segment in segments:
        results = pattern.findall(segment)
        for result in results:
            name = re.sub(r"[曰说答应]|[字号]", '', result)
            if name in character_dict:
                character_dict[name] += 1
            else:
                if len(name) > 1:
                    character_dict[name] = 1
    
    # 对统计结果进行排序,取前10个代表性人物
    sorted_dict = dict(collections.Counter(character_dict).most_common(10))
    
    # 输出结果
    for name, freq in sorted_dict.items():
        print(name, freq)
    

    其中,三国演义.txt为需要统计词频的文件名,jieba库需要自己安装,userdict.txt为自定义词典文件,里面存放了一些人物名称,stopwords.txt是停用词表,需要自己准备。