基于分布式系统的网页地名空间索引
小组成员:蔡 啸 陈慧挺 喻力久概述:
基于分布式系统的地名空间索引是对于经典的网页地名索引结构的一个扩展。它的设计目的是为了解决现有的网页索引系统在进行与地名相关的检索时不能够自动地关联到跟关键词有密切联系的其他的地名。我们所采取的解决方案是,通过在索引中引入具有层次结构的地名树,使得数据集具有一定的语义联想的能力,能够更好地理解用户的搜索,从而改善用户的搜索体验以及提高查询结果的质量。
系统的数据流示意图:
网页数据(天网的数据)-(1)-一个以地名为关键词的倒排表-(2)-加入空间标识的中文单词组成的数组-(3)-(迭代)对于这些地名进行空间聚类-(4)-将整理好的输出
根据上述的数据流图,我们可以分析出,整个处理流程中包括以以下三个MR的过程
(1)对网页数据进行分析以及中文切词
(2)中文单词词组到空间表示的映射(geocoding)
(3)建立空间索引(spatial index)
各个MapReduce任务的详细设计:
第一个MapReduce任务
MapReduce任务功能概述:
对大量网页数据进行分析,并建立关于地名的倒排表。
输入输出数据格式的说明:
输入数据:天网数据:具体格式参考 /TWFormat.pdf输出数据:用分隔符切开的中文数据,格式如下:网页ID@单词一|单词二|单词三|...|单词N(注,这里的单词都是地名)
设计架构
网页数据预处理部分的流程图
其他说明
由于基于MapReduce进行分布式计算,因此与下游处理无接口交互。
程序设计:
Map 过程:
Input :网页数据 存储于hadoop分布式文件系统中
处理 :按行读取单个网页。分析网页结构,提取有效数据字段。对字段进行切词。其中中文切词利用正向最大匹配原则进行关键词匹配。
Output :pair (地名 , 网页ID(弱化为行号))。
Reduce 过程:
Input : Pair(地名, 网页ID)
处理: 排序,合并。关键词是地名的ASCII码。
Output: Pair(地名: 网页ID集合)。
Example: 北京:网页ID1@网页ID2@网页ID3@网页ID4@...@网页IDn
第二个MapReduce任务:空间映射
任务概述:
对于已经获得的关于地名的倒排表加入地名的空间坐标(geocoding)
输入数据:用分隔符切开的中文数据,格式如下:
Key:地名
Value: 网页ID1@网页ID2@网页ID3@网页ID4@...@网页IDn
Example: 北京:111@112@113@114@115@116
输出数据:加入了空间关系信息的地名组,格式如下:
Key:地名,坐标
Value:网页ID1@网页ID2@网页ID3@网页ID4@...@网页IDn
空间坐标的具体表示形式(WKT表示方法),具体参考 /wiki/Well-known_text所需的其他数据:地名库数据:即一个具有层次结构的地名的树,比如中国? | \? |?? \浙江 上海? |?????? \? |??????? \?台州???? 徐家汇在进行map的过程中,这棵树被读入到内存中,组成一个hash表(即一个便于查找的数据结构即可),然后系统通过对这棵树进行查找,从而获取所需要的地名的坐标信息。
描述地名库的数据结构为:gazetteer
内部实现:一个散列表,用于实现坐标与地名之间的相互关联
hashtableString, String features;
实现地名与其坐标关联的函数为geocoding
具体的调用方法为: String gazetteer.geocoding(placename),返回地名所对应的空间坐标
地名数据的具体的存储形式:
每行记录一个地名元组,每一个元组包括两个部分,地名和坐标,具体形式如下:
地名1,坐标1 地名2,坐标2
...地名n,? 坐标n这个MR过程所包括的子步骤有: Map:
预处理,即将地名相关的数据读入到内存中,创建一个gazetter
读入倒排表的数据
将经过geocoding的网页数据输出
Reduce:
对map的结果进行整理
Mapper类的详细设计:
读取gazetteer数据并在内存中建立一个gazetteer
函数头:private voi
原创力文档

文档评论(0)