Posts Tagged ‘SCWS’

SCWS中文分词


20 5月
因为在上一篇文章的末尾提到的,coreseek分词存在的问题,经过详细的测试,比较了原版sphinx和coreseek用同一种配置文件,都不分词索引的情况下,coreseek的速度仍然大幅度落后于原版sphinx,于是决定近期摒弃coreseek,换上原版的sphinx。但这样的话,coreseek提供的mmseg分词在搜索的时候也就无法继续使用了。(当然,除非你愿意2个都装,coreseek另外开端口只为分词服务- -) 基于这种情况,决定另外找一个分词的东东来支持搜索时的调用。使用传说中的Google搜了一下,基本锁定了几个分词的东东。 1. mmseg4j 同样是mmseg的算法,可惜是java版本的,功能上倒是比coreseek出品的那个mmseg要强大,新版本已经支持了max-word的分词方法,也就是“中华人民共和国”会被分成“中华人民 中华 人民 共和国 共和 国”类似这样的,可以说加大了搜索的智能性。 但可惜的是,对于我们这类纯php环境的朋友,要享受这个东东要付出的代价有点大。除了要整套java环境的支持,还要php-java-bridge这类方式的调用,无不让人望而止步啊。尝试了几个小时后,终于放弃抵抗,寻找其他方向去了。 mmseg4j对java的朋友可能会更有用吧,不过它的max-word分词强大程度还有待考量,我在linux下java调用测试的时候,结果也不是太满意,当然可能和词库有关吧,没有继续深究了。 2.ICTCLAS传说中的中科天玑出品,号称xx国际xx分词奖第一名,号称多少多少用户量,反正光环无数啦,虽然有共享版,但如果商用的话,似乎有不菲的费用。张宴自己搞的那套什么分词,也是基于这个东东的,尝试用他官网的demo测试一下,结果服务器链接错误 - -||| 怎么都感觉很有国企的风格啊。。。虽然似乎听起来算法不错,但想到我们最终还是要商用的,基本放弃。 3. SCWS,ftphp出品,ftphp貌似也是个搜索引擎,国人自己弄的?没太了解过反正。不过他的分词是开源的,号称自己是简易免费的分词,本来没抱什么太大希望其实,不过看他官方数据分词速度居然比楼上传说中的xx分词奖第一名的速度还要快。。。于是决定一试。 具体的文档可以参见官网(很详细很强大),下面我自己的一些心得,以备日后查看: 安装没什么花头,看doc的第一节照抄弄就行了,注意版本号换成最新的,然后因为我从来都是utf8的,所以所有gbk的地方替换掉,词库也只用了utf8的。值得注意的是,如果你和我一样要在php中调用的话,建议把php extension那段都做掉,起初我也偷懒想用php的exec去执行命令行就好了,结果比较下来,效率相差2个数量级。。。exec要上百毫秒,而extension只要几毫秒! 而最终xdebug分析下来,用extension的方式分词,比原来coreseek的mmseg也要快了1个数量级,笑~,估计近期就得和coreseek彻底说byebye了。 具体妙用大家自己看吧,maxwords也是支持的,感觉还不错,也可以另外加自己的词典,效率也很高,目前看来很完美。 ————————2010/5/31—————————————— 如果用txt自定义词库的话,第一次运行的时候,scws会自动把它编译成.xdb的格式,放到/tmp中去,也就是说,如果你的词典和我一样很大的话,而php的超时时间设定的又比较小的话,很有可能永远都无法生成出这个词典,也就是说,每次分词都会超时。 所以,建议大家第一次装好后,用命令行运行一下.txt的词库,类似: /usr/local/scws/bin/scws -c utf8 -r /usr/local/scws/etc/rules.utf8.ini -M 1 -i 中华人民共和国南京西路 -d /usr/local/scws/etc/dict.utf8.xdb:/usr/local/scws/etc/words.txt 之后:mv /tmp/scws-193b5b00.xdb /usr/local/scws/etc/ 以后用起来就是直接:  /usr/local/scws/bin/scws -c utf8 -r /usr/local/scws/etc/rules.utf8.ini -M 1 -i 中华人民共和国南京西路 -d /usr/local/scws/etc/dict.utf8.xdb:/usr/local/scws/etc/scws-193b5b00.xdb 这样就算第一次也不会很慢啦~

貓熊寶寶幼齒園

姜經緯的博客