clucene - a c++ search engine http://sourceforge.net/projects/clucene/
【相关文章:《The C Programming L】传统的全文检索都是基于数据库的,sql server oracle mysql 都提供全文检索,但这些比较大,不适合单机或小应用程序(mysql4.0以上可以作为整合开发),mysql也不支持中文。 【扩展阅读:《c++ primer》读书笔记10】
【扩展信息:《The C Programming L】 后来得知apache有一个开源的全文检索引擎,而且应用比较广,lucene是apache旗下的java版的全文检索引擎,性能相当出色,可惜是java版的,我一直在想有没有c或c++版的,终于有一天在http://sourceforge.net 淘到一个好东东,clucene!clucene是c++版的全文检索引擎,完全移植于lucene,不过对中文支持不好,而且有很多的内存泄露,:p cluene不支持中文的分词,我就写了一个简单的中文分词,大概思路就是传统的二分词法,因为中文的分词不像英文这类的语言,一遇到空格或标点就认为是一个词的结束,所以就采用二分词法,二分词法就是例如:北京市,就切成 北京 , 京市。这样一来词库就会很大,不过是一种简单的分词方法(过段时间我再介绍我对中文分词的一些思路) ,当然了,在检索时就不能输入“北京市”了,这样就检索不到,只要输入:“+北京 +京市”,就可以检索到北京市了,虽然精度不是很高,但适合简单的分词,而且不怕会漏掉某些单词。 我照着clucene的分词模块,做了一个chinesetokenizer,这个模块就负责分词工作了,我把主要的函数写出来chinesetokenizer.cpp:
token* chinesetokenizer::next() {
while(!rd.eos())
{ char_t ch = rd.getnext(); if( isspace((char_t)ch)!=0 ) { continue; } // read for alpha-nums and chinese if( isalnum((char_t)ch)!=0 ) { start = rd.column();return readchinese(ch);
} } ... 下一页