用lucene与ictclas4j建立自己的全文检索
2009-03-13 12:30
211 查看
lucene是个不错的逆向索引模块,而且是开源java的(注意,它尽是个模块不是套搜索引擎系统,基于它的nutch系统才是定位于这一目标的)。lucene解决了建索引、检索、存储(分布式存储要靠另外个咚咚hadoop)等问题。但对于中文检索中的分词问题,没给出个好的解析器。
ictclas4j是个根据中科院的概率分析系统老版写的java分词系统。存在两个问题,一是只解决了单句分词问题,缺乏词的位置信息。二是存在个bug(包括中科院的那个VC版的),具体bug久了记不清,好像是在分有"/"的句子时会有问题。
将lucene与ictclas4j还要解决个解析器结构问题。主要是由于lucene处理是采用流式结构,就相当于一个字符流流过解析器,然后不断从中取出词。然后,ictclas4j是基于句的。因此需要有个缓冲,先从字符流取出一个完整的句子,然后交给ictclas4j分词,ictclas4j给出一串词,然后解析器一个给向lucene返回词,直到取完,然后再从头开始,读字符流、断句....
这其中有两个问题,一是从流中读数据,读过了就不能再读了,但你又无法确定读多少一句句子结束。这个问题可参看“编译原理”中词法分析中的双缓冲结构解决。二是断句问题。断句目前只有通过标点、空格等字符方式断。
另外,lucene用于网页分析,不妨用nekohtml.jar解析HTML文件提取其中的文本,其他开源的几个好像有点不够鲁棒。当然nekohtml.jar也不是全能的。
ictclas4j是个根据中科院的概率分析系统老版写的java分词系统。存在两个问题,一是只解决了单句分词问题,缺乏词的位置信息。二是存在个bug(包括中科院的那个VC版的),具体bug久了记不清,好像是在分有"/"的句子时会有问题。
将lucene与ictclas4j还要解决个解析器结构问题。主要是由于lucene处理是采用流式结构,就相当于一个字符流流过解析器,然后不断从中取出词。然后,ictclas4j是基于句的。因此需要有个缓冲,先从字符流取出一个完整的句子,然后交给ictclas4j分词,ictclas4j给出一串词,然后解析器一个给向lucene返回词,直到取完,然后再从头开始,读字符流、断句....
这其中有两个问题,一是从流中读数据,读过了就不能再读了,但你又无法确定读多少一句句子结束。这个问题可参看“编译原理”中词法分析中的双缓冲结构解决。二是断句问题。断句目前只有通过标点、空格等字符方式断。
另外,lucene用于网页分析,不妨用nekohtml.jar解析HTML文件提取其中的文本,其他开源的几个好像有点不够鲁棒。当然nekohtml.jar也不是全能的。
相关文章推荐
- 全文检索技术 lucene(二) 自己动手写一个搜索引擎
- 我心中的核心组件(可插拔的AOP)~第十四回 全文检索架构~终于设计了一个自己满意的Lucene架构
- lucene建立数据库全文检索
- 使用Lucene-1.3-final在web上建立全文检索应用
- 【Lucene】Apache Lucene全文检索引擎架构之入门实战
- Lucene:基于Java的全文检索引擎简介
- lucene 全文检索简介
- 细谈Lucene(一):初识全文资源的检索框架lucene
- Lucene学习总结之一:全文检索的基本原理(转载)
- lucene全文检索案例――0.2秒检索50万数据
- Lucene 开放源代码的全文检索引擎
- Lucene 全文检索实践
- Lucene:基于Java的全文检索引擎的简介
- Lucene学习总结(一):全文检索的工作流程
- 【手把手教你全文检索】Apache Lucene初探
- 全文检索Lucene总结1:Lucene的基本原理
- 使用Lucene-Spatial实现集成地理位置的全文检索
- 分布式搜索 Lucene全文检索基本原理
- Lucene:基于Java的全文检索引擎简介 (zhuan)
- 全文检索的基本原理之Lucene原理篇