浅析基于Lucene框架的网络论坛信息分析与实现

时间:2022-09-22 12:18:31

【前言】浅析基于Lucene框架的网络论坛信息分析与实现由文秘帮小编整理而成,但愿对你的学习工作带来帮助。LIU Fei (Tongji Unversity, Software College, Shanghai 201804, China) Abstract: Nowadays, millions of data that are related salary, payment, bonus, company commentary exist in forum, post bar, BLOG. For example, at every school-forum, companies' sal...

浅析基于Lucene框架的网络论坛信息分析与实现

摘要:在当今互联网的各大论坛,帖吧,个人空间,BLOG中存在着非常多的网友的薪水,职业,等方面的信息。如在各大高校的BBS中,每年到应届生加入求职大军时,相当一部分学生会就各公司的薪水状况,福利待遇进行询问以及讨论,而一部分得到公司职位的学生亦会在一定程度上公布公司的薪水待遇状况。这一类各公司的薪水信息,对于以后学生的求职,职业人士跳槽,具有相当的参考价值。同样,在各大论坛,互动社区中,都会有相当大的薪水信息帖。

很不幸的是,这些薪水讨论帖子淹没在浩淼的互联网中,并且通过互联网在大陆近十年来发展积淀,此类信息已经达到了海量。利用成熟的Lucene框架,文本检索理论(Information Retrieve),以及相关的分词,归类,索引技术,将这些信息,按照网友提交的关键字进行抽取与分析。按网友需要搜索出具备参考价值的职业信息。为网友的求职,跳槽,提供决策支持。

关键词:网络;数据;搜索;中文切词;公司待遇;公司评论;Lucene

中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)25-1386-02

Web Forum Data Analyzing Based on Lucene

LIU Fei

(Tongji Unversity, Software College, Shanghai 201804, China)

Abstract: Nowadays, millions of data that are related salary, payment, bonus, company commentary exist in forum, post bar, BLOG. For example, at every school-forum, companies' salary, bonus and commentary always are most hot topic. When undergraduate are in searching of job, that information is one of most valuable reference. Particularly, some student who take company's offer usually post the offer's information on his school-forum or his private space such as BLOG, or QQ zone, etc. Unfortunately, that information usually disappears by data growing. And, for the past several decades, hundreds of millions of above information have being increasingly accumulated on Internet. Study show that a framework named Lucene is a fully capable of realizing data analyzing, splitting character and response the right result to customer by those requesting include salary inquiring, company inquiring etc.

Key words: Internet; Search; Chinese split; Salary; Lucene

1 引言

随着十数年互联网在大陆地区的发展,网民数量,互联网技术的使用已经得到了相当大的提高与进步。与此相伴的,是网络数据呈几何级的增长。这其中,有数以亿计的信息存在在浩淼的网络中,特别是一些相当有参考价值的数据信息。例如,关于一个公司的薪水信息,职业发展信息,福利,评论等信息,这类信息广泛地存在与网络中的论坛,个人空间等互联网载体中。而当今的各大搜索引擎,因为其Page Rank的规则,使的一些具备相当价值的此类信息不能被准确的搜索到,而一些信息获取框架的发展成熟,使得重新建立基于此类信息的搜索引擎以及搜索规则成为可能。例如lucene 全文索引框架,同比其他同类框架,是一款相当成熟的建立索引开源技术架构。

2 Lucene 初探

2.1 Lucene 介绍

Lucene是一款基于JAVA语言开发的开源全文检索工具包,它提供基本的分词,索引建立,全文搜索等功能API,使得全文检索功能开发者可以按照项目所需,开发基于需求意图的全文检索项目。其主要构架如图1。

如图1所示,基于Lucene的应用,其核心是索引(index)的建立于使用。Lucene对采集到的数据建立索引,然后按照用户需求,对用户的搜索请求进行分析及切词,搜索所建立的索引,反馈给用户搜索结果。

2.2 建立索引

在Lucene 中,提供了基本的创建索引所需的类,其中两大最重要的类分别为:

2.2.1 IndexWriter

此类是建立索引的核心,它除了创建索引以外,还可以将待索引文档添加到存在的索引中

其中,代码片段如下所示:

2.2.2 Analyzer

此类是一个词法分析(分词)的抽象基类,提供给具体实现分词等功能的分析器继承之用。它作为IndexWriter类构造函数的参数之一,在建立索引的时,利用此分析器对文本内容按照分析器的具体实现进行分词与归类。如图2可知,类StandardAnalyzer即为Analyzer的子类,提供标准化的分词。

需要特别提出的是,对于支持中文分词方面,目前Lucene还未有提供对于中文分词的Analyzer,但是在大陆已经有爱好者或机构开发出了基于Analyzer的中文分词类,其中较为常用的就是MMAnalyzer。

