yanyiwu / cppjieba

"结巴"中文分词的C++版本
MIT License
2.61k stars 690 forks source link

BUG: CutForSearch与python行为不一致 #64

Closed swigger closed 8 years ago

swigger commented 8 years ago

例子: vector words; jieba.DoCutForSearch("他心理健康", words); 得到: 他 心理健康

Python: seg_list = jieba.cut_for_search("他心理健康") # 搜索引擎模式 for i in seg_list: print i 得到: 他 心理 健康 心理健康

C++版有bug, 导致搜心理搜不到词条,得搜心理健康。

yanyiwu commented 8 years ago

感谢反馈! 不过这个问题不是bug,因为在cppjieba里面有个阈值4,只有大于字数4的词才会被细粒度分词。 而jieba的逻辑是对于每个词都会进行2个字和3个字的词的二次挖掘。 目前解决这个问题可以通过手动设置 Jieba::SetQuerySegmentThreshold(2); 把阈值设置为2 。

不过之后我会抽空把CutForSearch分词逻辑尽可能保持和jieba的完全一致。消除这个疑惑。

yanyiwu commented 8 years ago

Update:

最新的版本里面已经做到CutForSearch函数的行为和jieba python版本的一致。有空可以试试看。