一种结合位置和关键词信息的在线房源搜索方法及装置与流程

文档序号:12124638阅读:454来源:国知局
一种结合位置和关键词信息的在线房源搜索方法及装置与流程

本发明属于互联网数据管理领域,具体涉及一种结合位置和关键词信息的在线房源

搜索方法及装置。



背景技术:

从市场上的相关产品来看,近年来随着地理位置信息的逐渐普及,互联网中带有文本信息的空间数据对象急剧增长,与此同时,以空间文本对象为基础的空间关键词查询应用也日益广泛。其中,经过扩展KNN算法得到的KNN-first算法和Keyword-Search-first的算法使用最为普遍。然而这两种算法是非常低效的,最大的局限性在于它们独立地处理空间搜索和文本搜索,无法同时对候选区域进行空间排除和文本排除,因此可能需要大量的I/O和CPU的成本,或是需要花费大量时间用于检索大量的空间对象并对其进行排序操作。

随着在线房源信息的飞速增长,如果仍使用空间与文本分离的搜索方法,面对大量的空间位置信息与关键词信息将过多地耗费I/O和CPU的成本,同时也降低了搜索效率。因此引入高效的房源信息管理方法,对提高用户的在线体验有重要的意义。



技术实现要素:

本发明的目的是针对房源信息管理问题而提出一种结合位置和关键词信息的在线房源搜索方法及装置,本发明同时考虑到了用户在搜索目标房屋时,对房屋位置和描述的两方面需求,提高了用户的搜索效率。本发明相比于目前存在的房源搜索方法及装置而言,不再独立地根据位置信息与关键词信息查询目标数据,而是将两种查询方法结合起来,高效地处理空间关键词的查询。

实现本发明目的的具体技术方案是:

一种结合位置和关键词信息的在线房源搜索方法,该方法包括以下具体步骤:

步骤1:处理从互联网中获取的房源信息:将每条房源信息以对象的结构定义,并存储在线性结构中作为房源对象集;提取所有房源对象中包含的关键词,并存储在线性结构中作为房源关键词集;

步骤2:定义R树与B树的结构,并用步骤1得到的房源对象集和房源关键词集分别插入到R树和B树中建立索引;

步骤3:根据R树中包含的房源对象与B树中包含的房源关键词之间的关系,引入链表结构建立R树的房源空间信息和B树的房源关键词信息之间的对应关系,并构建用于在线房源搜索的BR树索引;

步骤4:根据用户输入的房源查询信息,利用步骤3中构建的BR树索引依次搜索出同时满足空间位置与关键词查询条件的若干个房源对象作为搜索结果。

所述步骤1中将每条房源信息以对象的结构定义,具体包括:

定义房源对象的结构包含:房源的空间位置、房源信息中提取的关键词以及指向该房源完整的文本描述信息的指针。

所述步骤2中定义R树与B树的结构,具体包括:

A1:R树是一种用于空间索引的平衡树,其中每个节点对应空间范围中的一个矩形区域,叶子节点对应的矩形区域为其存储的所有房源对象的最小边界矩形简称MBR,非叶子节点对应的矩形区域为其所有子节点对应区域范围的最小边界矩形;

A2:B树是一种用于关键词索引的多叉查找树,其中房源关键词集分布在整棵B树的所有节点中,且任何一个关键词出现且只出现在一个节点中。

所述步骤2中的用步骤1得到的房源对象集和房源关键词集分别插入到R树和B树中建立索引,具体包括:

B1:定义R树叶子节点对应的最小边界矩形的大小,并以此为单位划分空间范围,得到若干个最小边界矩形作为R树的叶子节点对应的矩形区域;

B2:依次获取房源对象集中的所有对象,根据每个对象包含的房源空间位置在空间范围上所属的矩形区域,将该房源对象插入到R树中对应的叶子节点中进行索引,并在该叶子节点的结构中添加房源对象在线性结构中存储的地址,由此建立了用于房源对象搜索的R树索引;

B3:若获取了新的房源信息,同样经过步骤1得到新房源对象集,并将其中的所有对象插入到R树的叶子节点中进行索引;

B4:依次获取房源关键词集中的所有关键词,并插入到B树中的各个节点中进行索引,由此建立了用于房源关键词搜索的B树索引;

B5:若获取了新的房源信息,同样经过步骤1得到新房源关键词集,并将其中的所有关键词插入到B树的节点中进行索引,若插入的关键词在B树中已存在,则不必重复插入。

