不支持中文搜索的论坛都是渣渣!

2015-07-07 14:07:10 +08:00
 pein

个人看法,可能有些主观。

简单试用了下几个论坛框架,说一下感受。

Esotalk : http://esotalk.org

很久前用过,当时被中文搜索问题弄得头疼就放弃了。现在去看已经是半死不活状态,继任者Flarum开发中。

Flarumhttp://discuss.flarum.org

基于tag的轻论坛,界面比较美观。帖子可以对应多个tag,tag只能从给定的当中选择不能自行添加,发布文章不用跳页面很方便。不支持中文搜索,文章标题“中文测试”,搜索“中文”和“测试”都没结果,只有输入完整标题才能搜到。

Discoursehttp://www.discourse.org

基于category的轻论坛,界面比较美观。帖子只能对应一个category,category为给定不可自行添加,发布文章不用跳页面很方便。基本不支持中文搜索,文章标题“中文搜索测试”,搜索任何“中文搜”开头的文字均可以搜到,其他情况搜不到,用英文也试了下,貌似是不论中英文都要超过三个字才会执行搜索命令。

Carbon Forum : http://www.94cb.com

好吧,国产。思想跟Flarum差不多,基于tag(话题)的轻论坛,界面还行。tag为自行添加,发布文章要跳页面,支持中英文搜索

下面开喷。

为什么国外论坛框架不支持中文搜索?为什么Carbon Forum就能支持中英文?是不是老外看不起中文?如果我是国外的开发者,肯定也会让框架支持中文搜索的,毕竟中国人多啊用户群摆在那里,不明白,支持中文搜索很难吗?

11105 次点击
所在节点    程序员
68 条回复
est
2015-07-07 14:14:57 +08:00
支持中文搜索容易,做好很难。看词库分词水平。
Cavolo
2015-07-07 14:17:26 +08:00
如果中文内容多支持中文搜索还是很必要的
lingo233
2015-07-07 14:19:04 +08:00
老外:□□□□□□□□□□□□□□□□□□□
jnduan
2015-07-07 14:23:40 +08:00
老外:烫烫烫烫烫锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
zangbob
2015-07-07 14:25:38 +08:00
@lincanbin 此处有表扬贴子哦……

PS:受不了置顶贴的时间为毛一直显示“刚刚”,明明都是5天前的了……
lincanbin
2015-07-07 14:25:38 +08:00
英文的语法跟中文的不同,它是按空格划分的。
例如我到一个黄网,想搜美腿看看,我输入leg,结果找出来一个legal teen,这肯定不对吧?所以英文网站的搜索都是基于空格&符号分词进行的。
中文就相对简单得多,FullText或者Like(前者性能高但是中文支持不佳,后者性能较菜),或者分词然后取索引(这是最好的方案,但是对分词和索引能力要求较高,知乎水平不够但是强上这种)。

不同语言有不同的搜索实现,怎么可能一并实现?

如果Google没被墙,最好的方案其实还是放个Google的站内搜索。
hahastudio
2015-07-07 14:25:56 +08:00
中国程序员开始干就要解决编码问题
英语区的程序,只要能支持 ASCII 就好了么,其他的到时候再说呗
jnduan
2015-07-07 14:29:40 +08:00
正经回答下吧:
英文或者拉丁系?的语种,只要按空格和标点切开,做一下时态、语气的归一就可以比较好的解决搜索问题

但是类似中文或者日韩(统称CJK)这种的,按照上述的单字区分是不行的,否则就会出现搜索“和服”出现大量的“xxx和服务”,或者“北大”出来“中华北大街”。

由此衍生出来了二元分词,更进一步,很多分词器会内置一个特别大的词典,结合最短路径等算法求出一个分词的最优解,例如到底是“南京市 长江 大桥”还是“南京 市长 江大桥”。

