首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pein
V2EX  ›  程序员

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

  •  
  •   pein · 2015-07-07 14:07:10 +08:00 · 8836 次点击
    这是一个创建于 1857 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    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就能支持中英文?是不是老外看不起中文?如果我是国外的开发者,肯定也会让框架支持中文搜索的,毕竟中国人多啊用户群摆在那里,不明白,支持中文搜索很难吗?

    68 条回复    2015-10-05 17:00:49 +08:00
    est
        1
    est   2015-07-07 14:14:57 +08:00 via Android
    支持中文搜索容易,做好很难。看词库分词水平。
    Cavolo
        2
    Cavolo   2015-07-07 14:17:26 +08:00 via iPhone
    如果中文内容多支持中文搜索还是很必要的
    lingo233
        3
    lingo233   2015-07-07 14:19:04 +08:00   ❤️ 3
    老外:□□□□□□□□□□□□□□□□□□□
    jnduan
        4
    jnduan   2015-07-07 14:23:40 +08:00
    老外:烫烫烫烫烫锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
    zangbob
        5
    zangbob   2015-07-07 14:25:38 +08:00
    @lincanbin 此处有表扬贴子哦……

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

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

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

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

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

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



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

    看 v2ex 是翻墙呢还是不翻墙呢
    lincanbin
        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算法自动切分文章,从词库中筛选可能的词组,并给出这些词组,让用户选择合适的关键词作为标签。



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

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

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

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

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

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

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

    还有个帖子标题是“怎么做绳索”,这个结果应该在上一个帖子前面呢还是后面呢?还是根本不应该出现呢?
    adoyle
        19
    adoyle   2015-07-07 15:07:41 +08:00
    手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。
    Agromania
        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
    kingcos
        21
    kingcos   2015-07-07 15:21:59 +08:00 via iPhone
    @adoyle 笑喷…
    pein
        22
    pein   2015-07-07 15:24:57 +08:00
    @Agromania 自然语言分析这个确实,百度搜索XXX怎么样,就会出现XXX好不好,XXX如何之类的结果,这个要求就有点高了。我是在官方的demo上测试的,可能最新的版本已经能支持了吧。
    GhostFlying
        23
    GhostFlying   2015-07-07 15:30:04 +08:00 via Android
    支持中文太麻烦,所以就无视了。。其实也蛮容易理解的
    pein
        24
    pein   2015-07-07 15:32:01 +08:00   ❤️ 1
    @Luzifer 我现在是配置PAC ,根据某list来判断,自动切换。
    pein
        25
    pein   2015-07-07 15:39:46 +08:00
    @adoyle
    @kingcos
    @jnduan
    搜了下锟斤拷,结果。。。
    大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之后的黑框里跳出一排烫烫烫烫烫,当时就震惊了。你们能想象一个来自小城,在大学之前没怎么接触过电脑更不懂代码的孩子当时内心的恐惧吗?我真的以为这是电脑过热发出的警告,于是我弯下腰把插头拔了。—— From. chengr28
    hahastudio
        26
    hahastudio   2015-07-07 15:45:28 +08:00   ❤️ 1
    @pein 并不是,基本上只要是 Unicode,中文搜索只是挫一点,但还是可用的
    但是如果你开始并不考虑编码,所有都是 ASCII,为了支持少数的 CJK,就要弄上 Unicode,如果网站字体有风格,是不是还得给中文备一个字体?太麻烦了
    你想想,后端的存储、前端的展示、URL 之类的传输数据都需要改,想想就烦死了
    再说英语区的人为什么会去考虑 CJK 的想法呢,他们默认大家都说英语,ASCII + emoji 足够了

    哦,我又想起了 IBus 那类输入法的问题了

    哦,对了,又有多少搜索引擎自带了提取英文单词的 stem 呢?
    abv
        27
    abv   2015-07-07 15:51:18 +08:00
    自己搭一个搜索引擎啊
    elyamen
        28
    elyamen   2015-07-07 15:55:21 +08:00
    楼主,百度贴吧的干活?
    pockry
        29
    pockry   2015-07-07 16:05:51 +08:00
    你自己开发一个支持中文全文搜索的CMS就知道了,有些数据库根本都不支持中文搜索。
    b821025551b
        30
    b821025551b   2015-07-07 16:11:38 +08:00
    嗯,很难。
    elyamen
        31
    elyamen   2015-07-07 16:23:06 +08:00   ❤️ 1
    忽然觉得看来看去,DZ最靠谱了,哈哈!
    Dz虽然所谓臃肿,但该有的全有啊,而且那么的成熟,像一个虽然生过孩子,但依然风采依然的少妇,你谈了无数场恋爱,失恋过后,终究发现还是少妇最迷人。
    blacktulip
        32
    blacktulip   2015-07-07 16:26:14 +08:00   ❤️ 6
    科技处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作
    jnduan
        33
    jnduan   2015-07-07 16:46:44 +08:00
    还别说,当年做分词,楼上的句子是必须要扔进去验证分词准确性的,23333
    DreamCMS
        34
    DreamCMS   2015-07-07 16:50:05 +08:00
    @blacktulip 哈哈哈!!
    DeutschXP
        35
    DeutschXP   2015-07-07 16:53:39 +08:00
    楼主挺矫情的。要不你弄个不渣渣的出来我们看看?
    原因在一开始别人也就告诉你了,我觉得正确的思路应该是接着去深入了解这一块的技术难度和发展,然后再决定应该怎么做,如果你觉得自己有好的思路,那也可以尝试再造一个轮子。别的不说,即便经过这么多年的发展,即便已经有了许多相关的研究和产品,如果你说你今天找到了一个更有效的分词方法,你下半辈子都不用愁了,真的。
    从你的描述看你还是写代码的,那咋表现的就像一个其他专业跳过来的PM呢,就是一副:别强调理由,我不听我不听,你说实现 A 有难度,那你实现个 B 给我看看啊,怎么 B 也实现不了,你们这群饭桶! ... 这样的表情。

    国外的商业产品,vbulletin也算鼻祖了吧,当年在国内推广,为了中文分词也算是做出了相当的努力,但结果也是不尽人意,虽然当时我们为这么个玩意都花了不少钱,但该放弃还是放弃,基本都转 Discuz 了,基本vbulletin也就放弃中国市场了。

    国内的Discuz 之类,这些是能满足你的需求的。国外的,你自己把搜索这一块的代码改写一下也 OK 的,当然,性能什么的就别太计较了。
    minongbang
        36
    minongbang   2015-07-07 16:56:06 +08:00
    ### v2评论支持markdown吗?
    babyname
        37
    babyname   2015-07-07 16:56:44 +08:00
    没有人发现这是个广告贴吗
    otakustay
        38
    otakustay   2015-07-07 17:27:11 +08:00   ❤️ 1
    依照我的经验,其实普通的Lucene加个盘古分词,花上小一个月对论坛的主流话题和言论倾向做一些定制化,比如加点词到词库里之类的,搜索基本就没问题了

    所以中文搜索真不是难事,我这种纯前端都干过,效果还行找了一些朋友试用都说没啥问题

    但是后来因为那个系统的维护,我对于在Lucene和ElasticSearch上做性能优化这事充满了恐惧,同时充满恐惧的还有使用mongo……
    Ouyangan
        39
    Ouyangan   2015-07-07 17:32:02 +08:00
    @Luzifer 图片好评
    @elyamen +1
    iyaozhen
        40
    iyaozhen   2015-07-07 17:44:54 +08:00
    有个学长 @huip 做的东西有支持中文搜索: http://guwen.stuzone.com/

    当时他说过,基本的思路是发帖时就生成关键词(开源的中文分词库),然后建立倒排索引。
    lincanbin
        41
    lincanbin   2015-07-07 18:04:45 +08:00
    @babyname 你这样恶意揣测楼主我可就不高兴了,毕竟我是Carbon Forum的作者,我并不认识楼主。
    gilgamesh
        42
    gilgamesh   2015-07-07 18:09:24 +08:00
    V2EX 躺枪
    chaucerling
        43
    chaucerling   2015-07-07 18:18:01 +08:00   ❤️ 1
    开源项目为什么要帮你擦屁股
    zgk
        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 作者说会在搜索的部分留下插件的接口
    ugmc
        45
    ugmc   2015-07-07 18:27:54 +08:00
    那些压根就没给中文用户准备的吧
    realpg
        46
    realpg   2015-07-07 20:38:50 +08:00
    你写的东西能兼容阿拉伯文搜索么?是不是你看不起阿拉伯人……
    你指望一个连中文都没见过的老外去研究中文搜索分词问题是不是太强人所难了

    别说中文搜索这种问题就中国人都没几个研究利索的
    pierrec
        47
    pierrec   2015-07-07 21:10:06 +08:00   ❤️ 1
    我表示能在这里看到这种人 真是奇迹
    win10 你测试版不支持粤语语音是不是看不起广东人&香港人&大部分华侨?
    google 你各种不支持中国地区,是不是看不起大陆人?
    香港人 你限购奶粉,是不是看不起大陆人?
    楼主你是小学生?
    kaneg
        48
    kaneg   2015-07-07 21:23:51 +08:00 via iPhone
    @pein 这个段子太搞笑了
    sobigfish
        49
    sobigfish   2015-07-07 21:26:35 +08:00
    Flarum 连beta都没出,虽然后面也不大肯支持中文搜索,如果---没有国内的Contributor的吧---你自己不贡献代码有什么资格要求别人满足你的需求
    bhqt
        50
    bhqt   2015-07-07 21:57:51 +08:00
    说了半天基本都是小众程序,别说这些程序了,就连PHBB,IPB,VB,到最近的XENFORO都不支持中文搜索,没搞懂有什么喷的,针对客户群不同
    Perry
        51
    Perry   2015-07-07 22:43:22 +08:00
    就一定要照顾到全世界人?
    wbsdty331
        52
    wbsdty331   2015-07-07 22:52:13 +08:00 via Android
    妨碍咱的渣渣
    Air_Mu
        53
    Air_Mu   2015-07-07 23:01:04 +08:00
    毕竟你国是贵国啊。
    bismarck
        54
    bismarck   2015-07-07 23:26:51 +08:00
    他们没支持的必要啊,初衷比较纯粹。

    处理CJKV是一件很麻烦的事情。建议把搜索业务单独出来用Solr之类来实现。
    pixstone
        55
    pixstone   2015-07-08 01:50:47 +08:00 via iPhone
    国外的 项目没必要支持中文搜索吧
    543400
        56
    543400   2015-07-08 07:23:20 +08:00 via Android
    @lincanbin _(:з」∠)_ 看到群主
    pein
        57
    pein   2015-07-08 09:10:46 +08:00
    @Perry
    @Air_Mu
    @pixstone
    @pierrec
    @realpg
    就事论事,其实我想表达的是英文和中文是世界上使用人数排名第一第二的语言,而且一个代表西方,一个代表东方,如果一个开源项目想要做到国际化的话,支持一下排名第二的中文我觉得完全可以有啊,其它的语言不支持就不支持了,毕竟支持所有的语言是不现实的。
    lilydjwg
        58
    lilydjwg   2015-07-08 09:34:32 +08:00
    @pein 因为他们不懂。因为懂的人大部分被墙困在墙内,不了解更没办法帮助他们。中文使用人数虽然非常多,但是能够「翻越长城、走向世界」的太少了。英文嘛,不管哪个国家,搞技术的人大部分都懂。
    sunyang
        59
    sunyang   2015-07-08 10:19:23 +08:00
    @pein 你有这想法那就去给它增加功能啊,反正是开源的。
    realpg
        60
    realpg   2015-07-08 11:03:10 +08:00
    @pein 人数不代表什么,我举得阿拉伯语例子也不是为了跟你抬杠,对于一种你完全都无法理解的语言形式让你去开发适应性,尤其还是开源的不收钱的,换你你能干么?

    中文使用人数是世界前两名没错,但是普遍适用性太差


    @lilydjwg 说英文的支持,其实应该扩展到几乎所有单字节字母、字母组成多字词为基本元的语言,这种才是世界主流,其实中文放眼世界上看,绝对的非主流语言形式,就是单纯的人多而已。


    PS 中文圈使用国际上程序的人更少,无论他是否支持中文。成型的系统,主要受众是略懂或者不懂代码的“站长”,程序员是其中的特殊一类,程序员会去挖掘境外的好程序,普通站长不会,他们甚至不会去选择一个说明都是英语的程序。因为中文圈选择程序过度的封闭,国外的程序也不会去主动适应多字节语言

    PPS 既然都是开源的,撸主不满意,作为一个境内开发者,撸主可以尝试参加进开发,贡献代码
    HowardMei
        61
    HowardMei   2015-07-08 11:35:12 +08:00
    @blacktulip 你这个不仅考验电脑分词,也考验人脑分词,中文简化尚未完成,还需继续努力啊。
    linxy
        62
    linxy   2015-07-08 13:04:14 +08:00
    这东西还是挺难的,不然看知乎,都做这么大了,搜索功能还是跟屎一样。
    linxy
        63
    linxy   2015-07-08 13:06:31 +08:00
    放谷歌的话是不是可以加个反代什么的,不然也可以试试其它的搜索引擎。
    pein
        64
    pein   2015-07-08 13:16:02 +08:00
    @linxy 试了一下知乎的搜索,感觉还可以呀,搜索“程序员”还会出来“程序猿”的结果,说明它不仅仅是普通的匹配查询,求教为什么“跟屎一样”?
    pein
        65
    pein   2015-07-08 13:18:14 +08:00
    @linxy 我感觉反代可以有,毕竟现在搬到墙内了,爬墙技能和工具不是必需的,少一个搜索功能是硬伤。
    linxy
        66
    linxy   2015-07-08 13:18:18 +08:00
    @pein 咦,感觉有优化了,以前没有做优化的时候……http://www.zhihu.com/question/19649523
    NovemberEleven
        67
    NovemberEleven   2015-07-08 13:45:52 +08:00
    @jnduan 哈哈哈
    mfanming
        68
    mfanming   2015-10-05 17:00:49 +08:00
    carbon forum 脑残粉路过
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2347 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:14 · PVG 00:14 · LAX 09:14 · JFK 12:14
    ♥ Do have faith in what you're doing.