具体实施方式
图1为本发明系统的总体架构图,系统分为:聚焦网络爬虫、页面处理、中文分词、信息索引和用户检索五个模块。
1.对于聚焦网络爬虫的基本设计方法如下:
(1)将网页中的信息转化成文档对象模型树,然后再将树中的节点按照层次遍历进行编号,最后链接所对应的编号路径提取出来。
(2)把网页中的链接按照提取出来的顺序放入队列中,找出满足任意两个节点间的路径大于等于2的最大匹配字串,将该字串中的所有元素从队列中取出,归并入相应的类中。依此不断进行,直到满足条件的所有链接归入类中。
(3)令L:所有待分类链接集合;Gi:属于类别i的链接集合;class_num:当前类别编号;flag:标记。
a)初始化:设置L={u1,u2,…,un};G1,G2,…Gn=Φ;class_num=1;flag=1。
b)当L集合非空并且flag=1时,设置flag=0。
c)遍历L中的每个链接ui,如果有与ui路径相同的最大路径值大于1,则将ui放入相应的Gclass_num中,将class_num加1,设置flag=0。
d)继续进行步骤b),直到flag=0或者L为空。
(4)根据步骤(3)可得每个类别所包含的链接数为|Gi|,令cluster_url_num为总类别数,anchor_score(url)为锚文本的相似度评分,则cluster_url_num=Max(class_num),计算类别得分class_score的公式如下:
(5)用class_score替换Shark-Search算法中的anchor_context_score(锚文本上下文的相似度评分),新的相邻链接评分neighborhood_score如下所示:
neighborhood_score(url)=β*anchor_score(url)+(1-β)*class_score(url)
由上述5个步骤可以得出改进后的Shark-Search的主题预测值potential_score(url)。
对于聚焦爬虫来说,为了尽最大的努力防止抓取非主题相关网页,必须对网页的主题进行预测,以便提高抓取效率。然而,在网页的主题预测过程中不可能百分百地预测出其正确的主题。为了防止对网页进行主题预测时疏忽潜在的主题相关网页,本发明引进隧道技术。将加入链接聚类算法后的Shark-Search算法中的URL等候队列分成两个:主题相关队列relevant_Queue(主题相关的URL队列,其主题预测值高于某一阈值)和irrelevant_Queue(主题不相关的URL队列,其主题预测值低于某一阈值)。同时,设置两个阈值δ和μ:阈值δ(δ<1由用户自定义)用来决定URL进入哪一个队列,阈值μ(μ>1由用户自定义)用来决定irrelevant_Queue队列中的URL需要继续爬行的深度。
由上述的5个步骤得出主题的预测值potential_score后,根据其值来确定等待抓取页面的URL应该放入哪个URL等候队列中:当一个页面的主题预测值大于等于δ则进入relevant_Queue队列,否则,进入irrelevant_Queue队列。对于在relevant_Queue队列中的URL,可以直接抓取对应的网页。而在irrelevant_Queue队列中的URL,由于预测值小于δ,被定为主题不相关URL,所以需要继续爬行其子孙节点。当爬行深度D大于等于μ时,则表示已经连续爬行了μ个非主题相关的网页,停止继续沿该路径进行爬行,反之继续搜索,参见图2。
2.页面处理模块。
页面处理模块采用HtmlParser工具包对HTML进行信息抽取操作。HtmlParser将网页转化成一个个串联的Node,HtmlParser将网页的Node分成三类:
(1)RemarkNode:表示HTML中的注释节点。
(2)TagNode:表示标签节点,TagNode是一个拥有多个子类的超类,是类型最多的节点类型,HTML中所有具体节点类都是TagNode的实现。
(3)TextNode:文本节点,即两个首尾标签之间的文本信息。
主要提取房地产网页的楼盘名称、单价、总价、面积、当前楼层、总楼层、开发商、开盘时间、地址、户型、建造时间等结构化信息,其他信息如广告信息、脚本信息等全都过滤掉。所有结构化信息最后保存至.txt文本文件中。然后通过程序读取.txt,并将文本文件中的结构化信息通过Hibernate框架进行持久化存入Oracle数据库中。
3.中文分词识别房地产命名实体模块
本发明使用HMM结合词性标注对房地产命名实体进行识别,主要识别两个方面的词汇:第一,对于从数据库中获取的文本数据;第二,对于用户输入的关键词。识别过程是:给定一个句子序列W=w1w2w3…wn,需要找到一个最佳的类型序列C=c1c2c3…cn,使得P(C|W)的值最大。由贝叶斯公式可知P(C|W)=P(C,W)/P(W),对于一个给定的句子来说,P(W)是固定不变的,因此只要使P(C,W)最大就能得出P(C|W)的最大值。将房地产命名的识别设置成4种状态:开始状态、中间状态、结束状态和其他状态,即状态集合S={s1,s2,s3,s4}中的4个元素分别对应前面4种状态。
计算HMM五元组中的A,B,π前,需要对语料库进行预处理:
(1)从网络上抓取房地产相关新闻的文本。
(2)对抓取的文本进行预处理,进行简单的分词操作,词性标注。
(3)人工进行房地产命名的标注,在命名的第一个词前面加上“[”,在最后一个词后面加上“]FC”,其他词则用“[]”包围然后在后面添加“Z”。
(4)把房地产命名分成四种状态,FB,FM,FE,FO分别代表命名的开始、中间、结束和其他状态。
上述四步操作结束后接下来进行A,B,π这三个参数的计算。采用最大似然估计法求解,A,B,π的求解分别如式(1-2)所示。
式(1)中的C(Si,Sj)为从状态Si转移到Sj的次数,Si,Sj为FB,FM,FE,FO中的一种。式(2)中的Vk表示词性,Oj(Vk)表示状态Sj中出现Vk的次数,S代表所有状态。式(3)中的N表示句子总数。
使用维特比算法实现训练集的自动标注,即从所有可能的标注序列中选择概率最大的作为最终标注结果。对于给定的W=w1w2w3…wn,C=c1c2c3…cn为可能的标注序列,C#为概率最大的标注序列,C#如式(4)所示。
由贝叶斯公式可知,P(C|W)=P(W|C)P(C)/P(W),将wi视为观察序列,C为W后的隐状态序列,则通过HMM可以计算P(W|C)P(C),计算如式(5)所示。
因此C#就转化成式(6)。
为了方便计算,对式(6)取负对数,如式(7)所示。
因此训练集的自动标注就转化为式(7)的求解问题,维特比算法是解决该问题的典型算法。对于式(7)中的p(wi|ci)和p(ci|ci+1)求解,根据大数定理可以得出式(8-9)。
p(wi|ci)≈C(wi,ci)/C(ci) (8)
p(ci|ci+1)≈C(ci,ci+1)/C(ci) (9)
通过上述公式计算C#后,可以识别出房地产命名实体以及一般的命名实体。
4.信息索引模块
信息索引是通过Hibernate-Search建立的,索引模块对中文分词切分后的词汇进行索引操作。索引操作一共分为以下几个部分。
(1)索引的配置
由于使用Hibernate-Search建立索引,因此配置工作是必不可少的,配置主要在实体类和Hibernate的配置文件中添加。
(2)索引的初始化
所有的索引对象都需要进行索引初始化操作,初始化索引通常是在系统刚加载到Web服务器时执行的,在indexFiles文件夹中创建segments.gen和segments_1这两个文件,这两个文件主要存放索引段。
(3)索引的建立
当索引建立时,在索引目录中会生成.fdt、.fdx、.frq、.nrm、.prx、.tis等6种后缀的文件,这六种的存储的信息分别如下。
a).fdt。为FieldData的缩写,主要保存域数据信息。
b).fdx。为FieldDataIndex的缩写,主要保存域数据的索引信息。
c).frq。为Frequencies的缩写,主要保存项(Term)出现的频率信息。
d).nrm。为Norm的缩写,主要保存Norms调节因子信息。
e).prx。为Positions的缩写,主要保存项的位置信息。
f).tis。为TermInfo的缩写,主要保存词典信息。
5.用户检索模块
用户检索模块使用Adobe公司的富客户端框架Flex实现。用户检索模块主要包括三种界面:第一种是初始界面,为用户最初访问的界面。第二种是搜索结果界面,主要显示用户的搜索结果。第三种为详细界面,主要负责显示用户选中的某条记录的详细信息。
用户可以在初始界面中输入关键字,点击“搜索”按钮进行搜索操作。搜索结果界面为用户搜索的结果显示界面,在该界面中,用户也可以输入关键字进行搜索操作,搜索的结果会显示在同一个页面。搜索结果界面主要以列表的形式展现房地产信息,显示的主要信息有:小区名称、户型、价格、面积等主要信息。详细界面主要显示用户选中的列表项中的详情。