当然最好的办法是基于海量的文本,结合词与词先后出现的概率、词性等因素,通过隐马尔可夫模型或者CRF求出短语全切分路径中的最优解。
choury
2015-07-07 14:30:22 +08:00
我自己写的东西我都不大愿意支持中文,更别说老外了,支持中文有多麻烦你不知道
ericls
2015-07-07 14:34:33 +08:00
中文分词难! !!
pein
2015-07-07 14:34:40 +08:00
@Cavolo
@lingo233
我的意思是,老外他们开发的论坛框架支持中文搜索,这样我们就可以拿来用了。并非是让外国论坛上一定要有中文内容,老外看不懂中文,他们的论坛可以没有中文,但我们的论坛就肯定要有啊,作为开发者,为了让自己的项目推广开来,这点国际化应该是可以做的吧,还是他们压根就没考虑到支持中文这一层?
Luzifer
2015-07-07 14:42:52 +08:00
我说 V2EX 怎么不出搜索呢,@livid 可能搞不定中文搜索...



好歹把 google 搜索改为 AOL 搜呗, 它就是 google 。

看 v2ex 是翻墙呢还是不翻墙呢
lincanbin
2015-07-07 14:43:25 +08:00
Carbon Forum这个搜索功能其实是没什么诚意的。

https://github.com/lincanbin/Carbon-Forum/blob/master/search.php#L32

大家可以看到它的搜索功能的后台实现只有五十多行,这段代码估计写了一个下午最多了。
在低数量级的时候直接like匹配,数量级一高,则分词后然后取索引。

这些索引实际上还是在发帖时人工输入的,所以精确度还可以。



用户输入文章后,Carbon Forum利用RMM算法自动切分文章,从词库中筛选可能的词组,并给出这些词组,让用户选择合适的关键词作为标签。



用户人工选择的这些标签同时也就是该主题在高数量级下的索引了。

lingo233
2015-07-07 14:47:56 +08:00
@pein 我记得一有人喷v2的搜索,就会有这样的回答搜索要给专业的干 'site:url foo'
Agromania
2015-07-07 14:52:54 +08:00
做好搜索,每种语言的分词都不一样,同一种语言可能也会存在不同的分词算法,而且针对特定内容可能还需要特定的分词词库。

论坛程序本身提供基本的搜索功能对它来说任务已经完成了,要好的搜索你还是老老实实自己开发,分好词做好索引,搭建solr或者elastic search吧
gkiwi
2015-07-07 14:53:22 +08:00
你问问为什么elasticsearch为什么不内置中文分词吧。。
因为这块他们支持的话,都得需要相关的库,而他们看中文的感觉,就是这样子的。。。
الألقاب تنصف ميسي ببرشلونة وتعانده بالمنتخب
pein
2015-07-07 15:02:23 +08:00
@lincanbin 已感谢,放Google站内感觉是最偷懒有效的解决方式。

@hahastudio 意思说是老外还没考虑到支持中文搜索这一层吗?

@jnduan 已感谢,你说的是中文搜索精确度的问题,现在是假设只要能搜索出相关的内容就算支持了,但问题是现在那两个外国论坛框架你搜索“北大”连“中华北大街”都出不来。。

@choury 这个还真不清楚,详见8L的答案,现在不要求精准搜索,能做到搜出“中华北大街”就算支持了。
Agromania
2015-07-07 15:02:58 +08:00
真的把搜索做好,光分词也是不够的,还要做自然语言分析,语义分析,同义词、近义词匹配

比如有个帖子标题是 “如何做搜索”
你搜“怎么做搜索”,是应该搜到呢还是应该搜不到呢?

还有个帖子标题是“怎么做绳索”,这个结果应该在上一个帖子前面呢还是后面呢?还是根本不应该出现呢?
adoyle
2015-07-07 15:07:41 +08:00
手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。
Agromania
2015-07-07 15:15:21 +08:00
另外Flarum的搜索也只是简单地LIKE %%而已,之前他们用了MATCH AGAINST
由于Mysql本身的原因fulltext对中文支持有问题

现在他们master分支已经注释掉了,所以如果你用master的代码,搜“中文”是可以搜到“中文测试”的

https://github.com/flarum/core/blob/master/src%2FCore%2FRepositories%2FEloquentPostRepository.php#L73

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX