毛笔厂家
免费服务热线

Free service

hotline

010-00000000
毛笔厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

主题搜索引擎的探究

发布时间:2020-07-21 17:49:06 阅读: 来源:毛笔厂家

搜索引擎是本上世纪90年代兴起的信息检索技术,经过十多年的发展,它已经渗透到了人们生活的各个领域。然而,传统的搜索引擎,也即通用搜索引擎,考虑了所有人的需求,即不管用户是希望找计算机论文方面的信息还是要找篮球运动的信息都一致对待,这样的搜索引擎需要耗费巨大的资源而速度较慢。并且,由于通用搜索引擎所面向的领域太广泛,某些利于用户提高检索精度和查全率的技术,比如自动分类,在其中的应用效果不理想。

本文引用地址:在Lucene API的基础上开发面向主题的搜索引擎[1]是一种有效、低成本的选择,因为Lucene全文数据库采用倒排文件索引技术[2],所以查询速度优于关系型数据库,而且可以免费下载。基于Lucene的优势已有很多企业将其应用到自己的搜索引擎中,如Eclipse开发环境的内部搜索引擎就是用Lucene构建的。但由于Lucene自带的中文分词只能将中文切成单字不能实现词语的切分,因此,符合需求的中文分词器有待人们去开发,并将其加入中文分词模块来实现更高效的检索。

1 全文检索引擎Lucene

1.1 Lucene简介

Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

Lucene是一个高性能、可伸缩的信息搜索(IR)库。它使你可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的成熟的、免费的开源项目,是着名的ApacheJakarta大家庭的一员,并且基于在Apache软件许可[ASF,License].同样,Lucene是当前与近几年内非常流行的免费的Java信息搜索(IR)库。

1.2 Lucene系统结构

Lucene系统结构[2]如图1所示。从图1中可以看到,Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中,直接操作索引文件的索引核心又是系统的重点。Lucene将所有源码分为7个模块(在Java语言中以包来表示),各个模块所表示的系统部分见图1.需要说明的是:eryPaser是arch的语法解析器,不被系统之外实际调用,因此没有当作对外接口看待。从面向对象的观点来考虑,Lucene应用了最基本的一条程序设计准则:引入额外的抽象层以降低耦合性。首先,引入对索引文件的操作ore的封装,然后将索引部分的实现建立在dex之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口arch及alysis.

Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。

1.3 Lucene程序运行机制

Lucene系统功能强大,实现复杂,但从根本上主要包括2个主要功能:(1)建立索引库[4],也就是将待索引的纯文本内容经切分词后索引入库;(2)检索索引库,即根据查询条件从索引库中找出符合条件的文档。

在研究建立索引库时首先要知道如图2所示的Lucene索引机制的架构。

从图2可以看出,Lucene索引过程分为3个主要操作阶段:将数据转换成文本;分析文本;将分析过的文本保存到索引库中。首先,Lucene使用各种解析器对各种不同类型的文档进行解析,如对于HTML文档,HTML解析器会做一些预处理的工作,过滤文档中的HTML标签等,然后输出文本内容,接着Lucene的分词器从文本内容中提取出索引项以及相关信息。

检索索引库的运行逻辑如下:

(1)输入查询条件,如用户希望查询到含有词编程和入门但不含词Java的记录,则输入条件为编程+入门-Java;查询条件输入搜索器(arch),搜索器里有1个查询解析器(eryParser),搜索器调用这个查询解析器来解析查询条件。

(2)查询条件编程+入门-Java被传送到查询解析器中,解析器将对编程+入门-Java进行分析,首先分析器解析字符串的连接符,即加号和减号,然后调用语言解析器(alysis)对每个词进行切词,一般英文将按空格来切词,最后得到的查询条件表示为:编程AND入门AND NOTJava.

(3)查询器根据查询条件检索事先已建立好的索引库,得到查询结果,并返回结果集ts,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)。

25 DISTINCT 去重

GItHub一些使用技巧

10 MySQL 的数据类型(1)