对搜索引擎的初步了解--lucene和nutch_第1页
对搜索引擎的初步了解--lucene和nutch_第2页
对搜索引擎的初步了解--lucene和nutch_第3页
对搜索引擎的初步了解--lucene和nutch_第4页
对搜索引擎的初步了解--lucene和nutch_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、搜索引擎(lucene 、 nutch)实例一n简单抓取单一页面所有邮箱地址代码。(Java网络编程与正则表达式)package TestWWW;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.IOException;import java.io.InputStreamReader;import .MalformedURLException;import .URL;import .URLConnection;import java.util.regex.Matcher;import java

2、.util.regex.Pattern;public class ConnectionTest public static void main(String args) try URL sina = new URL(http:/);URLConnection sinaConnection = sina.openConnection();BufferedReader br =new BufferedReader( new InputStreamReader(sinaConnection.getInputStream(); String str = ; while( (str = br.readL

3、ine() != null) /System.out.println(str); parse(str); System.out.println(测试结束);br.close(); catch (MalformedURLException e) e.printStackTrace(); catch (IOException e)e.printStackTrace();private static void parse(String str) Pattern p = Ppile(w.-+w.-+.w+);/Pattern p = Ppile(u005B.+);/Pattern p = Ppile(

4、.*?通知书.*);/先吞到.*再与全部匹配/Pattern p = Ppile(.*);Matcher m = p.matcher(str);/独占的全吃不吐出,再读后面的while(m.find()System.out.println(m.group(); public static void main(String args) try URL sina = new URL(http:/);URLConnection sinaConnection = sina.openConnection();BufferedReader br =new BufferedReader( new Input

5、StreamReader(sinaConnection.getInputStream(); String str = ; while( (str = br.readLine() != null) /System.out.println(str); parse(str); System.out.println(测试结束);br.close(); catch (MalformedURLException e) e.printStackTrace(); catch (IOException e)e.printStackTrace();private static void parse(String

6、str) Pattern p = Ppile(w.-+w.-+.w+); Matcher m = p.matcher(str);/独占的全吃不吐出,再读后面的while(m.find()System.out.println(m.group();一、搜索引擎原理用户用户用户检索入口google百度结果排序网页索引网页分析网页抓取互联网搜索引擎技术框架图1.1网页抓取技术n在互联网海量信息中发现并搜索多种类型的文档内容。如html,xml,ppt,word,pdf,多媒体信息等。即网络爬虫。http解析网页http下载请求http页面应答网页信息抓取软件原理图n1.1.1深度优先 依次访问下一级网

7、页链接,直到不能再深入为止。适合 专业化的垂直搜索。n1.1.2广度优先 按照目录层次较浅的网页内容先搜索的方法。访问完一层再访问下一层,有效保证了一个深度分支无穷尽的情况。1.html2.html3.html4.html1.1.html1.2.html1.3.html1.1.1.html1.12.html1.1.3.html1.2网页内容分析技术去除文本格式信息预处理纯文本可加载索引项过滤策略网页分析技术原理1.3网页索引建立技术n索引的功能是对搜索的信息进行分析处理,从中抽取索引项,用于表示文档以及生成文档的索引表。n搜索引擎的索引表通常采用倒排表,即倒排索引。(根据关键词组织文档,而不是

8、按文档组织关键词)n索引项:关键词,权重,来源url,更新时间,编码,链接情况等。索引项1索引项2索引项3索引项4文件1文件2文件1文件2文件3文件2文件3文件4文件5倒排序索引结构图n索引的基本结构原始文本库原始html,ppt,word文本解析器文本中间格式库索引器文本索引库索引字典纯文本或统一中间格式数据为索引器提供数据以倒排序法组织存放的数据文件二元结构的数据库,每个词汇有一个唯一的编码与之对应按预设的索引项字典建立索引项排列链表n建立高性能索引需要考虑的问题 如何提高建立索引的速度 如何减少索引的资源占用 索引使用中如何合理的分配优先的资源 如何提高访问速度1.4用户检索与结果排序n

9、用户输入检索词后,搜索引擎返回的结果需要根据语义相关性和其他权值进行排序。通常的网页排序除了基本的检索词语素相关外,还要根据网页连接情况,分析网页自身的重要性,保证用户得到重要的网页信息。1.5网页检索工具与接口n用户搜索界面。1.5Lucene简介nLucene是apache的一个开源项目,是一个开源的全文检索引擎工具包,它不是一个完整的全文搜索引擎,而是一个全文搜索引擎的架构。开发人员可以在此基础上建立起完整的全文检索引擎。n下面几章的一些实例会用到lucene开发工具包。总结lucene索引机制wordexcelPDFHTML不同格式文档:Word解析器Excel解析器PDF解析器HTM

10、L解析器文本文本文本文本分析器1分析器2分析器3分析器4不同解析器:文本:分析器:索引二、搜索引擎文本分析n非结构化文本简介非结构化文本通常具有一定得格式,格式化文件一般结构复杂,通常由多家厂商的不同系统生产,这些格式的文档普通程序一般无法读取。如:DOC、PPT、PDF等。 而众多的面向文档解析和读写的开源项目,很大程度上解决了搜索引擎和全文检索系统的文档预处理问题。当开发者正确解析了文档格式后,开发者就可以像解析其他普通文本文档一样来索引和检索文档了。 下面介绍html、pdf、doc、excel、xml的解析2.1HTML文档分析器n虽然lucene可以对简单的网页进行分析和索引,但网页

11、千差万别,有的结构十分复杂,html解析器需要处理的细节更多,有时还需要灵活地根据定制的模板提取内容。n主流的html解析器NekoHTML,JTidy,HTMLparser 下面主要介绍下HTML parsern下载开发包http:/ 导入htmlparser.jar和htmlexer.jarnVisitor节点访问模式实例HtmlParserExtraction.java(遍历所有html节点获取数据)nFilter模式简单页面链接提取实例HtmlParserGetPageUrls.java 实例参见HTML项目2.2PDF文档分析nPDF属于格式化文档,通常包含PDF格式版本,以及文件中

12、一些重要结构的定位信息。一个文档包含多个页面,文档获取时可以单独处理各页。 常用的PDF开发包有:PDFBox,xpdf,gnujpdf 下面主要介绍下PDFBoxn下载开发包/n建立eclipse项目,导入PDFBox-0.7.3,.jar,ant.jar,bcmail-jdk14-132.jar,bcprov-jdk14-132.jar,checkstyle-all-4.2.jar,fontBox-0.1.0-dev.jar,junit.jarn提取PDF文档内容实例PDFBoxHello.javan建立PDF文档索引实例(另需lucene-core

13、-2.0.0.jar和lucene-demos-2.0.0.jar) PDFBoxLuceneIndex.java 参见项目PDF2.3Office文档处理nMs office文档十分复杂,下面主要介绍下POI项目是如何通过OLE2模式访问Office文档,读取和修还office的复杂文档结构。主要的子项目如下:nPOIFS是java读取和修改OLE2复杂文档的基础接口,通过它可以方便进行一系列基础操作。nHSSF是针对ms excel格式的文件的读取接口。nHWPF是针对Word的读取接口,但不支持word 2007(word 2007不在使用OLE2模式)nHSLF是针对ms PPT的读取

14、接口。可读取多个版本的PPTnHPSF是针对各种类型Office文档的文档属性,可以读取microsoft定义的标准属性,但如果要读取任意属性集就要用到更一般化得接口。下载poi-bin-3.0.2-final-20080204.zip开发包2.3.1POI处理Excel文档n创建eclipse工程Excel,导入poi-3.0.2-FINAL-20080204.jarn创建POIOfficeExtractor.java实现循环读取excel文件每个单元格内容的功能。2.3.1POI处理Word文档n创建eclipse工程Word,导入poi-3.0.2

15、-FINAL-20080204.jar, poi-contrib-3.0.2-FINAL-20080204.jar, poi-scratchpad-3.0.2-FINAL-20080204.jarn创建POIOfficeExtractor.java实现循环读取word文件内容的功能。n建立word文档索引实例POIOfficeIndex.java(需要lucene-core-2.3.0.jar)2.4XML文档解析nXml格式文档表达能力强,能够灵活地组织和需要表达的内容结构。xml主要用于数据交换,数据初始化与配置文件等,经常使用的xml开源分析器有:DOM,SAX,JDOM,Xerces和

16、DOM4j。 下面主要讲解DOM4j的解析方法。n建立eclipse的xml工程 导入dom4j-1.6.1.jar,jaxen-1.1-beta-7.jarn建立CRUD操作xml文件的manager类CURDXmlManager,n建立test.java类含main方法。n读取class路径下的xml文件内容。三、Nutch简介nNutch 是一个刚刚诞生开放源代码(open-source)的web搜索引擎。 首先要明白nutch是什么? nutch是一个基于lucene的开源搜索引擎,它包括了所有你想要的东西,是一个完整的解决方案 。 尽管Web搜索是漫游Internet的基本要求, 但

17、是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然不利于广大Internet用户.Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索引擎依照网站所付的费用, 而不是根据它们本身的价值进行排序. 与它们不同, Nucth没有什么需要隐瞒, 也没有动机去扭曲搜索的结果. Nutch将尽自己最大的努力为用户提供最好的搜索结果

18、.Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到:* 每个月取几十亿网页* 为这些网页维护一个索引* 对索引文件进行每秒上千次的搜索* 提供高质量的搜索结果* 以最小的成本运作 nNutch主要分为两个部分:爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。nCrawler和Searcher两部分尽量分开的目的主要是为了使两部

19、分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能。四、配置nutch步骤n1.安装Cygwin 下载http:/ 按提示进行在线安装(或者本地安装) cygwin:是一个在windows平台上运行的unix模拟环境.windows下Nutch需要安装cygwinn2.下载解压Nutch0.9 可以再apache官网上下到n3.测试nutch系统环境 3.1执行cygwin安装目录下的cygwin.bat cd / pwd ls -1 3.2 cd到nutch解压目录 3.3执行 bin/nutch看是否可用 n4.部署nutch.war

20、将nucth解压文件内的nutch.war复制到tomcat的webapp文件夹下,启动tomcat可以解压nutch.war。n5.在nutch安装目录下建立url.txt文件 填写http:/ n6.配置nutch-0.9/conf/crawl-urlfilter.txt # accept hosts in MY.DOMAIN.NAME+http:/(a-z0-9*.)* 需要注意在conf下面的2个文件:regex-urlfilter.txt,crawl-urlfilter.txt # skip URLs containing certain characters as probable

21、 queries, etc. -?*!= (-改+) 这段意思是跳过在连接中存在? * ! = 的页面,因为默认是跳过所以,在动态页中存在?一般按照默认的是不能抓取到的。可以在上面2个文件中都修改成: # skip URLs containing certain characters as probable queries, etc. # -?*!= 另外增加允许的一行 # accept URLs containing certain characters as probable queries, etc. +?=& 意思是抓取时候允许抓取连接中带 ? = & 这三个符号的连接 注意:两个文件

22、都需要修改,因为NUTCH加载规则的顺序是crawl-urlfilter.txt- regex-urlfilter.txt n7修改nutchconfnutch-site.xml *n8.进入控制台cd d:nutchbin/nutch crawl url.txt -dir mydir -depth 3 -threads 4其中:n-url 就是刚才我们创建的url文件,存放我们要抓取的网址n-dir 指定抓取内容所存放的目录,如上存在mydir中n-threads 指定并发的线程数n-depth 表示以要抓取网站顶级网址为起点的爬行深度n-topN 表示获取前

23、多少条记录,可省n-logs/logs1.log 日志文件的存储地址,如上操作可能造成报无法找到logs错误,没关系,可以手工建立一个logs文件夹,或者干脆不要文件夹直接打名称。省略则将相关运行信息全部在控制台显示。n9.tomcat下的配置 nutchWEB-INFclasses下nutch-site.xml文件,将改为 searcher.dir D:nutch-0.9mydirn10.启动tomcat登陆nutch主页进行搜索五、实战:n5.1专题关键词管理n5.2专题资源发现n5.3专题信息下载n5.4专题信息分析与索引nJava专题搜索一种实现方法建立关键词库javajspejb通用搜索引擎百度,google(或垂直搜索入口)获得相关链接地址列表按链接地址列表抓取信息建立索引5.1专题词管理n建立数据库管理关键词ssh+mysql(sql 2000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论