搜索引擎第八章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第八章网络信息预处理目录•1.、使用PDFBOX解析PDF文档•2、使用JACOB预处理WORD文档•3、使用HTMLParser预处理HTML文档•4、使用POI处理OFFICE文档•5、使用Lucene处理SQLServer数据表由于网页文件格式纷繁复杂,这其中可能既会有Html网页、也有Xml、Doc、Xls、Pdf等多种不同格式的文档。为了扩大检索范围,需要搜索引擎能够识别并处理各种不同格式的文档,譬如,Google已经可以支持13种非Html格式的文档。Nutch也需要对各种不同格式的网页进行处理。Nutch在下载文档后,会自动对下载文档进行处理并昀终形成可供Lucene检索的倒排索引。对各种文档的预处理是通过Nutch的plugins机制完成的,每一个plugins都有一个属于自己的类加载器,这个class-loader在plugin启动前将会被初始化,通过编辑conf/nutch-site.xml文件,把相关的plugins的名字加入到plugins.includes的列表中就可以使用了。可以查看conf/parse-plugins.xml文件。Nutch与格式化文本解析有关的插件主要有:Nutch与格式化文本解析有关的插件•1、parse-html:使用HtmlParser来分析Nutch抓取的HTML文件的组件。•2、parse-js:用来分析JavaScript内容的插件。•3、parse-mp3:用来分析mp3格式文件的组件。•4、parse-msword:分析各种office文档的组件。•5、parse-pdf:分析PDF文档的组件。•6、parse-rss:读取并解析RSS格式文件的组件。常见的解析工具包括:1、PDFBox:用来解析Pdf文档,它提供和Lucene的接口LucenePDFDocument,但不能处理中文。下载地址:。2、XPDF:用来解析Pdf文档,能处理中文,但不能和Lucene无缝连接,需要自行处理。3、POI:用来解析Excel和Word文档。4、JACOB:是Java-COMBridge的缩写,使用Jacob自带的dll文件,通过JNI方式可以实现在Java平台上对COM程序的调用,用于在Java与微软的COM组件间建立联系。5、JCOM:是Java到COM的中间件,利用它可以从Java中调用COM对象,就像调用Java对象一样不需要处理JNI的本地接口。使用JCOM工具可以在Java中控制几乎所有的COM对象,而且它还带有一些用于Excel、Word的强大的辅助类,但这种模式需要本地DLL的支持。1使用PDFBox解析PDF文档PDFBOX是一个开源的JavaPdf库,允许访问PDF文件中的各项信息,它提供了一组API。PDFBox提供了LucenePDFDocument类用于从PDF文件中提取各种元数据Field并将其加入到Lucene的Field中(如path、url、contents、summary等),其getDocument方法被重载为3个方法,分别用于接收File对象、InputStream对象或者URL对象作为参数,然后提取并生成Lucene的处理对象,而这个处理对象可直接使用Lucene的IndexWriter来将其加到Lucene的索引中。使用PDFBOX的主要步骤•解压PDFBOX后进入其下面的external文件夹,复制下面几个JAR包文件——bcmail-jdk14-132.jar、bcprov-jdk14-132.jar、checkstyle-all-4.2.jar、fontbox-0.1.0-dev.jar,到对应工程的lib目录下(如果还没有建立lib文件夹,需手工建立)。如果使用的Lucene不是2.0版本,请将这个PDFBOX下的external文件夹下的lucene-core-2.0.0.jar复制到这个lib文件夹中,并在工程的构建路径中使用这个版本的Lucene。•从PDFBOX的lib目录下复制PDFBOX-0.7.3.jar到该工程lib目录下。•右击该工程文件,在弹出的快捷菜单中,执行→“构建路径”→“配置构建路径”→“添加JARs”命令,把该工程lib目录下的包都加入到这个工程的BuildPath中。•在工程中创建包并创建测试类,该类包含一个getText方法用于从一个PDF中获取文本,它接受一个String类型的参数,指定要提取的PDF文件的路径,这个位置可以是URL或本地文件。然后用PDFBOX提供的PDFTextStripper类设置提取过程中的一些属性(如起始页、是否排序等),将文本提取出来并写入文件中。再在上述的类文件中加入一个main函数,指定要处理的PDF文件,昀后处理结果是存为一个同名的TXT文件。•部分代码参见sousuo工程下的LuceneIndex.java文件。或者是LuceneChapter9工程下src下chapter9下的PDFBoxHello.java2使用Jacob解析Word文档JACOB通过JNI方式实现在Java平台上完成对微软COM程序的调用。为什么解析微软的Office要使用COM呢?因为这是为了解决Windows平台上不同应用软件通信缺乏通用API的问题。通过COM方式,能用Dll完成Api的转换。参见ch7工程下ch7下的jacob下的wordreader.java3HTMLParser解析HTML文档用于解析HTML文档的开源工具比较多,常见的有:1、NekoHTML:NekoHTML是一个简单的HTML扫描器和标签补偿器,能解析HTML文档并用标准的XML接口来访问其中信息。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素以及不匹配的内嵌元素标签。2、JTidy:Tidy是W3C用来解析网页的一个软件包。通过JTidy可方便地将标准的HTML网页转换为XML的DOM对象,然后通过XPaht和XSLT将需要的内容抽取出来,得到的文档内容包括文档标题和文档正文内容。3、HTMLParser:HtmlParser是上活跃的开源项目,用于分析、改造、提取HTML网页的Java开源库,可实现对在线文本的分析,并通过一系列Tag对象形成网页的树结构。•HTMLParser提供了线性和嵌套两种方式来解析网页,主要用于HTML网页的转换以及网页内容的抽取。HTMLParser使用Node来表示一个HTML,它提供了整个Node类的基础类AbstractNode类,而AbstractNode类是HTML树形结构表示的基础结构,也是各种具体节点类型的父类,定义了页面Page对象以及节点的获取方法、节点与HTML文本的对应方法、节点对应的起始位置和过滤方法以及访问机制,并提供了网页分析和存放的基本功能,包括页面的起始位置、层次化的节点树等。AbstractNode类派生出的三种类型节点完整描述HTML页面,这三种类型分别是RemarkNode(描述网页注释内容,包括各种解析文字等)、TagNode(网页标签的基类,用来表示HTML中的标签)、TextNode(提取网页中的文本字符串,形成为文档层次中的文本节点,表示网页中除了标题、标签包含的内容以外的正文文本信息)等。这些节点内容是通过parse方法实现的。•HTMLParser有两种功能模式,其一是从网页中提取内容的Extraction模式,其二是对网页内容进行修改的Transformation模式。Extraction模式用来提取各种内容信息,如简单的页面文本文字获取、网页中链接获取、特定资源(图片、声音文件等)的获取,还可以按照正则表达式进行格式化内容的获取、Web页面更改检查、链接有效性检查等工作。而Transformation模式则是根据要求修改特定页面内容,完成远程网站的抓取、Web页面内全部或部分链接的更改、过滤广告链接、过滤关键词等。HTMLParser的配置下载HTMLParser后将其解压到某文件夹下,其lib文件夹下(如D:\htmlparser1_6\lib)有htmlparser.jar、htmllexer.jar、filterbuilder.jar等需要添加到相应工程的构建路径中,即完成了HTMLParser的配置。参见LuceneChapter9工程的构建路径。提取科大主页中一新闻正文示例:参见LuceneChapter9工程中HtmlParserExtraction.java4使用POI处理Office文档POI就是通过OLE2模式访问Office文档,能够读取和修改Office的复杂文档格式。可以使用POIFS以流的形式创建或打开Office文档,然后将其连接到适当的数据访问API(如下述的针对Excel文档的HSSF、针对Word文档的HWPF、针对PPT文档的HSLF等),以便能访问各种Office文档,其主要的子项目和类包如下所示:1.POIFS:是Java读取和修改OLE2复杂文档的基础接口,它提供了一系列的API。2.HSSF:是针对Excel格式文件的读取接口,在org.apache.poi.hssf包中。3.HWPF:是针对Word格式文件的读取接口。由于Word2007不再使用OLE2模式,因此不能处理Word2007格式的文档。4.HSLF:是针对PowerPoint格式文件的读取接口,提取其中的文本信息。5.HPSF:是针对各种类型Office文档的文档属性,可以读取微软定义的标准属性,但如果要读取任意属性集就要用到更一般化的API。(1)处理Excel文档处理Excel文档需要使用其中的HSSF包,这个类包中提供了HSSFWorkbook类来创建Excel文档工作簿对象、HSSFSheet类创建Excel的Sheet页对象、HSSFRow类创建Excel中的行、HSSFCell创建Excel中的单元格对象。通过FileInputStream方法把对应的Excel文件转换为流式输入,整个文件作为一个WorkBook,提取内部的每个Sheet中的内容并循环遍历每行和每列。读取内容时,需要根据不同字段的类型,调用对应的方法进行处理。示例1:ch7工程下ch7下的poi下的excelreader.java示例2:LuceneChapter9工程下src下chapter9下的POIOfficeExtractor.java中显示了有关对Excel的处理(2)处理Word文档处理Word文档是需要使用HWPF包完成。和处理Excel类似,要使用POIFS以流的形式创建或打开文档,利用HWPF包进行分析。通过FileInputStream对象,获得对DOC文档的流式访问接口,进一步调用getRange()方法得到文档内的Range对象句柄。Range对象提供了直接获取所有文档内容的text()方法,也提供了进一步访问每一段的getParagraph()后分别获得文档内容的方法。示例1:ch7工程下ch7下的poi下的wordreader.java示例2:LuceneChapter9工程下src下chapter9下的POIOfficeExtractor.java中显示了有关对Word的处理解析XML文档为了Lucene能够对XML文件进行索引及检索,就需要从XML中提取出相关内容。主流的XML文档解析方法包括:1DOMDOM是XML文件的标准读取方法,核心思想是用文档模型表示XML结构化文档。DOM方法按照文档原始层次结构组织,以节点和信息判断的形式形成内容集合。组织后的XML文档表示结构与平台和语言无关,可以应用到各种应用领域。层次化的DOM结构的XML文档能够为开发者提供信息的快速定位和查找方法,但是DOM方法效率不高。2SAXSAX技术实现了基于事件模型的解析,它不需一次性加载整个文档也不需建立内存的层次化树结构,效率较高,但是开发和编码过程比较复杂。

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功