yanyiwu / gojieba

"结巴"中文分词的Golang版本
MIT License
2.4k stars 302 forks source link

英文分词问题,词语拆分成字母了 #46

Open MorvanZhou opened 5 years ago

MorvanZhou commented 5 years ago

在某些设置状态下,英文单词期望被拆成词语,但是实际上会被拆分成字母,举例说明:

s := "这是一段中文, This is an English sentence"
resF := x.Cut(s, false)  
 // "这/是/一段/中文/,/ /T/h/i/s/ /i/s/ /a/n/ /E/n/g/l/i/s/h/ /s/e/n/t/e/n/c/e/"

resT := x.Cut(s, true)   
// "这是/一段/中文/,/ /This/ /is/ /an/ /English/ /sentence/"

res := x.CutAll(s)    
// "这/是/一段/中文/,/ /T/h/i/s/ /i/s/ /a/n/ /E/n/g/l/i/s/h/ /s/e/n/t/e/n/c/e/"

resF = x.CutForSearch(s, false)   
// "这/是/一段/中文/,/ /T/h/i/s/ /i/s/ /a/n/ /E/n/g/l/i/s/h/ /s/e/n/t/e/n/c/e/"

resT = x.CutForSearch(s, true)
// "这是/一段/中文/,/ /This/ /is/ /an/ /English/ /sentence/"

总结下来,应该是只有在hmm=true的时候,才能实现词语级别的拆分,而Cut(s, hmm=false),CutAll(s),CutForSearch(s, hmm=false) 都会被拆成字母。

望解决。

naiba commented 5 years ago

@MorvanZhou 我也碰到这个问题,没想到碰到莫凡大佬了,看过大佬视频

naiba commented 5 years ago

看来只能先硬改

x.handle.Tokenize(string(sentence), gojieba.SearchMode, true)

MorvanZhou commented 5 years ago

@naiba 哈哈,都是缘分

leafney commented 5 years ago

请问各位大佬,在结合bleve实现中英文搜索时如何设置 gojieba 的 hmm=true 呢?

naiba commented 5 years ago

@leafney go mod vendor 或者使用 dep 硬改 vendor 里面 gojieba 的代码。

x.handle.Tokenize(string(sentence), gojieba.SearchMode, true)
leafney commented 5 years ago

@naiba 我还在考虑是否有什么选项呢,这操作果然够直接。感谢!

duguying commented 2 years ago

看来只能先硬改

x.handle.Tokenize(string(sentence), gojieba.SearchMode, true)

但是我发现开启这个选项之后,搜索英文虽然正常,但是搜索速度变得很慢啊

duguying commented 1 year ago

慢是其他问题。目前看起来正常