求解!比如说我想把“真棒”两个字分开jieba.lcut('真棒', HMM=False)结果是:['真棒']但是看了dict.txt里面,发现“真”和"棒"的词频都是大于“真棒”的,那为什么不会分出'真'和‘棒',而是'真棒'呢’?我关了新词识别呀。而且就算手动删除dict.txt里面的“真棒”这个词也不行。使用suggest_freq和add_word也不行。
jieba.lcut('真棒', HMM=False)
['真棒']
enyaitl31#
首先,你要了解jieba分词的原理,从概率上作一个浅层次的解释,你想要将**“真棒”**一词分开,那么就要P(“真”,“棒”)>P("真棒")。在jieba的默认词典中,freq(“真”) = 19988,freq(“棒”) = 2439, freq("真棒") = 3,总词频为60101964
为什么会分成“真棒”:因为此时P(“真”,“棒”)>P("真棒")
P(“真”,“棒”) = P(“真”)P(“棒”) = (19988/60101964)(2439/60101964) = 1.35e-08P("真棒") = 3/60101964 = 4.99e-08 > P(“真”,“棒”)。所以这两个字当然会分在一起啦。所以只看词频是没有用的,要看概率(词频/总词频)的情况。
怎么修正使得"真棒"可以被分开? 以下方法测试有效
jieba.add_word("真棒",0)
jieba.suggest_freq(("真","棒"),True)
PS:题主的add_word()以及suggest_freq()使用方法,语法上没啥问题,但是意义上没用对,请多看看官方的示例使用说明。
1条答案
按热度按时间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(“真”,“棒”)。所以这两个字当然会分在一起啦。
所以只看词频是没有用的,要看概率(词频/总词频)的情况。
怎么修正使得"真棒"可以被分开? 以下方法测试有效
jieba.add_word("真棒",0)
,这样的话“真棒”的概率直接是0,不可能被分在一起。jieba.suggest_freq(("真","棒"),True)
。PS:
题主的add_word()以及suggest_freq()使用方法,语法上没啥问题,但是意义上没用对,请多看看官方的示例使用说明。