所述步骤3具体包括:

C1:为B树上包含的每一个房源关键词添加对应的链表结构简称MBRList,且链表结构中的元素存储的是指向R树节点的指针;

C2:首先构建R树的叶子节点与B树的关联:针对R树的所有叶子节点,遍历叶子节点上所有最小边界矩形内的房源对象,获取其包含的房源关键词集合。针对该房源关键词集合中的每一个关键词,查找该关键词在B树中的节点位置。并向对应节点中相同关键词的链表结构中,添加指向R树中该叶子节点的指针;

C3:其次构建R树的非叶子节点与B树的关联:首先层次遍历R树并将非叶子节点入队列,再以从队列中读取的顺序压入栈结构中,其次将栈结构中所有R树节点出栈,对每一个出栈的非叶子节点,用前序遍历其所有子节点,获取其子节点包含的房源关键词集,并做合并去重操作得到该非叶子节点的房源关键词集合。针对获取的R树的非叶子节点的房源关键词集合,重复执行C2。将R树的所有节点都关联到B树上之后,得到用于在线房源搜索的BR树索引结构。

所述步骤4具体包括:

D1:获取用户输入的房源查询信息,并用步骤1中的方法进行预处理,得到查询对象的空间位置与其包含的关键词集;

D2:根据查询对象包含的关键词集,在构建好的BR树索引中的B树中筛选出满足关键词完全匹配条件的B树节点,进而根据MBRList上存储的指针信息,筛选出满足关键词约束的R树的叶子节点;

D3:根据查询对象的空间位置,在满足关键词条件的R树叶子节点集合中,针对每个叶子节点提取出属于该节点的房源对象集合,计算每个房源对象与查询位置的距离,并进行排序。对所有满足条件的R树叶子节点重复上述过程,将得到与查询关键词完全匹配的,按照距离的升序排列的若干个房源对象,并由它们构成搜索结果。

一种结合位置和关键词信息的在线房源搜索装置,该装置包括:

a)信息处理与存储模块,处理从互联网中获取的房源信息:将每条房源信息以对象的结构定义,并存储在线性结构中作为房源对象集;提取所有房源对象中包含的关键词,并存储在线性结构中作为房源关键词集;

b)索引构建模块,与信息处理与存储模块连接,将所述得到的房源对象集和房源关键词集分别插入到R树和B树中建立索引,并根据R树的房源空间信息和B树的房源关键词信息之间的对应关系构建用于在线房源搜索的BR树索引;

c)搜索模块,与索引构建模块连接,接收用户输入的关键词和空间位置信息,返回满足条件的房源对象。

所述索引构建模块,进一步包括:在B树中为包含的每一个房源关键词添加对应的链表结构,通过该链表结构建立B树和R树之间的关联。获取R树中的每一个节点包含的房源关键词集合,针对房源关键词集合中的每一个关键词,查找该关键词在B树中的节点位置,并向对应节点中相同关键词的链表结构中,添加指向R树中该叶子节点的指针,得到用于在线房源搜索的BR树索引。

所述索引构建模块中,在建立R树的房源空间信息和B树的房源关键词信息之间的对应关系时,首先构建R树的叶子节点与B树的关联:针对R树的所有叶子节点,遍历叶子节点上所有最小边界矩形内的房源对象,获取其包含的房源关键词集合;其次构建R树的非叶子节点与B树的关联:层次遍历R树并将非叶子节点入队列,再以从队列中读取的顺序压入栈结构中,将栈结构中所有R树节点出栈,对每一个出栈的非叶子节点,用前序遍历其所有子节点,获取其子节点包含的房源关键词集,并做合并去重操作得到该非叶子节点的房源关键词集合。

所述搜索模块中,根据用户输入的查询对象包含的关键词集和空间位置,在构建好的BR树索引中的B树中筛选出满足关键词完全匹配条件的B树节点,进而根据MBRList上存储的指针信息,筛选出满足关键词约束的R树的叶子节点。获取所有满足约束叶子节点中包含的房源对象集合,计算每个房源对象与查询位置的距离,并按照距离的升序排列的若干个房源对象构成搜索结果。

本发明的有益效果:

本发明中构建的房源信息搜索BR树(HousingSearch BR-tree简称HS BR-tree)是一种结合了B树与R树的索引结构。该索引结构根据现有的房源信息数据特点,结合了R树结构存储空间范围中房源对象的特点,以及B树结构存储房源信息关键词的特点,提供了同时对空间位置和关键词进行搜索的方法。本发明中提出的结合位置和关键词信息的在线房源搜索方法,相比传统的空间关键词查询方法,提高了查询效率,解决了实际互联网租房情况中,用户在进行房屋信息查询时,要求同时查询房屋位置与房屋关键词信息这一实际问题。

