jieba 带符号自定义词汇 词性标注错误的解决办法

        在使用 jieba 的词性标注模块 jieba.posseg(简称 pseg)时,如果我们自定义的词汇中包含符号(如连字符、空格等),pseg 可能无法正确识别并标注这些词汇的词性,导致标注结果不符合预期。
        pseg.cut(text: str) 接收文本,返回形如 [ (词1, 词性1), (词2, 词性2) ] 的词性标注列表。问题在于:

        jieba 在处理文本时,对英文及带符号字符串的分词优先按字符类型(如字母、数字、标点)进行拆分,而不是严格依赖词典。

        因此,即使我们通过 jieba.add_word() 添加了带符号的自定义词汇(例如 "LLM-RAG"),jieba.cut() 可以正确分词,但 pseg.cut() 会无视扩展词表,仍按字符拆解逻辑处理,导致词性标注错误。

  示例如下


# 文本
text = "我们的LLM-RAG框架试验后证明是负优化"
#进行词性标注的分词
words = list(pseg.cut(text))
print(words)
#直接分词
words = list(jieba.cut(text))
print(words)

jieba.add_word("LLM-RAG", freq=1000, tag="n")
#进行词性标注的分词
words = list(pseg.cut(text))
print(words)
#直接分词
words = list(jieba.cut(text))
print(words)
"""
输出:
[pair('我们', 'r'), pair('的', 'uj'), pair('LLM', 'eng'), pair('-', 'x'), pair('RAG', 'eng'), pair('框架', 'n'), pair('试验', 'vn'), pair('后', 'f'), pair('证明', 'n'), pair('是', 'v'), pair('负', 'v'), pair('优化', 'vn')]
['我们', '的', 'LLM', '-', 'RAG', '框架', '试验', '后', '证明', '是', '负', '优化']
[pair('我们', 'r'), pair('的', 'uj'), pair('LLM', 'eng'), pair('-', 'x'), pair('RAG', 'eng'), pair('框架', 'n'), pair('试验', 'vn'), pair('后', 'f'), pair('证明', 'n'), pair('是', 'v'), pair('负', 'v'), pair('优化', 'vn')]
['我们', '的', 'LLM-RAG', '框架', '试验', '后', '证明', '是', '负', '优化']
"""

        可以看到,虽然 jieba.cut 成功识别了 LLM-RAG,但 pseg.cut 却还是将其拆成了 LLM、- 和 RAG,并分别标注词性。

        这种情况在我们的自定义词中含有连接符、空格等特殊字符时尤其常见。

解决方案:

        使用哈希表\字典等数据结构制作特殊词表,先用jieba对文本进行分词,然后一个个识别分词在不在特殊词表内,是则按照特殊词表进行标注,否则按照pseg划分。

# 手动词性标注(可以简单用pseg去标普通分词)
custom_tags = {'LLM-RAG': 'n'}

for w in words:
    if w in custom_tags:
        #特殊分词
        print(w, custom_tags[w])
    else:
        # 普通词再让pseg单独标一下
        pseg_result = list(pseg.cut(w))
        if len(pseg_result) == 1:
            print(pseg_result[0].word, pseg_result[0].flag)
        else:
            for item in pseg_result:
                print(item.word, item.flag)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值