Python中的jieba库错误

到本书配套的官方网站的“下载专区”的“数据集/第 15章 常用的标准库和第三方库”目录下把文件 threekingdoms.txt 下载到本地

img


然后编写程序读取文件中的内容,使用 jieba 库对内容进行分词,最后,统计出文件中三国人物的出场次数。

KeyError: '2人'
键名错误!

您的代码第25行:del counts[word]
当遍历到“2人”时为:del counts['2人']
字典中没有“2人”这个key,引发 KeyError 。在 del counts['2人'] 前, print(counts) ,看看是不是真没有“2人”。


  • 请看👉 :python读写txt文件,并用jieba库进行中文分词
  • 除此之外, 这篇博客: python替换同义词 jieba替换同义词中的 1构建同义词文件txt 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 构建同义词文件tongyici_tihuan.txt,每一个同义词列为一行,每行第一个为希望分隔后呈现的词语,后几个为第一个词的同义词,用tab键分隔,比如:

    年休假	年假	年休
    北京	北平	首都
    

    在这个例子里“北平 首都”都会被替换为 “北京”

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以解决该问题。

    步骤:

    1.安装jieba库

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
    

    2.获取本地txt文件内容

    def getText(filepath):
        f = open(filepath, 'r', encoding = 'utf-8')
        text = f.read()
        f.close()
        return text #返回文本内容
    

    3.用jieba分词统计出现次数

    import jieba
    
    text = getText("path/to/threekingdoms.txt")
    
    word_count_dic = {}  # 关键字的出现次数统计
    text_lst = jieba.lcut(text, cut_all=True)  # 切割
    new_text_lst = []
    for content in text_lst:
        if len(content) <= 1:
            continue
    
        word_count_dic[content] = word_count_dic.get(content, 0) + 1  # 写到统计
        new_text_lst.append(content)
    
    print(word_count_dic)  # 输出统计结果
    

    4.针对问题要求,对某些词汇进行同义词替换,则需要构建同义词文件txt,每个同义词列为一行,每行第一个为希望分隔后呈现的词语,后面几个为第一个词的同义词,用tab键分隔,比如:

    关羽 关公 云长
    张飞 张翼德 翼德
    ...
    

    读取同义词文件:

    def readTongyici(filepath):
        f = open(filepath, 'r', encoding='UTF-8')
        words = f.readlines()
        f.close()
        tongyicis = {}
        for word in words:
            w = word.strip().split("\t")
            if len(w) < 2:
                continue
            # 以第一个词构建同义词的哈希表
            for k in w[1:]:
                tongyicis[k] = w[0]
        return tongyicis
    
    tongyici = readTongyici("path/to/tongyici.txt")
    

    对分词结果进行同义词替换:

    new_text_lst = [tongyici.get(x, x) for x in new_text_lst]
    

    完整代码如下:

    import jieba
    
    # 获取本地txt文件内容
    def getText(filepath):
        f = open(filepath, 'r', encoding = 'utf-8')
        text = f.read()
        f.close()
        return text #返回文本内容
    
    # 读取同义词文件
    def readTongyici(filepath):
        f = open(filepath, 'r', encoding='UTF-8')
        words = f.readlines()
        f.close()
        tongyicis = {}
        for word in words:
            w = word.strip().split("\t")
            if len(w) < 2:
                continue
            # 以第一个词构建同义词的哈希表
            for k in w[1:]:
                tongyicis[k] = w[0]
        return tongyicis
    
    text = getText("path/to/threekingdoms.txt")
    
    tongyici = readTongyici("path/to/tongyici.txt")
    
    word_count_dic = {}  # 关键字的出现次数统计
    text_lst = jieba.lcut(text, cut_all=True)  # 切割
    new_text_lst = []
    for content in text_lst:
        if len(content) <= 1:
            continue
    
        word_count_dic[content] = word_count_dic.get(content, 0) + 1  # 写到统计
        new_text_lst.append(content)
    
    # 对分词结果进行同义词替换
    new_text_lst = [tongyici.get(x, x) for x in new_text_lst]
    
    print(word_count_dic)  # 输出统计结果