附图说明

图1为本发明方法流程图;

图2为本发明装置结构示意图;

图3为本发明中房源信息搜索BR树的构建流程图。

具体实施方式

1)房源数据信息的处理与存储

从互联网中获取的房源信息并存着空间位置信息与文本描述信息这两种,因此需要对获取的房源信息进行处理以得到包含完整的空间和关键词信息的房源集合。在对获取的房源信息进行处理时,首先针对每条房源信息的文本描述信息做关键词集的提取处理,一般采用开源的关键词提取算法(例如,TF-IDF,TextRank),并将所有提取到的关键词例如Ok={k1,k2,k3…kn}作为该房源的关键词集;其次针对每条房源信息获取其空间位置,由于房源信息中的空间位置是基于地理位置描述的,因此需要调用开源的百度的Geocoding API(百度地图中提供的将地理位置转换为经纬度HTTP接口)将房源信息中的地理位置描述信息转换为用一对经纬度数表示的变量例如Os=<i,j>作为该房源的空间位置。

在处理好获取到的房源信息后,得到了所有房源信息的空间位置与关键词集。为了存储如此大量的房源数据,本发明定义了房源数据在内存中的存储形式。具体的存储方式如下:

针对获取的所有房源信息的空间位置和关键词集,首先本发明定义每条房源信息以一个对象即Object的结构存储,并将所有房源信息构成的Object集组成的线性结构作为房源对象集。由于表示每条房源信息的Object的结构应包含空间位置,关键词集,以及指向该房源对象完整的文本描述信息的指针即P,因此定义Object的结构如下:

并且上述结构中所指的房源对象完整的文本描述信息,在处理每条房源信息时,就已经添加到内存的链表结构中存储了,因此每个房源对象中包含的是对应文本描述在链表结构中存储的地址。

其次本发明遍历房源对象集中的所有对象,提取所有对象包含的关键词集,将获取的关键词集合并且做去重操作,最终将所得的所有关键词存储在线性结构中作为房源关键词集。

2)房源数据信息的索引结构

本发明中构建的房源信息搜索BR树是一种基于B树与R树结构的索引结构,用来应用于本发明提出的一种结合位置和关键词信息的在线房源搜索方法。因此在BR树的构建过程中需要定义R树与B树中信息的索引形式,并将经过预处理房源信息得到的数据进行索引,其中房源的空间信息通过R树来索引;而集合了所有房源信息对应的关键词集合通过B树索引。

2.1、R树的结构与房源对象的空间索引

R树是一种用于空间索引的平衡树,其中每个节点对应空间范围中的一个矩形区域,叶子节点对应的矩形区域为其存储的所有房源对象的最小边界矩形简称MBR,非叶子节点对应的矩形区域为其所有子节点对应区域范围的最小边界矩形。

本发明中定义Rectangle表示空间范围中的一个矩形,其中使用两个一维数组变量来表示矩形的边界。由于R树结构中叶子节点与非叶子节点的结构不同,叶子节点对应的矩形内直接包含房源对象,非叶子节点对应的矩形内包含其所有子节点对应的矩形区域。因此定义Branch表示矩形中数据的存储,其结构如下:

根据Branch的定义,若当前Rectangle所在节点为叶子节点,则对应的变量child的指针为空,变量data为当前Rectangle中包含的房源对象在内存的线性结构中存储的地址;若当前Rectangle所在节点为非叶子节点,则对应的变量data为空,变量child的指针指向非叶子节点所包含的子节点。定义RNode表示R树结构的节点,由叶子节点与非叶子节点的定义可知,一个RNode中可包含若干个Branch对象,因此RNode结构如下:

在定义了R树节点的结构与数据存储的结构之后,本发明定义R树上各节点对应矩形的空间范围。首先定义R树存储的最大空间范围,例如所有的房源信息来自于城市C,且城市C的经度范围为a-b,纬度范围为c-d,则R树上存储的最大空间范围为城市C的范围,即最大的矩形为(a,c,b,d)围成的矩形。其次获取用户定义的房源最小搜索范围,例如用户定义的最小搜索范围的大小为D的矩形,则在最大空间范围上以D为单位划分若干个大小均匀的矩形,这些矩形作为R树叶子节点对应的最小边界矩形。

