Loading...

    AD: Jobsdigg | 很棒的男装店 | 网站地图

如何让Zend_Search_Lucene支持中文分词

可转载 但必须以超链接形式标明文章原始出处和作者信息
网址: http://www.blogkid.net/archives/1001.html

初探Lucene,学习之中。

昨天下雨,我家的百兆宽带突然就不能上了。所幸昨天还写了第1000篇,不然就遗憾了。不能上网也许并不是坏事,虽然我看不到了想看的人,进不去了我的GTD,可是让我得以把精力放在一些感兴趣的技术上。

昨天我ProjectCamel有点阶段性的成果。得益于泛域名和出神入化的URLRewrite,已经可以准确地显示出站点加载时的桥页。所以今天我放下了活儿,把最后一天留给自己,想看一下Zend_Search。我一直很想好好研究中文分词,可是这个暑假下来居然没有看过一下子Lucene,除了在北京和馒头空对空地来过几次分词的讨论,其他真的一点收获都没有。

不过自己也一直庆幸,我越等到后面,Lucene对中文支持就越完美,就不用自己去操心了。怀着这样的心情,我今天开始看Zend_Search_Lucene了。我成功地把自己以前做ACM写的程序编制成了索引,随便查了两下,效果很让人满意。可是当我把一些中文文档索引之后,问题就来了,根本啥都查不出来 :( 。不是说Nutch(一个可以拿来做搜索引擎的开源程序,和Lucene貌似是一个人写的,世间的大牛不是很多哈)和Lucene都完美支持中文了么?我顿时有种被骗的感觉。

可是那也得做。网上搜来搜去,搜到的基本都是06年上半年的文章。不少牛人用自己的方式在Zend_Search_Lucene中实现了中文分词, 可看看都觉得头大,有的甚至还得给Zend_Lucene打Patch。终于搜到一个今年6月的文章,读了之后,感觉作者在PHP上的功底很不错。文章请看此处,可笑的是。查资料的过程中 ,也发现不少人转载从来不标明出处,唉,国内就这情况,重复内容太多。

那篇文章写得很不错,分词的部分逻辑也相当清晰。使用了简单的二元分词,这样生成的索引会相当大,但至少是可以支持中文的。可是我用来索引文档的时候,都只能索引第一行(处理换行有些问题),然后还有一些字母被无情过滤掉了。所以我对程序做了一些修改, 由于太长了,我就不放在这个blog上了,请移步到我的技术blog查看我修改之后的程序。

需要注意的是,这个分词实现只支持UTF-8编码的。如果需要索引内容的是别的编码格式,可以改一下程序中的某些部分。

二元分词在遇到牛扑这样规模的数据时,没有任何实际意义。特别是在Zend_Search_Lucene的索引优化并不完善时。所以在这个方面,还有很深的挖掘的空间。

关于分词的知识,可以看一下这篇文章这篇文章(希望大家不要像他这样转载不加出处)。

逆向最大匹配,应该是下一个要钻研的了。

1 Response to “如何让Zend_Search_Lucene支持中文分词”


  1. [...] 自从前些日子写了关于Zend_Search_Lucene的东西,以及中文分词方面的一些尝试(请看这里和这里)。得益于WP优良的SEO效果,很多朋友们通过Google、百度搜到了我的blog上,邮件里、MSN上自然也有不少讨论。 [...]

Leave a Reply