基于Heritrix+Lucene的搜索引擎构建(3)——页面信息内容抽取
2013-01-06 23:06
555 查看
搜索引擎无非是提供对Web内容的方便检索,以至于能够便捷的获取浏览到相关的页面。
因此,在通过Heritrix等网络蜘蛛获取Web资源以后,首要的任务就是抽取Web页面的内容。
基于java的页面抽取工具有很多,例如,抽取HTML页面的有HtmlParser、Jsoup等,至于Word、Excel等文件的内容,也有相应的工具。
关于HtmlParser、Jsoup等页面内容抽取可以参考相关文献.如《HTML抽取工具Jsoup》。
关于Word等文件,建议学习使用一款叫POI的开源工具来实现:
Apache POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。目前POI已经有了Ruby版本。
结构:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
POI项目网站:http://poi.apache.org/.
最常见的一种PDF文本抽取工具就是PDFBox,PDF文档可以使用PDFBox来处理,http://pdfbox.apache.org/。
以下是一些文档内容抽取的例子代码。
Html文档的内容抽取HtmlParser.java:
使用tm-extractors实现的Word抽取WordReader.java:
Txt文件内容的读取TxtReader.java:
总之,在建立搜索索引之前,先对Web页面资源进行文本的抽取处理。
因此,在通过Heritrix等网络蜘蛛获取Web资源以后,首要的任务就是抽取Web页面的内容。
基于java的页面抽取工具有很多,例如,抽取HTML页面的有HtmlParser、Jsoup等,至于Word、Excel等文件的内容,也有相应的工具。
关于HtmlParser、Jsoup等页面内容抽取可以参考相关文献.如《HTML抽取工具Jsoup》。
关于Word等文件,建议学习使用一款叫POI的开源工具来实现:
Apache POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。目前POI已经有了Ruby版本。
结构:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
POI项目网站:http://poi.apache.org/.
最常见的一种PDF文本抽取工具就是PDFBox,PDF文档可以使用PDFBox来处理,http://pdfbox.apache.org/。
以下是一些文档内容抽取的例子代码。
Html文档的内容抽取HtmlParser.java:
import java.io.File; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import GEsearcher.encode.FileEncode; import GEsearcher.index.FileDocument; /** * 解析html * @author Shilong * */ public class HtmlParser { private String title; private String content; private String url; private String path; private FileDocument filedocument; public HtmlParser(String path) { //nothing this.path=path; filedocument=new FileDocument(path); AnalysicDocument();//解析 //System.out.println("测试:"+filedocument.getUrl()); } //获取待分析文件的File对象 public File getFile() { return filedocument.getFile(); } //获取待分析文件编码 public String getEncoding() { String val="GBK"; FileEncode fe=new FileEncode(path); String encode= fe.getEncode(); if(encode.equals("GB-2312")||encode.equals("gb-2312")) { val="GB2312"; }else if(encode.equals("UNKNOWN")) { val="UTF-8"; }else { val=encode; } return val; } //分析文件 public void AnalysicDocument() { File infile=getFile(); try { Document doc = Jsoup.parse(infile, getEncoding()); title=doc.title(); //获取标题 content=doc.text(); //获取内容 url=filedocument.getUrl(); //获取url } catch (IOException e) { e.printStackTrace(); } } //数据的返回 //获取待分析文件的url public String getUrl() { return this.url; } public String getTitle() { return this.title; } public String getContent() { return this.content; } }
使用tm-extractors实现的Word抽取WordReader.java:
import java.io.File; import java.io.FileInputStream; import org.textmining.text.extraction.WordExtractor; public class WordReader { private String FilePath; public WordReader(String FilePath){ this.FilePath = FilePath; } public String getText() { String text = ""; FileInputStream in; try { in = new FileInputStream(new File(FilePath)); WordExtractor extractor= new WordExtractor(); text = extractor.extractText(in); } catch (Exception e) { e.printStackTrace(); } return text; } public String getTitle(){ File f = new File(FilePath); String name = f.getName(); return name; } public String getUrl(){ return FilePath; }
Txt文件内容的读取TxtReader.java:
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class TxtReader { private String FilePath; public TxtReader(String FilePath){ this.FilePath = FilePath; } public String getText(){ String str=""; try{ BufferedReader br=new BufferedReader(new FileReader(FilePath)); String r=br.readLine(); while(r!=null){ str+=r; r=br.readLine(); } }catch(Exception e){ e.printStackTrace(); } return str; } public String getTitle(){ File f = new File(FilePath); String name = f.getName(); return name; } public String getUrl(){ return FilePath; } }
总之,在建立搜索索引之前,先对Web页面资源进行文本的抽取处理。
相关文章推荐
- 基于Heritrix+Lucene的搜索引擎构建(6)——搜索UI与结果页面
- 基于Heritrix+Lucene的搜索引擎构建(2)——索引与搜索框架Lucene
- 基于Heritrix+Lucene的搜索引擎构建
- 基于Heritrix+Lucene的搜索引擎构建(4)——索引建立
- 基于Heritrix+Lucene的搜索引擎构建(0)——概述
- 基于Heritrix+Lucene的搜索引擎构建(5)——搜索部分
- 基于旧版的ThinkCMF修改页面底端信息
- 1. AngularJS+路由+JQuery:模糊查询过滤内容,下拉菜单排序,过滤敏感字符,验证判断后添加表格信息(路由显示添加页面)
- 聊聊基于Lucene的搜索引擎核心技术实践
- 【Nutch2.2.1基础教程之2.2】集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析
- 基于Lucene的Solr服务搜索引擎应用(散乱)
- 2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
- 基于 EGL 构建不同方式的 JSF 搜索页面
- 基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
- 基于功能更丰富的基础类构建您自己的 ASP.NET 页面
- web页面列表的内容抽取
- 搜索引擎之全文搜索算法功能实现(基于Lucene)
- HttpClient和HtmlParser配合实现自动登陆系统抽取页面信息
- 使用PHP向Mysql数据库插入信息,页面中文内容显示正常,但在数据库里却是乱码,这个怎么解决?
- 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用