在定义了R树叶子节点的空间范围之后,需要将处理房源信息后得到的房源对象集插入到R树结构中进行索引。因此针对房源对象集中的所有对象,获取每个房源对象的空间位置,根据其空间位置找到房源对象所在的最小边界矩形,并将该房源对象插入到最小边界矩形对应的叶子节点中进行存储。最终R树的叶子节点上存储了房源对象集,非叶子节点上存储了指向其对应矩形包含的所有子节点的指针,由此得到可以索引房源空间数据的R树结构。

在获取了新的房源信息时,首先按照本发明中的方法对新房源信息进行预处理,得到新房源对象集;其次将新房源对象集中的所有对象插入到R树结构中建立索引。

2.2、B树的结构与房源关键词的索引

B树结构是一种用于关键词搜索的多叉查找树。本发明将基于处理房源信息后获取到的房源关键词集来构建房源关键词的索引。

因此定义一棵M阶的B树结构,其中每个节点至少存放的关键词数为[M/2-1,M-1],除根节点以外的非叶子节点包含的子节点数为[M/2,M]。由此可定义BNode表示B树结构的节点,其结构如下:

在定义了B树节点的结构之后,针对房源关键词集中的每个关键词,依次插入B树的各个节点中建立索引,由此得到房源关键词索引的B树。

若获取了新的房源信息,首先按照本发明中方法对新房源信息进行预处理,得到新房源关键词集。其次将新房源关键词集中的所有关键词插入到B树结构中建立索引,若插入的关键词在B树中已存在,则不必重复插入。

3)结合空间和关键词信息的BR树结构

为了提高空间和关键词查找的效率,在本发明中根据R树中节点存储的房源对象与B树中节点存储的房源关键词之间的关系,构建用于在线房源搜索的BR树索引结构,从而能够同时使用两种索引结构进行高效的搜索。图3为房源信息搜索BR树的构建方法流程图,包括如下步骤:

本发明为B树上包含的每一个房源关键词Ki添加对应的链表结构简称MBRListi,且链表结构中的元素存储的是指向R树节点的指针。

B树中所有关键词创建好链表结构之后,对R树中的每一个节点,获取其包含的房源关键词集合,针对该房源关键词集合中的每一个关键词,查找该关键词在B树中的节点位置。向该B树节点中对应关键词的链表结构中添加指向R树结构中该节点的指针,若该链表结构中指向R树中某一节点的指针已存在,则不必重复添加,由此构建了B树与R树的关联。并针对R树的每个节点重复上述操作,得到用于在线房源搜索的BR树索引结构。

在向B树中的链表结构添加指向R树节点的指针时,需保证链表结构中存储的元素顺序与R树中MBR的排列顺序相符。首先将R树的叶子节点与B树相关联:针对R树的叶子节点,遍历叶子节点上所有最小边界矩形内的房源对象,获取其包含的房源关键词集合,查找集合中每一个关键词在B树中的节点位置,并构建该叶子节点与B树的关联。

其次将R树的非叶子节点与B树相关联:可定义队列Qu为空,栈St为空,从根节点开始对R树进行层次遍历,将R树的根节点插入队列Qu中。此时判断队列Qu是否为空,当队列Qu不为空时,在队列Qu尾部依次加入当前节点的所有子节点,直到R树的非叶子节点全部入队列。再以从队列中读取的顺序压入栈结构中,在队列Qu的头部读取队列的元素(即R树的节点),对每个读取到的节点N,都将N压到栈St中。当队列读取完毕时,从栈St的顶部开始对栈中的元素进行出栈,对每一个出栈的非叶子节点,用前序遍历其所有子节点,获取其子节点包含的房源关键词集,并做合并去重操作得到该非叶子节点的房源关键词集合,查找集合中每一个关键词在B树中的节点位置,并构建该非叶子节点与B树的关联。

4)在线房源搜索过程

此过程将根据用户输入的房源查询信息,利用构建好的在线房源搜索的BR树索引结构依次搜索出与目标房屋位置最近且关键词完全匹配的房源信息对象集合作为搜索结果。

本发明实际应用的基本思想是:同时考虑目标房屋的空间位置信息与文本描述信息,首先根据空间位置信息将对象进行分组,若某个分组没有包含查询关键词集中所有的关键词,则舍弃该分组。对于包含所有关键词的每个组中,如果该组距离查询点的距离大于某个阈值,就可以舍弃该分组中的所有对象。

因此,房源搜索过程可以包括如下步骤:

(1)首先获取用户输入的房源查询信息,并对信息进行预处理。经过预处理之后可得到房源查询的空间位置、房源查询对象集以及房源查询关键词集。

(2)其次根据房源查询对象集的空间位置,获取建立在该空间位置范围上的用于房源搜索的BR树索引结构。并根据房源查询对象包含的关键词集,在获取的BR树索引中的B树中筛选出满足关键词完全匹配条件的B树节点,进而根据筛选的到的B树节点上所有关键词对应的MBRList,并对所有MBRList中的元素取交集,获取满足关键词约束的R树中的所有叶子节点。

(3)再次根据房源查询对象的空间位置,在满足关键词条件的R树叶子节点集合中,针对每个叶子节点提取出属于该节点的房源对象集合,计算每个房源对象与查询对象空间位置的距离,并进行排序。并对满足条件的R树叶子节点重复上述过程,最终将与查询关键词完全匹配的,按照距离的升序排列的若干个房源对象,作为此次房源查询的搜索结果。

在具体实现中,以在线房源搜索BR树为基础,设计了房源信息搜索系统。系统采用的是互联网上真实的房源数据,并在实验中将BR树算法与传统算法进行了对比。在实际得到的结果中,查询算法的效率与房源数据集的大小、用户查询k的个数、用户搜索的关键词个数有明显的关系,然而采用了HS BR-tree结构的算法明显优于传统的KNN-first算法。KNN-first忽略了文本对搜索的约束能力,仅从空间上进行空间对象的删减,当数据集较大或用户查询的关键词k较大时,效率较差。而采用了HS BR-tree结构的算法,因为能够同时对空间和文本进行约束,从而可以从搜索空间中删减掉大量的空间文本对象,大大提高搜索效率。并且,结合实际房源信息特点,HS BR-tree索引结构更适合应用于房源信息搜索算法中。

实施例

下面用具体的实验例子来证明本发明(HS BR-tree算法)的实现效果以及优势。

定义房源位置的范围,选取了上海为实验区域,即经度范围120-122,纬度范围30-32,并以经度0.1,纬度0.1为单位,将(120,30,122,32)这个矩形平均分成了400份,所有的房源对象将依据其所在经纬度插入到不同的矩形中。

在关键词的选取上,定义了五大房源信息的关键词类型,并选取了24个关键词存入B树中。因此,实验中房源对象的属性数据结构如下表。

实验数据集:搜房网上海市的租房文本信息数据。

实验比较了使用HS BR-tree索引结构的查询算法与传统的KNN-first算法的效率,并以算法的运行时间为衡量标准,分别根据房源数据集大小,用户查询的关键词个数将实验进行分组,针对每组因素进行多次实验,最后取实验的平均值作为该分组的实验耗时。

1)房源数据集大小对算法效率的影响

分别使房源数据集大小为100条数据,1000条数据,10000条数据以及40000条数据。指定用户输入的查询k为10,Qk包含的关键词数目为2作为默认参数,来保证房源数据集大小为唯一变化参数。数据集的测试结果如下表所示:

由表中可以看出,算法效率与房源数据集的大小有明显的关系。算法的性能随着数据集的增大在逐渐地降低,KNN-first算法尤为明显。当数据量增大为40000时,KNN-first的算法性能迅速降低,分析原因可知,因为KNN-first需要访问更多的对象,来获得候选对象,进而进行关键词的匹配。而使用HS BR-tree索引结构的查询算法为了查找所有数据对象,性能会受到一点影响,但因为其使用HS BR-tree索引删减掉了大部分不需访问的对象,从而跟KNN-first算法相比,效率还是大大提高。

2)查询对象的关键词个数对算法效率的影响

分别使用户查询集中对象包含的关键词个数为1,2,3,4,5。取用户输入的查询k为10,房源数据集大小为40000条作为默认参数,来保证用户搜索的关键词个数为唯一变化参数。数据集的测试结果如下表所示:

由表可以看出,算法的效率与查询对象中包含的关键字也有一定的联系,但影响不大。分析原因可知,在结合空间位置与关键词查询的算法中,主要时间消耗仍在空间查找上,因此关键词个数的变化对于算法效率的影响并不明显。但是在同样的房源数据集大小的背景下,随着查询对象关键词个数的增多,使用HS BR-tree索引结构的查询算法仍然表现出了比传统的KNN-first算法更为优势的查询效率。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1