微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 主题搜索引擎的探究

主题搜索引擎的探究

时间:06-05 来源:互联网 点击:

引库,得到查询结果,并返回结果集lucene.search.Hits,Hits类似于JDBC中的ResultSet.

2 中文分词

因为Lucene提供的两个中文分析器(ChineseAnalyzer和CJKAnalyzer)只能将中文切成单汉字,这对于绝大多数中文用户来说很不方便,因此有必要开发适合自己的中文分析器。本系统基于字符串匹配的分词技术实现了一个中文分词器。它是按照一定的策略将待分析的汉字串与1个充分大的词库中的词条进行匹配。若在词库中找到某个字符串则匹配成功(识别出1个词)。按照扫描方向的不同,串匹配分词方法[5]可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配。本研究使用的方式是采用基于字典的双向匹配算法,即需要进行正向和逆向2次匹配。传统的方法都是先进行1次正向匹配,然后再进行逆向匹配,每次只有1个方向在进行匹配,而另1个方向的匹配过程需要第1个结束后才开始。本文的设计方法是把多线程技术引入到中文分词程序当中[6].因此可以在正向匹配时,同时并发地执行逆向匹配,提高了运行速度和执行效率。以下为正向匹配和逆向匹配都将调用的核心程序:

载入处理完的文本,以字符数组的形式存储起来。建立2个方法:(1)查找在文本中出现的词,并且返回词的长度;(2)用来统计词出现的次数和控制程序进度。

方法1:public int zhaoCi(char[] ch,int juli,TreeMap[] tmp)。

ch数组表示的是文本内容,juli是词的长度, TreeMap数组存储不同长度的词。

方法2:public synchrONized void ciPinTongJi(HashMaphm,char[]ch,int size,TreeMap[] tmp)。

方法2是并发执行的,正反匹配都需要这个方法。HashMap存储字典中词的第1个字,ch数组表示的是文本内容,size是文件的长度,TreeMap是数组存储不同长度的词,按照2个字、3个字、多个字的存储顺序存储; 而且方法2是对外的接口,方法2调用方法1,并利用方法1返回的结果得到分词的结果和词频结果。当从文本读入1个字时,使用contain( )来判断HashMap中是否存在这个字的映射,如果存在就取得长度等于字典中最长词的一段内容,在TreeMap数组中进行查找,如果在TreeMap中找到对应的映射则对应的键值加1,输出时在词后面加上分割符号'',然后继续重复前面的步骤,直到文件结束,退出;如果TreeMap中不存在,那么i+1,读取下一个字,重复前面的步骤,直到文件的结尾,退出,程序结束。

正向匹配程序流程图如图3所示。

3 全文检索引擎Lucene的应用

Lucene本身只是一个组件,若想让Lucene真正起作用,还得在Lucene基础上进行必要的2次开发[7].下面的方案是对Lucene的应用研究,在本系统实现过程中要解决的关键问题有:数据加工及文本数据库的实现;全文数据索引;全文数据检索和结果处理。

3.1 运行环境

操作系统:Windows NT/2000/xp;开发语言:Java、JSP;开发环境:MyEclipse6.5;API插件:Lucene2.3.2(Jakarta Lucene是一套免费的开放源代码,由 Apache Jakarta开发);Web服务器:Apache的Tomcat6.0.

Lucene在Java环境下运行,因此首先要安装jdk并设置环境变量JAVA_HOME,还要安装tomcat6.0.到Lucene的官方网站下载1份拷贝(笔者下载的是最新版2.3.2),下载后将得到一个名为lucene-2.3.2.zip和apache-ant-1.7.0-bin.zip的压缩文件,将其解压即可。

3.2 系统结构

该应用分为3部分:(1)数据库发布平台,包括服务器、Java环境、Lucene API、中文分词模块;(2)HTML文件倒排档生成系统;(3)服务器端执行的JSP程序和用户界面。系统结构如图4所示。

3.3 Lucene的扩展

对于Lucene组件包,为了能够支持中文,要进行修改。首先将改写后支持中文的分析包IKAnalyzer.jar加入到发布包Analysis包中。解开Lucene.zip,在解开的目录srcdemoorgapacheLucenedemo下打开IndexHTML. java.在第1处import org. apache. lucene. analysis. standard. StandardAnalyzer;下面加1行import org.apache. lucene. analysis. IKAnalyzer;,把第2处writer=new IndexWriter (index, new StandardAnalyzer (),create);注释掉,换成writer=new IndexWriter(index,new ChineseAnalyzer(), create);解开Luceneweb. War,释放出configuration. jsp和result. jsp以及web. xml.编辑configuration. Jsp,找到indexLocation变量,赋值成/index(或者用户自己建立的索引的目录名称);编辑result. Jsp,找到Analyzer analyzer=new StopAnalyzer();删除或者注释掉,改成Analyzer analyzer=new org. apache. lucene. analysis. IKAnalyzer();.这样就扩展了Lucene的中文分词的功能。

Lucene并没有

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top