全文检索
前段时间做一个全文搜索的dd
使用OracleText来建立全文索引和实现全文检索
然后在数据库端建立分页存储过程来进行全文检索
信息抽取
这样,只要处理表示层的一些问题了
包括,抽取检索文本中与用户需求最想关的部分显示
高亮显示搜索关键字等
那么,用户最想看到的文字即信息量最大的文字,
和高亮显示的搜索关键字,
应根据什么来决定呢?
显然,应该以包含信息的最小单元来决定
在中文系统中,这个最小单元就是中文的词语
中文分词
关于中文分词,国内有很多研究也有不少成果
在我们系统中,使用的是一种非常简单的方式:
基于字典的逆向中文分词
字典文件可以使用中文加加的词库
可以在其网站上获得
匹配算法很简单,
在搜索系统中时间需求很高
所以只匹配2字和3字的词语(后面我们会弥补忽略多字词语的误差)
每次探测3个字,不是词语是探测2个
然后加入助词的判断,即3个字(ABC)不是词语,
但是(AB)和(BC)都是词语
这时可根据A和C的词性来判断
我的办法是新建一个助词词典
在其中来检索助词词性
词语反向组合
为了弥补前面分词时追求速度带来多字词语分词丢失的误差
我们将分词结果进行反向组合
将相邻分词结果组合,并丢弃最终的单字结果
组合后词语顺序按信息量递减排列
即设分词结果为(AB)(C)(DE)
组合为(ABC)(CDE)(AB)(DE)
一方面这样做也能使长的词语(一般这种词语信息含量大)靠前排列
这样,分词的准确率大大提高
且性能提升明显:
搜索系统中,关键字一般不长
将10个左右关键字组合的时间
远小于在字典中探测4字以上词语的损耗。