个人看法,可能有些主观。
简单试用了下几个论坛框架,说一下感受。
Esotalk : http://esotalk.org
很久前用过,当时被中文搜索问题弄得头疼就放弃了。现在去看已经是半死不活状态,继任者Flarum开发中。
Flarum : http://discuss.flarum.org
基于tag的轻论坛,界面比较美观。帖子可以对应多个tag,tag只能从给定的当中选择不能自行添加,发布文章不用跳页面很方便。不支持中文搜索,文章标题“中文测试”,搜索“中文”和“测试”都没结果,只有输入完整标题才能搜到。
Discourse : http://www.discourse.org
基于category的轻论坛,界面比较美观。帖子只能对应一个category,category为给定不可自行添加,发布文章不用跳页面很方便。基本不支持中文搜索,文章标题“中文搜索测试”,搜索任何“中文搜”开头的文字均可以搜到,其他情况搜不到,用英文也试了下,貌似是不论中英文都要超过三个字才会执行搜索命令。
Carbon Forum : http://www.94cb.com
好吧,国产。思想跟Flarum差不多,基于tag(话题)的轻论坛,界面还行。tag为自行添加,发布文章要跳页面,支持中英文搜索。
下面开喷。
为什么国外论坛框架不支持中文搜索?为什么Carbon Forum就能支持中英文?是不是老外看不起中文?如果我是国外的开发者,肯定也会让框架支持中文搜索的,毕竟中国人多啊用户群摆在那里,不明白,支持中文搜索很难吗?
1
est 2015-07-07 14:14:57 +08:00 via Android
支持中文搜索容易,做好很难。看词库分词水平。
|
2
Cavolo 2015-07-07 14:17:26 +08:00 via iPhone
如果中文内容多支持中文搜索还是很必要的
|
3
lingo233 2015-07-07 14:19:04 +08:00 3
老外:□□□□□□□□□□□□□□□□□□□
|
4
jnduan 2015-07-07 14:23:40 +08:00
老外:烫烫烫烫烫锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
|
6
lincanbin 2015-07-07 14:25:38 +08:00 1
英文的语法跟中文的不同,它是按空格划分的。
例如我到一个黄网,想搜美腿看看,我输入leg,结果找出来一个legal teen,这肯定不对吧?所以英文网站的搜索都是基于空格&符号分词进行的。 中文就相对简单得多,FullText或者Like(前者性能高但是中文支持不佳,后者性能较菜),或者分词然后取索引(这是最好的方案,但是对分词和索引能力要求较高,知乎水平不够但是强上这种)。 不同语言有不同的搜索实现,怎么可能一并实现? 如果Google没被墙,最好的方案其实还是放个Google的站内搜索。 |
7
hahastudio 2015-07-07 14:25:56 +08:00
中国程序员开始干就要解决编码问题
英语区的程序,只要能支持 ASCII 就好了么,其他的到时候再说呗 |
8
jnduan 2015-07-07 14:29:40 +08:00 1
正经回答下吧:
英文或者拉丁系?的语种,只要按空格和标点切开,做一下时态、语气的归一就可以比较好的解决搜索问题 但是类似中文或者日韩(统称CJK)这种的,按照上述的单字区分是不行的,否则就会出现搜索“和服”出现大量的“xxx和服务”,或者“北大”出来“中华北大街”。 由此衍生出来了二元分词,更进一步,很多分词器会内置一个特别大的词典,结合最短路径等算法求出一个分词的最优解,例如到底是“南京市 长江 大桥”还是“南京 市长 江大桥”。 当然最好的办法是基于海量的文本,结合词与词先后出现的概率、词性等因素,通过隐马尔可夫模型或者CRF求出短语全切分路径中的最优解。 |
9
choury 2015-07-07 14:30:22 +08:00
我自己写的东西我都不大愿意支持中文,更别说老外了,支持中文有多麻烦你不知道
|
10
ericls 2015-07-07 14:34:33 +08:00 via Android
中文分词难! !!
|
11
pein OP |
12
Luzifer 2015-07-07 14:42:52 +08:00 1
我说 V2EX 怎么不出搜索呢,@livid 可能搞不定中文搜索...
好歹把 google 搜索改为 AOL 搜呗, 它就是 google 。 看 v2ex 是翻墙呢还是不翻墙呢 |
13
lincanbin 2015-07-07 14:43:25 +08:00 3
Carbon Forum这个搜索功能其实是没什么诚意的。
https://github.com/lincanbin/Carbon-Forum/blob/master/search.php#L32 大家可以看到它的搜索功能的后台实现只有五十多行,这段代码估计写了一个下午最多了。 在低数量级的时候直接like匹配,数量级一高,则分词后然后取索引。 这些索引实际上还是在发帖时人工输入的,所以精确度还可以。 用户输入文章后,Carbon Forum利用RMM算法自动切分文章,从词库中筛选可能的词组,并给出这些词组,让用户选择合适的关键词作为标签。 用户人工选择的这些标签同时也就是该主题在高数量级下的索引了。 |
15
Agromania 2015-07-07 14:52:54 +08:00
做好搜索,每种语言的分词都不一样,同一种语言可能也会存在不同的分词算法,而且针对特定内容可能还需要特定的分词词库。
论坛程序本身提供基本的搜索功能对它来说任务已经完成了,要好的搜索你还是老老实实自己开发,分好词做好索引,搭建solr或者elastic search吧 |
16
gkiwi 2015-07-07 14:53:22 +08:00 1
你问问为什么elasticsearch为什么不内置中文分词吧。。
因为这块他们支持的话,都得需要相关的库,而他们看中文的感觉,就是这样子的。。。 الألقاب تنصف ميسي ببرشلونة وتعانده بالمنتخب |
17
pein OP @lincanbin 已感谢,放Google站内感觉是最偷懒有效的解决方式。
@hahastudio 意思说是老外还没考虑到支持中文搜索这一层吗? @jnduan 已感谢,你说的是中文搜索精确度的问题,现在是假设只要能搜索出相关的内容就算支持了,但问题是现在那两个外国论坛框架你搜索“北大”连“中华北大街”都出不来。。 @choury 这个还真不清楚,详见8L的答案,现在不要求精准搜索,能做到搜出“中华北大街”就算支持了。 |
18
Agromania 2015-07-07 15:02:58 +08:00
真的把搜索做好,光分词也是不够的,还要做自然语言分析,语义分析,同义词、近义词匹配
比如有个帖子标题是 “如何做搜索” 你搜“怎么做搜索”,是应该搜到呢还是应该搜不到呢? 还有个帖子标题是“怎么做绳索”,这个结果应该在上一个帖子前面呢还是后面呢?还是根本不应该出现呢? |
19
adoyle 2015-07-07 15:07:41 +08:00
手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。
|
20
Agromania 2015-07-07 15:15:21 +08:00 1
另外Flarum的搜索也只是简单地LIKE %%而已,之前他们用了MATCH AGAINST
由于Mysql本身的原因fulltext对中文支持有问题 现在他们master分支已经注释掉了,所以如果你用master的代码,搜“中文”是可以搜到“中文测试”的 https://github.com/flarum/core/blob/master/src%2FCore%2FRepositories%2FEloquentPostRepository.php#L73 |
22
pein OP @Agromania 自然语言分析这个确实,百度搜索XXX怎么样,就会出现XXX好不好,XXX如何之类的结果,这个要求就有点高了。我是在官方的demo上测试的,可能最新的版本已经能支持了吧。
|
23
GhostFlying 2015-07-07 15:30:04 +08:00 via Android
支持中文太麻烦,所以就无视了。。其实也蛮容易理解的
|
25
pein OP |
26
hahastudio 2015-07-07 15:45:28 +08:00 1
@pein 并不是,基本上只要是 Unicode,中文搜索只是挫一点,但还是可用的
但是如果你开始并不考虑编码,所有都是 ASCII,为了支持少数的 CJK,就要弄上 Unicode,如果网站字体有风格,是不是还得给中文备一个字体?太麻烦了 你想想,后端的存储、前端的展示、URL 之类的传输数据都需要改,想想就烦死了 再说英语区的人为什么会去考虑 CJK 的想法呢,他们默认大家都说英语,ASCII + emoji 足够了 哦,我又想起了 IBus 那类输入法的问题了 哦,对了,又有多少搜索引擎自带了提取英文单词的 stem 呢? |
27
abv 2015-07-07 15:51:18 +08:00
自己搭一个搜索引擎啊
|
28
elyamen 2015-07-07 15:55:21 +08:00
楼主,百度贴吧的干活?
|
29
pockry 2015-07-07 16:05:51 +08:00
你自己开发一个支持中文全文搜索的CMS就知道了,有些数据库根本都不支持中文搜索。
|
30
b821025551b 2015-07-07 16:11:38 +08:00
嗯,很难。
|
31
elyamen 2015-07-07 16:23:06 +08:00 1
忽然觉得看来看去,DZ最靠谱了,哈哈!
Dz虽然所谓臃肿,但该有的全有啊,而且那么的成熟,像一个虽然生过孩子,但依然风采依然的少妇,你谈了无数场恋爱,失恋过后,终究发现还是少妇最迷人。 |
32
blacktulip 2015-07-07 16:26:14 +08:00 6
科技处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作
|
33
jnduan 2015-07-07 16:46:44 +08:00
还别说,当年做分词,楼上的句子是必须要扔进去验证分词准确性的,23333
|
34
DreamCMS 2015-07-07 16:50:05 +08:00
@blacktulip 哈哈哈!!
|
35
DeutschXP 2015-07-07 16:53:39 +08:00
楼主挺矫情的。要不你弄个不渣渣的出来我们看看?
原因在一开始别人也就告诉你了,我觉得正确的思路应该是接着去深入了解这一块的技术难度和发展,然后再决定应该怎么做,如果你觉得自己有好的思路,那也可以尝试再造一个轮子。别的不说,即便经过这么多年的发展,即便已经有了许多相关的研究和产品,如果你说你今天找到了一个更有效的分词方法,你下半辈子都不用愁了,真的。 从你的描述看你还是写代码的,那咋表现的就像一个其他专业跳过来的PM呢,就是一副:别强调理由,我不听我不听,你说实现 A 有难度,那你实现个 B 给我看看啊,怎么 B 也实现不了,你们这群饭桶! ... 这样的表情。 国外的商业产品,vbulletin也算鼻祖了吧,当年在国内推广,为了中文分词也算是做出了相当的努力,但结果也是不尽人意,虽然当时我们为这么个玩意都花了不少钱,但该放弃还是放弃,基本都转 Discuz 了,基本vbulletin也就放弃中国市场了。 国内的Discuz 之类,这些是能满足你的需求的。国外的,你自己把搜索这一块的代码改写一下也 OK 的,当然,性能什么的就别太计较了。 |
36
minongbang 2015-07-07 16:56:06 +08:00
### v2评论支持markdown吗?
|
37
babyname 2015-07-07 16:56:44 +08:00
没有人发现这是个广告贴吗
|
38
otakustay 2015-07-07 17:27:11 +08:00 1
依照我的经验,其实普通的Lucene加个盘古分词,花上小一个月对论坛的主流话题和言论倾向做一些定制化,比如加点词到词库里之类的,搜索基本就没问题了
所以中文搜索真不是难事,我这种纯前端都干过,效果还行找了一些朋友试用都说没啥问题 但是后来因为那个系统的维护,我对于在Lucene和ElasticSearch上做性能优化这事充满了恐惧,同时充满恐惧的还有使用mongo…… |
40
iyaozhen 2015-07-07 17:44:54 +08:00
|
42
gilgamesh 2015-07-07 18:09:24 +08:00
V2EX 躺枪
|
43
chaucerling 2015-07-07 18:18:01 +08:00 1
开源项目为什么要帮你擦屁股
|
44
zgk 2015-07-07 18:21:28 +08:00 via Android
@Agromania 现在的还是用回match against了,看 http://discuss.flarum.org 里面的就是
@pein 我以前发过一个中文测试,里面有详细的总结 http://discuss.flarum.org/d/191/chinese-words-test/11 作者说会在搜索的部分留下插件的接口 |
45
ugmc 2015-07-07 18:27:54 +08:00
那些压根就没给中文用户准备的吧
|
46
realpg 2015-07-07 20:38:50 +08:00
你写的东西能兼容阿拉伯文搜索么?是不是你看不起阿拉伯人……
你指望一个连中文都没见过的老外去研究中文搜索分词问题是不是太强人所难了 别说中文搜索这种问题就中国人都没几个研究利索的 |
47
gqfBzoLVY3Wl4Tng 2015-07-07 21:10:06 +08:00 1
我表示能在这里看到这种人 真是奇迹
win10 你测试版不支持粤语语音是不是看不起广东人&香港人&大部分华侨? google 你各种不支持中国地区,是不是看不起大陆人? 香港人 你限购奶粉,是不是看不起大陆人? 楼主你是小学生? |
49
sobigfish 2015-07-07 21:26:35 +08:00
Flarum 连beta都没出,虽然后面也不大肯支持中文搜索,如果---没有国内的Contributor的吧---你自己不贡献代码有什么资格要求别人满足你的需求
|
50
bhqt 2015-07-07 21:57:51 +08:00
说了半天基本都是小众程序,别说这些程序了,就连PHBB,IPB,VB,到最近的XENFORO都不支持中文搜索,没搞懂有什么喷的,针对客户群不同
|
51
Perry 2015-07-07 22:43:22 +08:00
就一定要照顾到全世界人?
|
52
wbsdty331 2015-07-07 22:52:13 +08:00 via Android
妨碍咱的渣渣
|
53
Air_Mu 2015-07-07 23:01:04 +08:00
毕竟你国是贵国啊。
|
54
bismarck 2015-07-07 23:26:51 +08:00
他们没支持的必要啊,初衷比较纯粹。
处理CJKV是一件很麻烦的事情。建议把搜索业务单独出来用Solr之类来实现。 |
55
pixstone 2015-07-08 01:50:47 +08:00 via iPhone
国外的 项目没必要支持中文搜索吧
|
57
pein OP |
58
lilydjwg 2015-07-08 09:34:32 +08:00
@pein 因为他们不懂。因为懂的人大部分被墙困在墙内,不了解更没办法帮助他们。中文使用人数虽然非常多,但是能够「翻越长城、走向世界」的太少了。英文嘛,不管哪个国家,搞技术的人大部分都懂。
|
60
realpg 2015-07-08 11:03:10 +08:00
@pein 人数不代表什么,我举得阿拉伯语例子也不是为了跟你抬杠,对于一种你完全都无法理解的语言形式让你去开发适应性,尤其还是开源的不收钱的,换你你能干么?
中文使用人数是世界前两名没错,但是普遍适用性太差 @lilydjwg 说英文的支持,其实应该扩展到几乎所有单字节字母、字母组成多字词为基本元的语言,这种才是世界主流,其实中文放眼世界上看,绝对的非主流语言形式,就是单纯的人多而已。 PS 中文圈使用国际上程序的人更少,无论他是否支持中文。成型的系统,主要受众是略懂或者不懂代码的“站长”,程序员是其中的特殊一类,程序员会去挖掘境外的好程序,普通站长不会,他们甚至不会去选择一个说明都是英语的程序。因为中文圈选择程序过度的封闭,国外的程序也不会去主动适应多字节语言 PPS 既然都是开源的,撸主不满意,作为一个境内开发者,撸主可以尝试参加进开发,贡献代码 |
61
HowardMei 2015-07-08 11:35:12 +08:00
@blacktulip 你这个不仅考验电脑分词,也考验人脑分词,中文简化尚未完成,还需继续努力啊。
|
62
linxy 2015-07-08 13:04:14 +08:00
这东西还是挺难的,不然看知乎,都做这么大了,搜索功能还是跟屎一样。
|
63
linxy 2015-07-08 13:06:31 +08:00
放谷歌的话是不是可以加个反代什么的,不然也可以试试其它的搜索引擎。
|
64
pein OP @linxy 试了一下知乎的搜索,感觉还可以呀,搜索“程序员”还会出来“程序猿”的结果,说明它不仅仅是普通的匹配查询,求教为什么“跟屎一样”?
|
66
linxy 2015-07-08 13:18:18 +08:00
@pein 咦,感觉有优化了,以前没有做优化的时候……http://www.zhihu.com/question/19649523
|
67
NovemberEleven 2015-07-08 13:45:52 +08:00
@jnduan 哈哈哈
|
68
mfanming 2015-10-05 17:00:49 +08:00
carbon forum 脑残粉路过
|