-
Notifications
You must be signed in to change notification settings - Fork 355
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于splitTextToWords的多语言支持 #2
Comments
经实验不可以,因为当r为单个中文字时,unicode.IsLetter也会返回true,这样就起不到划分中文字的目的,比如 “中国” 原本划分为 "中/国/",按照你的改动会划分为"中国/" 如果假定非中日韩语言都是字节长度为1或者2的话(不确定这个假设),可修改为 if size <= 2 && r != " " { 经实验可正确处理下面的语言 中文,日文,韩文,德语,法语,西班牙语,俄语 见 https://github.com/huichen/sego/blob/master/segmenter.go#L239 |
貌似只有中日韩是2或者3字节这个假设是正确的,只有一种印度的语言除外,见UTF-8分区表 http://en.wikipedia.org/wiki/Utf-8#Codepage_layout 但不清楚是否非中日韩语言都是依赖空格分词的,这个假设可能过强,但对主要的几个字母语言是正确的假设。 |
抱歉没有仔细验证IsLetter对cjk的处理。 我不知道你email,一些建议就在这里提一下了。 我在你的微博看到你现在人在google,那么是否有可能找一些自然语言处理方面的同事,一起完善一下多语言部分?持久化这个相信你也肯定考虑过,如果有具体的计划, 不管如何,多谢你的这个项目,我以前是用sphinx的,刚开始的时候sphinx连个go的库都没有,我自己还写一个了sphinx的client库。如果有纯go开发的全文检索库,可以做很多深入的针对业务的优化了。 2013/11/15 Hui Chen notifications@github.com
|
又想起一个问题,目前这种方式,好像难以处理字母语言的标点符号。 而且有些语种的标点符号与英语不同,像阿拉伯语的问号,是倒过来的'؟'。 2013/11/15 Fu Yunge yunge.fu@gmail.com
|
已经改正,多谢! 谢谢你对这个项目的鼓励和支持,正如你所说的,多语言支持和索引持久化正是悟空最缺乏的两个功能。如果你使用中有什么问题请尽管问。我也希望有更多人来使用和完善这个引擎,让我们一起把这个开源项目做大做好! |
目前segmenter.go中的splitTextToWords函数,将会把所有non-english语言,分解为最小单位。
除了CJK中日韩等东亚语言,其它国家的语言都还是类似英语,属于字母型语言,利用unicode包中的IsLetter、IsNumber函数,可以很方便的处理。因此,建议将
_, size := utf8.DecodeRune(text[current:])
if size == 1 &&
(text[current] >= 'a' && text[current] <= 'z') ||
(text[current] >= 'A' && text[current] <= 'Z') ||
(text[current] >= '0' && text[current] <= '9') {
改为
r, size := utf8.DecodeRune(text[current:])
if unicode.IsLetter(r) || unicode.IsNumber(r) {
这样sego基本上可以用于所有的语言。
The text was updated successfully, but these errors were encountered: