基于双层PDF和Lucene技术的全文检索研究与实现(2)
3.1创建双层PDF全文数据库
建设双层PDF全文数据库是实现全文检索的基础,减少对纸质档案的使用,从某种意义上来说,也保护了纸质档案。市场上已经有许多产品或者生产线,可以实现档案的双层PDF数字化加工。在档案数字化加工过程中,将纸质档案扫描加工后的图片转换处理成双层PDF文档,在挂接到档案管理系统中的相应案卷和卷内文件目录之后,原文的存放地址信息自动存入数据库的原文关系表中,通过ID号(Recid)与案卷和卷内文件目录Recid对应,对档案文档的Text层文本内容及其元数据等相关信息建立永久联系,形成数据包。
基于节约成本和利于管理考虑,对双层PDF文档进行了格式固化,它的Image层是图片格式,与原文件保持一致,可以阅读和打印;Text层支持内容自由复制。为了使系统处理数据方便,我们通过后台程序把上传的其他文本格式的文档也自动转换成双层PDF文档。双层PDF全文数据库不仅为档案在线编研、数据挖掘、开展档案主动服务等打下了基础,全文数据直接利用还使档案得到保护和永久性保存。
3.2创建索引
数字化加工后的双层PDF文件和数据包通过调用全文检索子系统内核函数建立对应的索引文件,抓取和解析数据。本系统中的创建索引的过程,实际上就是将双层PDF文档中的text层、文档对应的卷内目录和案卷目录及有关元数据(也可以说是结构化和非结构化数据)信息提取并创建索引文件的过程。目前,主要有3种索引技术:签名、后缀数组、倒排文档。Lucene采用的是倒排文档,倒排文档的性能和效率都非常高,因而被广泛采用。
索引过程可分为4个阶段:准备待索引文档和数据;对文档进行语法分析和语言处理形成一系列词(Term);经过处理形成词典和倒排文档(索引);通过存储过程将索引写入索引库。具体过程分析如下:
(1)建立索引器indexWriter,生成index对象,把Document对象加到索引中来。
(2)建立信息字段对象Field,描述文档的属性,如文件标题和内容可以用两个Field对象分别描述。
(3)建立文档对象Document,用来描述文档,内容可以从DOC、EXCEL、TXT、HTML、XML等文档及关系型数据库等多种途径获得,一个Document对象由多个Field对象组成的。也可以把一个Document对象看作数据库中的一个记录,而每个Field对象就是记录的一个字段。我们通过编写Object2DocumentUtil.class类来实现数据对象与Document对象的转换。
在文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer类来完成。Analyzer类是一个抽象类,它有多个实现,针对不同的语言和应用需要可以选择适合的Analyzer,本系统中采用的是StandardAnalyzer。Analyzer把分词后的内容交给IndexWriter来建立索引。在分词时,如果用来进行索引的文档不是纯文本,先使用OCR或者其它技术转换成纯文本才能再进行操作。值得注意的是,同一索引,用来建立索引与查询的分词器必须是同一个,才能保证得到正确的查询结果。
(4)将Field添加到Document里面,再将Document添加到IndexWriter里面。
(5)优化indexWriter对象,Directory类代表了本系统索引的存储位置,它是一个抽象类,有两个实现:一个是FSDirectory,它表示一个存储在文件系统中的索引的位置;其次是RAMDirectory,它表示一个存储在内存当中的索引的位置。
创建索引的方法如下:
public void createIndexWriter(String sDir){try{
boolean flag=true;∥标记是否重新建立索引,true为重新建立索引,false表示增量索引
File indexDir=new File(sDir);∥索引文件存放目录
Directory dir=SimpleFSDirectory.open(indexDir);∥创建Directory
Analyzer sAnalyzer=new StandardAnalyzer(Version.LUCENE30);∥分词器
indexWriter=new IndexWriter(dir,sAnalyzer,flag,MaxFieldLength.UNLIMITED);∥索引工厂
}catch(Exception e){logger.error(″indexWriter Exception:″,e);}}
索引创建成功后便生成索引文件,一个索引(index)存放在一个文件夹中,比如文书类的行政档案卷内文件索引为E:/index/T319。基于lucene技术的全文检索,根据不同的配置会产生不同的文件,本系统中的行政卷内文件索引如表1所示。
0.cfx复合文件,当compound启用时,被多个段(Segment)共享的单独文件集添加进独立的compound文件,扩展名为cfx;
2fnm保存域(Field)的元数据信息,一个段包含多个域,每个域都有元数据信息;
2frq词语频率数据文件,记录了词语所在文档的文档列表(docID)和应该词语出现在文档中的频率信息;
3.3索引管理
查看索引,读取指定路径索引中是否存在;索引中包含的文档,词条情况,是否需经过优化等;最后一次修改的时间,路径信息,含有的文档数目等;读取索引词条相关基本信息。
删除索引,删除指定序号的文档之后,自动删除对应的索引文件,编写方法delete(IndexData indexData){}来实现;恢复被删除的文档及索引。
更新索引,更新索引中的某个文档;索引同步处理,用户可根据需要自己定制创建索引时间,可定时或实时更新。增量索引、保存索引、修改索引分别编写方法incrementIndexWriter(String sDir){}、save(IndexData indexData){}、update(IndexData){}调用lucene相应的类,在更新索引时,采用方法closeIndexWriter()来关闭IndexWriter。特别是在update方法中采用indexWriter.updateDocument(term,Object2DocumentUtil.object2document(indexData))来实现,当数据量很大时,采用“删除再创建”效率更高,updateDocument等价于delete(indexData)+save(indexData)。
期刊库(http://www.zgqkk.com),是一个专门从事期刊推广、投稿辅导的网站。
本站提供如何投稿辅导,寻求投稿辅导合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级投稿辅导/国家级投稿辅导/核心期刊投稿辅导//职称投稿辅导。
【免责声明】本文仅代表作者本人观点,与投稿辅导_期刊发表_中国期刊库专业期刊网站无关。投稿辅导_期刊发表_中国期刊库专业期刊网站站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
投稿辅导服务咨询与期刊合作加盟
陆老师联系QQ: 913775405(普刊)
蒋老师联系QQ: 867306987(核心)
刘老师联系QQ: 271374912(核心)
联系电话:18015016272
17327192284
投稿辅导投稿邮箱:zgqkk365@126.com
期刊推荐
- 《课程教育研究》 旬刊 国家级
- 《网络空间安全》(信息安全与技术)月刊 国
- 《价值工程》旬刊 国家级 科技统计源期刊
- 《高教论坛》 月刊 省级
- 《法制与社会》旬刊 省级
- 《中国教育学刊》月刊 14版北大核心
- 《语文建设》 旬刊 14版北大核心
- 《中国绿色画报》 月刊 国家级
- 《社科纵横》季刊 社科类优秀期刊
- 《求索》月刊 14版北大核心期刊
- 《财会月刊》旬刊 14版北大核心
- 《艺术品鉴》 月刊 省级
- 《中华建设》月刊 国家级 建设类优秀期刊
- 《教学与管理》旬刊 北大核心
- 《当代经济》 旬刊 省级
- 《新课程研究》旬刊 省级 教育类优秀学术期
- 《文教资料》 旬刊 省级
- 《学术界》 月刊 双核心
- 《吉林教育》旬刊 省级 教育类学术期刊
- 《中国农业资源与区划》 月刊 14版北大核心
- 《继续教育研究》月刊 北大核心期刊
- 《财经界(学术版)》半月刊 国家级
- 《电影评介》半月刊 14版北大核心
- 《公路交通科技》 月刊 北大核心
- 《新闻传播》月刊 省级 新闻类优秀期刊