最新更新:
drupal 6已经推出许久,很长时间没有精力为开源社区做点什么。籍着此次drupal 6.1升级的机会,将中文分词模块按照原来的理想做了有史以来最大的一次改进,相信改进的内容还是能让人振奋一下:
- 终于实现了预索引的分词字典文件,使用B+ Tree算法组织,可以快速进行基于文件的查找。获得的好处有:现在字典文件可以不再载入内存,使用B+树字典时基本不消耗内存,这样可以采用巨型字典,也可以避免大家的php内存超限制。
- 提供了B+树搜索用的简体中文巨型字典,本人专门生成的,准确性大大提高。
- 优化了算法,现在匹配循环比原来至少少三分之一。
- 提供了正向最小化和逆向最小化两种新的匹配算法,相对最大化匹配算法,其匹配循环可以减少一半以上,而结果也在可接受的范围。
- 提供类搜索的词长度选项,这个对性能有一定的影响,需要大家测试下看多少最为合理,因为目前提供的词库最长只有四个字,因此也只有2,3,4的长度选项才有意义。因为诗词的关系,今后也许会提供最长7个字的词库
- 修正了原来程序中的分词错误,现在对中英文数字混合字符串处理的正确率大大提高了。
结合上面这些改进,性能至少超过原来的十倍,内存消耗从巨大降到很小,CPU占用率也很低(这些都基于我的VPS,我是lighttpd,大家可以提供反馈,看看你们的情况)。使用时请关闭搜索设置里的“简单中日韩处理”。
目前还没有提交到drupal的cvs,大家先用我自己的下载吧。
下载:csplitter for 5.x [1] csplitter for 6.x [2]
以下为旧版内容:
Drupal 4.6 版Search模块采用分词预索引方式,不再使用数据库SQL Like查询,在数据量越来越大的时候前者无疑更具性能上的优势。但是,Drupal并没有中文分词功能,在我的主机环境中对中文UTF-8分词是完全错误、不能使用的。没办法,难道又回到SQL Like的老路上去?现在改用了PostgreSql并不熟悉是否能全文检索,MySql倒是有,不过也没用过。权衡再三,还是自己写一个分词模块吧,呵呵。
没想到写起来并不是很困难就能达到比较实用的程度。有了正确的分词后就有正确的Search_index表数据,然后“相似节点”链接和自动Tags都好做了,你可以参见本站效果。
如果想测试我们的中文分词模块,点这里 [3]。不妨试一下,结果蛮有趣的。
update:目前已支持Drupal 4.7