当前位置:文档之家› 基于Lucene的PDF文档的全文检索的实现

基于Lucene的PDF文档的全文检索的实现

《工业控制计算机}2012年第25卷第5期 1O3 基于Lucene的PDF文档的全文检索的实现 mplementation of PDF Full-text Based on Lucene 黄江平 黄理灿 徐 玲(浙江理工大学信息学院,浙江杭州310018) 摘要 在Lucene的全文检索中,直接对PDF文档进行全文检索几乎是不可能的。在实际应用中又需要对大量的PDF文档 进行检索,通过Xpdf工具先对PDF文档转换为TXT文本,然后对TXT文本建立索引,在进行检索时通过文件名实现和原 始PDF文档的一一对应,最终实现PDF文档的全文检索功能,同时还能实现对PDF文档所检索的包含关键词的内容进 行高亮显示,实现全文检索的功能,通过实际项目应用,检索效果能够达到很好的效果。 关键词:Lucene,PDF,全文检索,高亮显示 Abstract In the Lucene full-text search in PDF documents directly to the full-text search is almost impossible.In practice,they need to retrieve a large number of PDF documents,this article first.through the Xpdf tools convert PDF documents to TXT text and then the T×T text indexing。search through the file name during the implementation and the original PDF document one by one corresponds to.and ultimately the full—text search of PDF documents。but also enables PDF documents to re. trieve content that contains keyword highlighted,to achieve full-text search function. Keywords:lucene,PDF,full-text search,highlight 数字档案馆所提供的信息查找平台和方式多种多样,但是 通过全文检索的方式进行相应的文档检索,还需要进行深入研 究。本文着重讨论了通过对图书资料已扫描的PDF文档进行全 文检索的研究和应用,为数字档案馆利用全文检索技术提高检 索能力进行了应用研究。 1 Xpdf和Lucene工作原理 随着PDF文档的应用越来越广泛,怎样提取和利用PDF文 件内部的信息资源就成为另一研究的热点。由于Lucene只能处 理文本和数据,而且Lucene的内核本身只处理java.1ang. String、java.io.Reader对象和本地数字类型。因此,使用Lucene 索引数据时,必须先从数据中提取纯文本格式信息,以便Lucene 识别该文本并建立对应的Lucene文档 ]。因此我们使用Xpdf软 件把PDF文档转换为TXT文本文件,Xpdf实际上是一种PDF 文件阅读软件,它具有丰富的功能,除了能够转换PDF文件中的 图片、文字信息外,还能把PDF格式转换为Postscript语言或者 文本文件格式,即常见的1_)(T文件。Xpdf要把PDF文件转换为 文本文件的命令式pdffotext命令。它在使用是可以有多项选择 功能,支持个性化设置,最方便的是可在在程序中调用cmd命令 来执行pdftotext命令。其语言规范是:pdftotext[options][PDF— fjJe】[text—file】 ]。这款工具的优点在于它能够保留愿PDF文件的 格式信息,并在转换后的文本文件中体现出来,而且转换后生成 文本文件,而不是二进制文件。这为我们使用Lu0ene为PDF文 档建立索引提供了非常有利的帮助。 Lucene是Apache软件基金会Jaka ̄a项目组的一个子 项目,是一个开放源代码的全文检索工具包,它提供一个全文检 索引擎的架构,软件开发人员可以利用该工具包建立完整的全 文检索引擎…。要实现基于Lucene的全文检索,需要先对所要 检索的文件进行索引的建立,然后才能根据关键词进行查询。 Lucene索引和查询的总体结构图如图1所示。Lucene的工作 原理是先对我们已经转换好的文本建立索引,然后基于这些索 引进行查询,因此实现搜索功能就要依赖前期的索引操作。使用 Lucene索引数据 时,必须先从数据 中提取纯文本格 式信息,以便 Lucene识别该文 本并建立对应的 Lucene文档。一 旦建立起Lucene 文档和域,就可以 调用IndexWriter 对象的addDocu— ment方法将数据 SEARCHER (查询) lNDEXER (索引) OUERY PARSE,R DOCUMENT (重询 墨L ——一(塞挡缉麴1—SEARCHER ANALYZER (查询器) f (语言分析器) ACCESS INDEX (访问索引) sTORAGE (存储器) BDD FS RAM 图1 Lucene的索引和查询结构图 传递给Lucene进行索引操作了。对输入数据分析完毕后,就可 以将分析结果写入索引文件中。Lucene将输入数据以一种倒排 索引的数据结构进行存储,在进行关键词快速查询时,这种数据 结构能够有效利用磁盘空间。Lucene使用倒排数据结构的原因 是:把文档中提取出的语汇单元作为查询关键词,而不是将文档 作为中心体,这种思想很想图书索引与页码对应关系。这就是建 立索引的提取文本和创建文档、分析文档和向索引添加文档的 几个步骤。当然还可以对索引进行添加、更新和删除操作。建立 索引后,我们就可以进行检索了。使用Lucene进行搜索操作非 常简单。首先建立一个IndexSearcher实例,它负责打开索引, 然后使用该实例的search方法即可进行搜索操作。在程序后 台,search方法会快速完成大量工作。它会访问所有候选的搜索 匹配文档,并只返回符合每个查询约束条件的结果,最后,它会 收集最靠前的几个搜索结果并返回给调用程序。搜索结果是通 过相关性进行排序的,也就是说通过每个结果文档于查询条件 的匹配程度进行排序的,Lucene的相似度评分公式如下式 ]: ∑【ln。(tf(t in d)xidf(t) xboost(t.field in d)xlengthNorm(t. field in d)xcoord(q,d)xqueryNorm(q) 

该公式至所以被称为相似度评分公式,是因为使用它的目 104 基于Lucene的PDF文档的全文检索的实现 的就是用来衡量查询语句和对应的匹配文档之间的相似程度。 该分值计算方式为查询语句(q)中的每个项(t)与文档(d)的匹 配分值之和。 2 PDF全文检索的实现 本文在实现PDF全文检索时,整个系统主要分为转换模 块、索引模块、检索模块和主程序模块四个部分。转换模块主要 负责把PDF文件转换为T×T文本文件,重点是通过CMD命令 在程序中实现对pdftotext命令的调用,从而实现对PDF文档 的转换。索引模块是通过调用Lucene中的IndexWriter实现对 转换后的T×T文本文件进行索引,主要是对文件名、文件路径 和文件内容进行索引,并保存索引。检索模块是主要通过 Lucene中的Inde×Searcher、QueryParser以及search等实现 通过关键词对相应的文档进行检索实现。主模块主要实现相应 的设置,同时调用转换模块、索引模块和检索模块实现总体功 能。总体模块图如图2所示。下面对转换模块、索引模块、检索模 块和主程序模块做详细介绍。 墨童量整阳 薹 

图2总体模块图 2 1转换模块 通常,可以使用命令行调用Xpdf软件来实现对PDF的转 换,但是,这在程序运行时非常麻烦,而且要对大量的PDF文件 转换时,会有非常大的任务量。我们可以在程序中调用CMD命 令来对某一文件夹下面的所有PDF文件进行全部转换,这样就 可以非常方便。 2.2索引模块 为了对文档进行索引,Lucene提供了五个基础类:Docu— ment、Field、IndexWriter、Analyzer、Directory。首先需要设置生 成索引的目录,其次建立索引器indexwriter,生在索引对象,把 转换的T>(T文件建立索引;然后建立信息字段对象Field,比如 文件路径、文件名以及全文等内容;在文档被索引之前,还需要 对文档内容进行分词处理,这部分工作是由Analyzer类来实现 的,而Directory类比奥斯Lucene的索引的存储的位置。索引 过程也可以理解为四个阶段:有一系列需要索引的文件,被索引 文件经过语法分析和语言处理形成一系列词(Term),经过索引 创建形成词典和反向索引表,通过索引存储将索引写入磁盘,最 好完成索引的完成[5 。 2 3检索模块 Lucene提供的搜索接口跟索引的接口一样都提供基本的 核心类,主要有以下几个类:IndexSearcher、Term、Query、Ter— mQuery、TopDocs。IndexSearcher类用于搜索由IndexWriter 类创建的索引:这个类公开了几个搜索方法,它是连接索引的中 心环节。Term对象是搜索功能的基本单元,与Field对象类似, Term对象包含一堆字符串元素:域名和单词(或域文本值)。 TermQuery用来匹配指定域中包含特定项的稳定,也是简单的 查询类型之一。TopDocs类是一个简单的指针容器,指针一般 指向前N个排名的搜索结果,搜索结果即匹配查询条件的文 档。TopDocs会记录前N个结果中每个结果的int doclD(可以 用它来恢复文档)和浮点型分数。通过引入高亮包和编写高亮模 块,可以提取检索内容并按照按照关键词进行高亮显示…1。 2.4主程序模块 在主程序中,先设置需要转换的PF文件的路径,然后设置 转换后的T×T的文本路径,然后设置索引保存路径,同时还要 设置Xpdf的存放路径。在转换及索引完成后,开始按照关键词 进行检索,因此在主程序中设置了关键词输入的模块部分。当然 在主程序模块中还需要设置一定的提示语句,这样在检索的过 程中更加易于理解和跟踪程序的运行过程。 3实验结果 通过实际测试运行,各个模块能够稳定运行,同时对大规模 的PDF文档能够很好的处理,建立索引速度较为迅速。在实际 检索中,能够根据关键词进行全文检索,通过和google桌面检 索等检索工具比较,发现基于Lucene的全文检索能够对PDF 文档进行全文检索,而这些桌面工具只能根据文件名来实现索 引和检索,检索如图3所示。图中,先对PDF文档进行TXT的转 换,然后开始对转换后的T)(T文本建立索引,然后提示用户输 入需要检索的关键词,然后开始检索。检索结果按照所检索到的 文档数量、文件名称、文件路径、包含关键词的内容摘要以及摘 要注意提示进行显示,其中包含关键词的部分用<b>关键词</ b>这样的格式显示,在网页的情况为加粗显示。而这些桌面工 具只能根据文件名来实现索引和检索,因此实现结果能够达到 全文检索的要求,对中英文关键词均能够实现检索。 第一步:转换pdt文件为cxt文本文件。 转换结束,奉发总共有z 6个pdf文件被转换为cx£文奉文件。 第二步:索引已转换宪成的txt变布文件。 索引结菜,车次总共有2 6个txc盘布文件被索引。 第三步:按照关键词进行幢熏 请输入要植景的关键词:中国 开始按关键词’中圈・搜索文档 ... 此发幢索总共找到2个匹配关键谓:’中国。的文档。 文件名称 文件路径:D:、Nork\Vorkgh0p、PdfFilc5、PDF文件文布内容主E取研凭-pdf 检索艚妻: (1.<b>中国</b>科掌皖国家科学图书馆兰州: 注意:幢煮雕蔓的关键谛鼙分按熙<b>中固</b>最示,在阻夏中显示为疆体离亮。 文伴名称:pD瞍伴格式研究.pdf 文件路程:D:、Work\ ̄orkShop\PdfFile 、PDF文件格式研竞pdf 检索摘要: ‘b)中圉(,b>高新技术企业(总第1l’期 注意:幢熹摘要的关键词部分按JI}!<b>中固</b>最示,在时期中显示为粗体高亮。 幢絮结束,此次共检索了2个文档,总共花费219毫秒。 图3检索结果图 4结束语 在用Xpdf转换时,对PDF文档的图片信息、图表信息等不 能转换,只能提取文字、数字等内容,同时在转换的T×T中格式 不是很整齐,在提取内容显示时,存在空格等,致使内容不是很 紧凑,这需要下一步工作中进行优化处理。总之,本文通过中间 手段的方式,实现了PDF文档的全文检索,从而在数字档案馆 的建设中具有非常大的实用价值。 参考文献 [1]Apache Software Foundation:Lucene Syntax,http://jakarta a— pache.com/lucene/docs [2]麦肯德利斯,等.Lucene实战[M]牛长流,等,译北京:人民邮电出 版社,2011 [3]杜德生,田小军Lucene应用中Pdf文档文本数据提取方法研究[J] 自动化技术与应用,2009,28(3):50—51 [4]张宏松.基于Lucene的web站内英文PDF文档全文检索研究[D] 阜新:辽宁工程技术大学,2007 [5]周锦程,王丹,等.基于Lucene的全文检索系统的研究与实现[J].计 算机技术与发展,201 1,23(3) [收稿日期:2011 11 3O]

相关主题