综上,以上介绍的两大类,是建立全文索引的关键,其中对于分析器Analyzer,用户可以按照自己所需要的分词规则进行开发,这里面就设计到编译原理里面的词法分析以及相应的分词规则。在此,不做深究。

2.2.3 部分实现代码

基于以上关键类的描述,其余实现全文索引建立的代码如下所示:

说明:按照inputDir所输入的文件路径,读取需要建立索引的文件。

接下来,就应该为所读取的文件建立索引,流程为,遍历files文件数组,为每一个文件名,以及文件内容建立索引关键实现代码如下:

在为每个文件建立索引时,都需要生成一个Document对象,此为Lucene生成索引的对象核心。接下来,如图所示,为每个文件名建立索引,即生成Field对象,如要对内容生成索引,则需生成新的Field对象,并且添加到Document对象中去。

*Field.Store为Field是否存储标识,参数类型分为:yes(存储),no(不存储),COMPRESS(压缩后存储)

*Field.Index 为 Field 是否索引标识,参数类型分别为:no(不需要索引),tokenized(表示该field先被分词再索引),un_tokenized(先不分词,但是要建索引),no_norms(进行索引,但不使用Analyzer,同时禁止其参加评分,重要是为了减少内存的消耗)

2.3 检索索引

Lucene 提供了多种对索引检索的方式,在此,着重介绍的是布尔(BooleanQuery)搜索.顾名思义BooleanQuery就是布尔型查询,在布尔型查询的对象中,包含一个字句的组合,各种子句间都是“与”,“或”这样的布尔逻辑。因此,布尔查询就是一个由多个字句和字句间的布尔逻辑所组成的查询。所有的查询都最终都可以分解为布尔查询。

2.3.1 关键代码分析

IndexSearcher:是检索索引的核心,所有的搜索都要通过此类的实例实现。

其中参数INDEX_STORE_PATH为索引存放的路径,此与建立索引时存放的路径一致。

Term:代表每个待搜索的关键字以及需要搜索的Field。初始化代码如下图所示:

其中参数content,表示待搜索索引的Field名称,此与建立索引时生成Field的名称一致。

TermQuery:表示各个Term对索引的查询。

BooleanClause.Occur.MUST:表示对应的字段查询在搜索中必须出现。

BooleanClause.Occur.MUST_NOT:表示对应的字段查询在搜索中不能出现。

综上,就将两个查询字段组合成了布尔查询。

Hits:此search方法的返回参数,其包含每个搜索得到的Hit对象,即为搜索结果集。其中,iterator()方法可以将此结果集转换为Iterator对象,即可遍历内容结果。

2.3.2 QueryParser

QueryParser提供给用户,当输入的不是单个词条,而是一段话或者词条组合的时候,按照所提供的Analyzer进行分词搜索的功能。可参见如下示例:

如上代码所示,当用户提交的查询语句为短句是,则提供相应的的Analyzer:StandardAnalyzer,对短句进行分词查询。

其中,如果需要所得各分词在内容中为“与”的关系,则设置parser的Operator为AND_OPERATOR。当然亦可以设置为“或”关系,此标识符参数为QueryParser提供。设置代码如下所示:

3 技术展望与小结

按照该项目要求,主要集中搜索的网络内容是各大高校论坛,个人空间,职业咨询站点等,故当使用网络内容抓取工具时,集中在此类域站点提取页面内容,并可以设置关键字,优先提取一些包含公司关键字的内容,如薪水,公司名,福利等。

同时,在对待页面内容搜索排名时,应该按照此项目需求,设置一整套评分标准,对包含公司信息较多的页面,排名应该越高,应该越能满足用户的搜索意图。

Lucene自从诞生到现在,已经发展到2.0的版本,其技术框架,提供的功能API已经相当的成熟与完善,而且其开源版本,更是可以让开发者更有效率的开发自己的搜索项目。并且,随着互联网技术的进一步发展,快速开发自己所需的搜索引擎逐渐会成为可能与现实。

互联网迅猛发展了十余年,其中蕴藏了海量的信息,其中有糟粕,但更多的,却是一些相当有价值,但很难被人找到的信息。

而当今世面上的各大搜索引擎,因为其PageRank的规则是面向整个网络的信息,所以对很大一部分特别价值信息的网络内容搜索结果不能很好地满足特定用户的搜索意图。这,就给Lucence等全文检索框架提供了非常良好的施展空间的平台:开发者可以迅速灵活地为各类信息的需求者开发搜索平台,找到被遗忘在浩瀚网络中的特定信息。

参考文献:

[1] Gospodnetic O,Hatcher E. Lucene in Action[M]. 谭鸿,译. 北京:电子工业出版社,2005.

[2] 李晓明.搜索引擎原理技术与系统[M].北京:科学出版社,2004.

[3] RIJSBERGEN J.Information Retrieval[M]. Boston:Butterworth-Heinemann, 2003.

上一篇:SQL中的空值探讨 下一篇:高职《计算机文化基础》课程教学探讨