本站小编为你精心准备了期刊论文的搜索技术研究与设计参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
摘要:为了解决期刊论文的大量存储、PDF文本解析、无法快速准确搜索等问题,文章首先使用HDFS分布式系统存储大量期刊论文,其次采用PDF抽取技术将非纯文本格式的PDF期刊转换为纯文本格式,然后分析比较主流中文分词器,最后采用倒排索引、分布式索引和优化相关度排序算法等,分析并设计了一个面向期刊论文的搜索引擎。实验结果表明,本文有效的解决大量论文的存储和访问,缩短建立索引时间,提高了搜索结果的准确性。
关键词:HDFS;信息抽取;倒排索引;分布式索引;相关度排序算法
0引言
随着信息技术的发展,期刊论文的数量正在快速增长。据统计,2014年SCI数据库收录世界科技论文多达176万篇。Scopus数据库收录的世界科技文献多达260万篇[1]。其他的期刊论文数据库收录的论文更是不计其数,如何建立一个存储大量论文的资源库并能快速从中获取有用的信息变得非常困难。本文围绕这一问题,分析设计出期刊论文的专业搜索引擎。采用HDFS存储大量期刊论文,通过PDF文本抽取技术将期刊论文转化为纯文本信息。再使用Lucene开源技术,先对期刊论文进行数据处理,然后采用分词和索引技术建立论文索引库,最后通过搜索技术对索引库进行搜索并采用优化的相关度排序算法对检索结果进行排序。
1搜索引擎与相关技术
1.1Lucene系统与源码架构
Lucene是开源框架,具有高性能和可扩展性,提供很多功能强大的API,比如查询分析、索引管理和检索结果等。①lucene.analysis语言分析器,用于切词。②lucene.document文档结构管理,与关系型数据库的表结构类似,在索引阶段使用。Document包含索引存储的基本单元:Document,Field等。③lucene.index索引管理,用于索引建立和删除。index是最重要的包,用于向Lucene提供建立索引时各种操作的支持,对切分出来的词建索引,查询时只需查询索引文件,不需查询正文,索引极大的提高搜索效率。④lucene.queryParser查询分析器,用于查询项之间的关键词间的与、或、非运算,并把查询语句转化成索引可以理解的语句。⑤lucene.search检索管理,通过查询项搜索结果。⑥lucene.store数据存储管理,包括底层的I/0读写操作。⑦lucene.util公用工具类,包含公用的方法和经过优化的数据结构[3]。
1.2HDFS分布式文件系统
Hadoop分布式文件系统是HadoopDistributedFileSystem(简称HDFS),具有高度容错性和可靠性,非常适合部署在大量廉价的机器上,用于大数据的存储和访问。HDFS是主从结构,包含一个名节点(Namenode)和多个数据节点(Datanode),每一个文件都会按照块(Block)存储在数据节点上,如图2是HDFS的系统结构图。Namenode:用于管理文件命名空间和客户端对文件的访问,同时保存文件系统树、树内所有文件的索引目录、记录文件所在具体Datanode的某个Block上的信息;Datanode:通常对应一个机器用来管理对应的文件存储,并定时向Namenode发送Block存储列表。Block:是数据存储的逻辑单元,默认大小是64MB,如果一个文件大于64MB,就会被分为多个Block,一个Block也会包含多个文件。每个Block默认会拷贝3个副本分别存储在3个不同的Datanode上,这样保证数据高容错性和可靠性。
1.3搜索引擎架构
采用技术包含:分布式存储、PDF信息抽取、分词器、倒排索引、分布式索引、搜索和优化的相关度排序算法。期刊论文搜索引擎的主要功能模块如下:①HDFS存储:对大量的期刊论文数据采用HDFS存储,解决海量存储和快速访问。②论文信息抽取:对期刊论文信息进行标准化为可以直接分词的纯文本,并保存TXT和PDF的对应关系表。③分词器:对抽取后的文本信息进行分词,使用最适合的分词器进行分词,保证分词结果更准确,分词完成后保存到本地文件里。④索引模块:对分词后的本地文件通过索引模块创建索引,生成待搜索的索引文件,由于索引时间太长,本文采用分布式索引缩短索引耗时。⑤搜索模块:针对用户输入的查询词,通过搜索模块对索引直接搜索,并将搜索结果通过相关度排序显示给用户。当显示详细信息,通过PDF和TXT对应表找到原始文件。⑥相关度排序:采用优化的相关度排序算法对索引结果进行排序,并将排序好的检索结果返回给用户。
2搜索引擎的设计与优化
2.1PDF信息抽取与转化期刊论文的格式是PDF,而Luene只能处理纯文本和数据,因此在使用Lucene对文档建立索引前,需要将PDF论文提取为纯文本的信息。本文采用开源工具PDFBox将PDF转化为TXT文件,通过此方法抽取后TXT文本文件保留原PDF格式信息。建立索引时,直接对转化后TXT文件创建索引;在搜索时,通过文件名和原PDF文件一一对应的方式关联到源文件。
2.2分词器的比较与选择
英文等西方语言按照空格来分的,Lucene自带的分词器能够很好的处理,而中文字不能通过空格来分或者简单的单个字来分。主要的中文分词器有StandardAnalyzer、ChineseAnalyzer、CJKAnalyzer、IK_CAnalyzer、PaodingAnalyzer。接下来分别从分词的准确性和分词的效率上来分析这几个分词器。
2.3倒排索引
倒排索引(Invertedindex)是文档检索系统中最常用的数据结构,是一种以关键词作为索引关键字和链表访问入口的索引结构,用来存储全文检索下某个关键词在一个文档或者一组文档中的存储位置的映射[5]。倒排索引文件描述了词项(terms)集合元素和文档(docs)集合元素及对应关系的数据结构。
2.4索引设计
①从论文数据库中获取大量论文数据,将大量的论文数据保存在HDFS系统库里。②通过PDF解析器把期刊论文数据解析成纯文本的TXT文档对象,并保存PDF和TXT文件的对应关系表,方便查找PDF原文。③在创建索引时,设置好索引的起始和结束位置,读取索引的TXT列表。④对文档进行分词时,先用PaodingAnalyzer分词。从文本中提取本文块也称为语汇单元(To-ken),然后得到项Term,由Term生成Filed的对象。⑤将Field对象添加到Document中,生成Docu-ment对象。⑥调用IndexWriter类的addDocument(),把Document对象加入索引。⑦创建Directory类的对象,把索引存储在Di-rectory上。⑧由IndexWriter执行close()结束索引创建过程并保存本次索引的起始和结束位置。
2.5检索设计
针对上面的索引,通过输入查询关键词,直接对索引内容进行快速搜索。①对用户输入的查询关键词,通过查询分析器QueryParser进行分词处理,QueryParser将查询表达式转换为Lucene的查询类型。②生成Query查询对象,QueryParser由分词后的查询关键词生成的,使用MultiFieldQueryParser可以支持多个关键词搜索。③通过IndexSearcher的search()对Query对象读取索引文件,并将搜索结果返回在Hits结果集中。④采用改进的相关度排序算法对Hits结果集进行排序,并显示结果摘要信息给用户。⑤需要查看原文时,通过PDF和TXT文件对应表找到原文PDF直接显示。在进行一次检索时,首先不会全部显示所有的结果,会将与查询关键词匹配度最高的前100条结果的ID放在一个缓存里返回给用户,如果这100条不能满足用户的需求,会再次检索,这次的缓存会比上一次大一倍。Hits结果集的对象是采用延迟加载返回结果的,所以在查询文档时,Hits会在内部对索引又进行一次搜索,最后才将结果返回到页面显示。这也是搜索引擎比较精彩的地方。
2.6相关度排序算法以及优化
本文采用相关度排序算法,将用户最想看到的结果优先显示。Lucene的相关度排序算法基本公式:score(q,d)=∑tind(tf(tind)*idf(t)2*boost(t.fieldind)*lengthNorm(t.fieldind))*coord(q,d)*queryNorm(q)该分值的计算方式为查询语句(q)中每个项(t)与文档(d)的匹配分值之和。它是一个大于等于0的浮点数,评分越大说明文档和用户的查询越匹配,将评分高的论文排在前面。其中:tf(tind)是项频率因子,文档(d)中出现项(t)的频率;idf(t)表示项(t)在倒排文档中出现的频率,用来衡量项的“唯一”性,出现的频率较高的项term具有较低的idf;boost(t.fieldind)是域和文档的加权,域加权因子的默认值是1.0;lengthNorm(t.fieldind)是域的归一化(Normalization)值,表示域中包含项的数量,对于该因子,更少的词汇单元能获得更大的词汇单元;coord(q,d)是协调因子,文档(d)中包含查询项(q)的个数;queryNorm(q)是归一化参数[2]。(1)针对期刊论文这个特殊的数据源,此公式有两点不足:①对于期刊论文检索来说,查询词在一篇论文中的位置至关重要。而从上述公式以及公式的各个因子解析中发现都没有考虑到查询项(q)在文档(d)中的位置因素。通常情况下论文分为三个大的部分:标题、摘要、正文。查询项出现在标题的往往比出现在正文中要重要的多,所以查询项在文档中的位置因素也是影响相关度排序的重要因素之一。②论文的数量更是非常庞大,鱼目混杂。比如同一专业的同一论点的几个论文,由SC、IEEI、核心期刊收录的论文要比一般不知名的期刊的论文要重要的多,所以每一篇期刊论文,所在的期刊也是影响相关度排序的重要因素之二。
3实验结果的分析与比较
基于本文的理论分析,实验硬件环境:IntelCoreDueCPUi52.5GHz和8GB内存;软件环境是:JDK1.8、Tomcat8.0、Myeclipse10和Win7等,基于20万篇期刊论文进行抽取分析,创建索引,搜索等功能。(1)在论文PDF信息抽取方面,实验选择了4组数据进行抽取,如表5所示,本文的抽取方法具有很好的准确率,基本在99%以上,达到实验目的。(2)使用Lucene创建索引时,随着数据量的增加,创建索引的耗时也随着增加,当数据大小为19M,索引耗时约为30分钟;当数据大小为31M,索引耗时约为1个小时。为了缩短索引时间,本文采用分布式索引技术,采用Elasticsearch将索引分片存储,每个片段都保存了两个副本,所以通过空间换时间的方式。如表6所示,在空间上,索引文件大小却是原来索引文件的5倍左右,在时间上,所以耗时缩短为原来的1/20。(3)衡量搜索引擎最重要的两个指标就是准确率和召回率。准确率(PrecisionRate)又称为“精度”、“正确率”,是检索出的相关文档数与检索出的文档总数的比率,用来衡量检索系统的查准率;召回率(RecallRate)又称为“查全率”,是检索出的相关文档数和文档库中所有的相关文档数的比率,用来衡量的是检索系统的查全率。
4结束语
本文先通过分布式文件系统解决大量期刊论文的存储和访问,接着针对论文的数据进行数据抽取和转化为纯文本信息,然后结合分词、索引、搜索等技术设计了一个搜索引擎系统。本文的难点有两个:一是采用HDFS解决大量期刊论文的存储和访问,二是采用PDFBox对期刊论文进行抽取和转换;本文的创新点有两个:一是针对索引时间太长,采用分布式索引技术大大缩短了创建索引的时间,二是论文优化了相关度排序算法提高检索的准确率。本文还分析各个分词器优缺点,从而选取最适合本系统的分词器。实验表明,本文有效的解决了期刊论文文本信息抽取的问题,节省创建索引时间,提高了期刊论文搜索的准确率和召回率,用户可以更快速准确查到期刊论文。本系统还有一些待改进的地方,如搜索效率等,将进一步研究与改进。
参考文献:
[1]刘佳音.国内高校数字资源利用效能综合评价研究[D].武汉:武汉大学,2013.
[3]唐铁兵,陈林,祝伟华.基于Lucene的全文检索构建的研究与实现[J].计算机应用与软件,2010,27(2):197-230.
[4]张文元,周世宇,谈国新.基于Lucene的地名数据库快速检索系统[J].计算机应用研究,2017,34(6):1756-1761.
[5]郑榕增,林世平.基于Lucene的中文倒排索引技术的研究[J].计算机技术与发展,2010,20(3):80-83.
[6]赵长欣.基于数字版权唯一标示符解析系统的设计与实现[D].北京:北方工业大学,2012.
[7]郭茂盛,张宇,刘挺.文本蕴含关系识别与知识获取研究进展及展望[J].计算机学报,2017,4(4):889-910.
作者:郭峰;韩云凤 单位:北方工业大学计算机学院