jieba 如何分出更短的词

pxq42qpu  于 2022-10-22  发布在  其他
关注(0)|答案(1)|浏览(223)

求解!
比如说我想把“真棒”两个字分开
jieba.lcut('真棒', HMM=False)
结果是:
['真棒']
但是看了dict.txt里面,发现“真”和"棒"的词频都是大于“真棒”的,那为什么不会分出'真'和‘棒',而是'真棒'呢’?我关了新词识别呀。而且就算手动删除dict.txt里面的“真棒”这个词也不行。使用suggest_freq和add_word也不行。

enyaitl3

enyaitl31#

首先,你要了解jieba分词的原理,从概率上作一个浅层次的解释,你想要将**“真棒”**一词分开,那么就要P(“真”,“棒”)>P("真棒")。在jieba的默认词典中,freq(“真”) = 19988,freq(“棒”) = 2439, freq("真棒") = 3,总词频为60101964

为什么会分成“真棒”:因为此时P(“真”,“棒”)>P("真棒")

P(“真”,“棒”) = P(“真”)P(“棒”) = (19988/60101964)(2439/60101964) = 1.35e-08
P("真棒") = 3/60101964 = 4.99e-08 > P(“真”,“棒”)。所以这两个字当然会分在一起啦。
所以只看词频是没有用的,要看概率(词频/总词频)的情况。

怎么修正使得"真棒"可以被分开? 以下方法测试有效

  • 通过add_word()方法: jieba.add_word("真棒",0) ,这样的话“真棒”的概率直接是0,不可能被分在一起。
  • 通过suggest_freq()方法: jieba.suggest_freq(("真","棒"),True)
  • 直接删除dict.txt中的“真棒”:当然也是可以的,原理等同于第一种方法。(不起作用的话可能是cache中有缓存之前的dict.txt内容,清除再试)

PS:
题主的add_word()以及suggest_freq()使用方法,语法上没啥问题,但是意义上没用对,请多看看官方的示例使用说明。

相关问题