垂直搜索引擎在房产信息领域的开发和应用

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

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

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

资源描述

垂直搜索引擎在房产信息领域的开发和应用作者:赖祥芳E-mail:elxf99@hotmail.comQQ:19595700版权声明:本文为赖祥芳原创,如要引用本文,需保留作者姓名、MAIL、QQ。摘要:垂直搜索就是将网页信息进行结构化抽取,把非结构化数据转化成统一格式的信息数据库并提供给用户使用。本文从数据采集、数据抽取、数据加工和验证三个方面讨论垂直搜索引擎在房产信息领域的开发和应用。垂直搜索引擎是我们公司切入互联网领域的一个很好切入点,建议公司考虑这方面的计划。关键字:垂直搜索;垂直搜索引擎;结构化抽取;搜索;负载均衡;关联信息;排重;数据加工;分词1.垂直搜索的定义要理解垂直搜索,下面的两个概念需要分清楚:垂直搜索:垂直搜索是针对某一行业或某一领域范围内的数据检索。垂直搜索的主要工作就是将网页信息进行结构化抽取,把非结构化数据转化成统一格式的信息数据库。垂直搜索是相对百度、谷歌这类通用搜索引擎提出的概念。百度、谷歌的讲究的是搜索的广度,具体的来说就是搜索引擎搜索到的页面数量,搜索到的内容涵盖互联网的范围,要求的是广和全。垂直搜索也要求广和全,但是这个广和全是在行业范围内的,它更关注的是专和精,要求行业深度。从这个角度出发,其实垂直搜索也可以叫做行业搜索。垂直搜索引擎:垂直搜索引擎是垂直搜索一个具体实现实例。垂直搜索引擎对网络数据采集具有明确的目的性,它只搜索并采集行业内数据。垂直搜索引擎对采集到的数据要进行分析、整理,最后通过一定表现形式把数据提供给用户使用。最常见的表现形式是通过WEB页面提供一个查询的界面,后台应用根据用户输入的关键字进行检索,并把检索结果通过WEB页面展现给用户。垂直搜索包含三个搜索的概念在里面。用户对数据的检索这是一个搜索概念;搜索引擎搜索行业网站是一个搜索概念;搜索引擎对行业网站内的行业数据搜索又是一个搜索的概念。要做好一个垂直搜索引擎,需要对这三个搜索的概念以及它们之间的关系进行深入的理解。在整个垂直搜索系统中,它们分别占据了不同环节的关键位置,侧重点各不相同,需要区别对待,但是从系统的角度看,又是需要它们相互协作才能完成整体的工作,这又要求把这三个搜索有机的结合起来。用户搜索,用户搜索直接关系到用户体验。用户体验是改进搜索引擎重要参考指标,同时也是检验搜索引擎成功失败的标志。用户搜索的重点在于考虑提供给用户的搜索的方式是否简单快捷,搜索引擎对用户搜索的内容响应速度快慢,返回的搜索结果是否精确。但是,这些的前提需要搜索引擎对行业网站的行业数据抓取全面来支撑。搜索行业网站。行业网站是垂直搜索引擎数据来源的主要对象,只有尽量多的搜索行业范围内的网站,才能获得更多的行业数据支撑用户搜索,让用户有更好的体验。行业数据搜索。只有充分、全面的行业数据,垂直搜索引擎才能体现出它的价值,才能更好的提供服务。2.垂直搜索引擎在房产信息领域的开发应用2.1.系统目标快速构建一个房产行业的垂直搜索引擎,能够以较强的时效性对房产类的信息进行提取、分类,需要对采集到的数据进行格式转换。用户可以在WEB前台通过文字或者在地图上指定一定范围搜索房源信息,房源信息查询结果可以通过文字、地图的形式展现。2.2.垂直搜索引擎的选型考虑研发成本和软件研发进度,采用模板方式实现网页数据抽取。使用VS.NET2005作为软件开发工具。MSSQLSERVER2000作为数据库服务器。Lucene.Net.作为检索的索引工具。使用51ditu.com的地图接口实现地图功能。2.3.系统架构搜索引擎工作的时候IO吞吐量大,处理数据的时候有大量的字符串操作,对CPU和内存的要求高。如果索引数据库和搜索引擎采集系统都在一个服务器上,搜索引擎采集、抽取数据时,势必会影响索引数据库的工作效率,特别是会影响终端用户检索房源的效率,带来不好的用户体验。用分布式的结构能够较好的解决这个问题,把系统的各个模块按照功能的不同分别发布在不同的应用服务器上,均衡系统负载。系统结构如图:采集模块索引模块WEB前台数据库系统图1.系统结构图其中WEB前台和索引模块发布在同一台服务器,采集模块和数据库系统发布在同一台服务器。采集模块和索引模块通过数据库系统完成数据交互,采集系统把抽取完成的数据保存到数据库中,索引模块从数据库中提取关键字段建立索引数据库。用户通过WEB前台进行数据检索的时候首先通过索引模块在索引数据库中搜索,当用户需要详细信息的时候再从数据库提取具体数据。2.4.数据采集使用C#的HttpWebRequest、HttpWebResponse类,可以方便的实现WEB页面的采集,同时可以使用多线程技术提高采集效率。数据采集需要注意以下问题:2.4.1.公共数据的访问控制数据采集需要注意多线程之间公共数据互斥访问,特别是对于要进行数据采集的URL,如果没有控制好线程间的URL列表读取,造成多个线程处理相同URL的情况,即增加了对方网站系统的负担,又增加自身的系统开销。对于公共代码段的访问,可以使用Mutex类进行互斥控制。2.4.2.采集网站的负载均衡采集不同网站的访问速度是不一样的,目标网站的网站系统、网络质量、网络服务提供商以及我们自身的网络质量、网络服务提供商等等都有可能影响到采集的速度。为避免因为某个网站的访问速度慢而影响到系统的运行效率,可以根据采集日志记录或者人工测试的方式确定访问速度慢的网站,并且给这些页面设置较低的采集权重,只有在系统空闲的时候才对这些页面进行采集,也可以专门设置一个采集线程处理这类访问效率低下的网站。如果有采集多个城市的房源信息,需要对采集线程池里面的线程进行调控,保证在正常情况下,采集线程不会集中采集某个地市的房源信息,而是均匀的分布在不同的地市房源网站上进行采集工作,采集不同地市的数据,达到每个地市的数据都能得到及时的更新的目的。解决这个问题的一个比较简单的方法就是按照城市为单位对采集任务进行分组。首先从整体上根据采集服务器的软硬件配置情况设置线程池的大小,然后根据城市的重要性(比如一线城市、二线城市等等),每个城市需要采集的网站的多寡,把线程池里面的线程分配到每个采集组的配置文件中,采集系统根据配置文件中的线程个数控制每个城市的采集线程数目。2.4.3.控制采集的范围对于一个网站,每天更新的房源数量是有限的。一般来说,当我们对网站对一个网站进行全量采集后,每天只需要对网站更新的房源进行增量采集。大部分网站,要实现增量采集,只需要采集其房源列表的前N页(N的取值根据不同网站的更新频率设定)就可以。2.4.4.URL编码如果被采集页面的URL包含中文字符,或者是RFC1738里面规定的不安全字符,很可能对方网站的Web服务器不能解析,所以需要对URL进行编码,把中文字或特殊字符编码成%XXX的格式,在C#中可以使用System.Web.HttpUtility.UrlPathEncode这个方法完成URL编码工作。2.4.5.保存快照页面的如果系统存储空间允许的话,可以把采集到的网页保存成文件存储在硬盘中,作为网页快照使用。2.5.数据抽取2.5.1.网页内容解码每个HTML页面的编码格式可能会有所不同,中文网页通常使用的编码格式有GB3212、GBK、UTF-8这3种。每种编码对应的解码方式是不一样的,用不正确的编码格式解析HTML数据流,结果就是返回乱码,不能对其进行数据抽取。很多网站服务器在返回HTTP头的时候会包含Content-Type属性,在里面指定网页编码信息。可惜并不是每个服务器都是如此,有些服务器不返回Content-Type属性,或者是返回这个属性但里面没有指定网页编码。这个时候就需要对一个HTML页面访问两次,第一次访问的目的是为了从HTML源文件里面的META标记的charset属性读取网页的编码方式,第二次访问HTML页面的时候根据第一次获取到的网页编码进行解码。之所以要访问两次,是因为第一次需要使用系统默认的编码方式对源文件进行解码,GB2312/GBK/UTF-8/ISO8859-1这几种编码的方式都向下兼容ASCII可见字符,但是对于中文,如果没有使用正确的解码方式,结果就会出现乱码了。这种方法也不是都适用的,因为有的html页面里面可能没有包含META标记,或者是包含了META标记却没有设置charset属性,甚至有可能charset属性里面指定的编码格式和网页的实际编码格式并不相符合,所以还需要结合在配置文件中指定HTML页面编码的方式处理。2.5.2.网页内容的逻辑划分网页内容的提取是整个系统的关键部分。特别是对于模板方式的垂直搜索引擎,网页内容的逻辑划分方式,直接影响系统的灵活性。对于一个HTML页面,我们可以把它理解成一张数据库表,里面包含若干条记录,记录里面还有不同的字段描述不同的属性。这个概念建立起来以后,在配置网页模板的时候就知道怎么处理了。首先需要从HTML源文件找出唯一的字符串标记“数据库表”的范围,然后在“数据库表”的范围内标记出每条“记录”的范围,最后在“记录”中标记出“字段”的范围。这几个关键的因素配置完了以后,就可以进行HTML页面的数据抽取工作。2.5.3.关联信息抽取网站展示数据通常的方式是在一个页面中列出一些索引的信息,同时给每条索引信息设置一个超级链接,通过点击超级链接,跳转到详细页面,显示具体的内容。我们称这种页面为索引页面。对于房源采集来说,一则具体的房源,可能需要把索引页面的信息和详细页面的信息组合起来才能得到一条完整的记录。这就要求把索引页面抽取到的内容传递到详细页面中,以便组合成完整的房源记录。2.5.4.格式化数据互联网是一个开放的环境,每个网站都有自己风格习惯,因此,采集到的数据格式也是多种多样。这种情况体现最明显的就是数字和字母,比较正常的方式是使用ASCII码表里面的字符[0-9],另外还会有中文的[0-9],文字的[零-九],中文的[A-Z],中文的标点符号等等。作为行业的垂直搜索引擎,需要把这些不同表示方式的字符和标点符合转换成统一的格式进行处理。2.5.5.重复记录排重排重是行业搜索引擎必须考虑的问题之一。可以选择几个属性构成唯一性的索引,利用它们进行排重。排重工作可以放到数据库中利用SQL语句进行,也可以把唯一性索引载入内存,在内存中进行排重。这二者各有优劣,数据库排重的方式相对灵活,但是效率较低,内存排重的方式效率高,但是灵活程度会稍低。可以根据具体情况选择相应的排重方案。2.6.数据加工和验证2.6.1.房源地址分词房源地址分词的有两个目的,一个是对房源地址的描述规范化,尽量使用统一的名称描述相同的地点;另外一个就是通过房源分词规范出来的名称获取系统中相应的楼盘配置信息,特别是楼盘所在地地图位置信息,这样可以在地图上显示出楼盘位置。有地图位置信息的房源也可以通过地图搜索查找到房源。房源分词可以利用树的数据结构实现。首先需要把楼盘名称按照树形结构载入内存,数据存放规则如下:a.把楼盘名称按照字为单位进行拆分b.楼盘名称里面第一个字在树第一层,第二个字在第二层,依次类推,第N个字在第N层c.楼盘名称第一个字相同的都放到相同的子树下,前二个字都归到次一级的子树下,依次类推前N个字相同的情况d.楼盘名称最后一个字所在的节点需要做特殊标记,表示一个楼盘名称表示完毕。如下图标黄色的节点图2.分词数据结构分词的伪代码:1.如果已经到了当前需要分词的符号序列结尾,返回2.获取并检查子结点if子结点包含当前位置的符号thena.如果有单词结束标志,添加到分词结果b.继续匹配子结点内容以找到最长匹配elsea.总的扫描位置后移一位b.从根结点继续匹配endif2.6.2.索引数据使用Lucene.Net.对房源数据建立索引可以提高用户在前台的搜索速度,在速度方面给用户带来更好的体验。房产行业的垂直搜索引擎,可以考虑按照数据的类别(如出租房、二手房、商业地产、新房等),分城市建立索引。另外,因为房产行业的特殊性,比如出租房的有效期较短、数据量大,分类别建立索引的时候还可以把时间的因素加进去,可以设置成一个类别一个城市一个月一套索引。

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

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

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

×
保存成功