fxsjy / jieba

结巴中文分词
MIT License
33.41k stars 6.73k forks source link

在词典中的词被切成了单字 #933

Open qjf42 opened 3 years ago

qjf42 commented 3 years ago

https://github.com/fxsjy/jieba/blob/67fa2e36e72f69d9134b8a1037b83fbb070b9775/jieba/__init__.py#L267-L273 这部分的逻辑是不是有点问题,在词典中的词还是会被切开 参考了一下Java和C++(包括基于C++的go和R)实现,都没有这个问题

imno13 commented 2 years ago

问题在calc函数。解决方法:将【logtotal = log(self.total)】修改为一个常量,logtotal赋值为40(估计值,可以更大),可以解决

shouldsee commented 2 years ago

有测试用例吗?

qjf42 commented 2 years ago

有测试用例吗?

机动战士高达 -> ['机动', '战士', '高', '达'] 地心历险记 -> ['地', '心', '历险记']

"高达"、"地心" 都在dict.txt中,在DAG中都是合并的节点

shouldsee commented 2 years ago

版本 67fa2e3 可以尝试一下cut_all=True

#-*- coding:utf8 -*-
import jieba
for sent in "机动战士高达 地心历险记".split():
        for cut_all in  [True,False]:
                x = seg_list = jieba.cut(sent, cut_all=cut_all)
                x = list(x)
                print('cut_all=%s'%cut_all)
                print(x)
cut_all=True
['机动', '战士', '高达']
cut_all=False
['机动', '战士', '高', '达']
cut_all=True
['地心', '历险', '历险记']
cut_all=False
['地', '心', '历险记']