论文部分内容阅读
摘要:目前我国的数字建设发展十分迅速,地理编码是数字城市建设中的一项关键技术,常规的地理编码对兴趣点的匹配精度较低。本文提出了基于全文搜索技术的地理编码实现方案,并研究了其关键技术。
Abstract: the digital construction at present in our country is developing very rapidly, and geographical code in the construction of digital city is a key technique, the usual geographical code to the matching of the interest points low precision. This paper puts forward the full text search technology based on the geographical code implementation scheme, and the key technology.
中图分类号:G623.45文献标识码:A 文章编号:
1引言
目前我國的城市数字化即数字城市建设发展十分迅速,数字城市是以空间信息为核心的城市信息平台系统,地理编码是其中的一项关键的技术,地理编码(Geocode)又称地址匹配,是指将地名地址映射成地理坐标的过程[1],其提供了一种将文本或者字符串描述的地名地址转换为地理坐标的方式,是非空间资源与空间信息建立联系的一种有效方式。
地理编码的实现有多种方案,常规的地理编码它是将待匹配的地名地址字符串或文本描述进行拆分和标准化[6],然后利用标准化后的地址字段与地理编码数据库中相对应的属性字段进行匹配,匹配成功后,返回地理空间坐标及相关的属性信息。
采用此种方案虽然能够实现地址匹配,但是存在以下问题:1)匹配全地址时需要多表联合查询,效率比较低;2)对非标准地址匹配精度低;3)针对兴趣点的匹配精度有待提高。本文提出的地理编码实现方案能够有效地解决以上缺点,提高匹配的精度。
2关键技术及流程
基于全文搜索技术的地理编码实现方案流程如图1所示,主要包括地址切分、全文搜索两个关键步骤,它是将待匹配的地名地址字符串基于词典进行分解,然后基于全文搜索引擎进行匹配查找,计算权重,然后按一定规则返回地理空间坐标及相关的属性信息。
图1基于分词和全文搜索技术的地理编码方案
2.1mmseg分词算法
本文采用mmseg分词算法,mmseg是一种基于词典的分词算法,以正向最大匹配为主,多种消除歧义的规则为辅。
mmseg算法中一个核心的概念是chunk。chunk中包含依据上下文分出的一组词和相关的属性,包括长度 (Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。
MMSeg分词算法中涉及了4个规则
规则1:取最大匹配的chunk
规则2:取平均词长最大的chunk
规则3:取词长标准差最小的chunk
规则4:取单字词自由语素度之和最大的chunk
这四个规则符合汉语成词的基本习惯。过滤时先使用规则1来过滤chunks,如果过滤后的结果多于或等于2,则使用规则2继续过滤,否则终止过滤过程。如果使用规则2得到的过滤结果多于或等于2,则使用规则3继续过滤,否则终止过滤过程。如果使用规则3得到的过滤结果多于或等于2,则使用规则4继续过滤,否则终止过滤过程。如果使用规则 4得到的过滤结果多于或等于2,则抛出一个表示歧义的异常,否则终止过滤过程。
2.2全文检索
全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。
应用哪种形式的搜索引擎依赖于数据的形式(和数量)。本文采用的是Sphinx 搜索引擎。Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成,也支持从标准输入读取特定格式的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。
基于Sphinx引擎实现的查询流程如图2所示:它主要包括三个过程:
1) 基于Sphinx引擎,对MySQL数据库建立索引;
2) 通过API进行查询;
3) 返回结果;
图 2Sphinx查询流程
基于Sphinx引擎的全文检索的具体实现主要包括五个关键步骤:即构建source,构建索引,服务进程search配置,创建守候进程,基于PHP API 实现代码查询,下面将对其详细介绍:
构建Source
Sourceadd_test
{
type = mysql
sql_host = 127.0.0.1
sql_port = 3306
sql_user = root
sql_pass = newmap
sql_db = geocode
sql_query_pre= SET NAMES utf8
sql_query= SELECT id,NAME,ADDNAME FROM add_test
sql_query_info_pre = SET NAMES utf8
sql_query_info = SELECT * FROM add_test WHERE id=$id
}
关键参数含义解释:
type:数据源类型,当前配置的是MySQL数据库。
Sql_host:服务器主机地址。由于sphinx与mysql在同一台机器上配置为127.0.0.1
sql_query_pre:取前查询或者预查询,预查询最常见的一个应用就是用来指定服务器服务器返回行时使用的字符编码,一般编码格式设置为utf-8格式
sql_query:获取文档的主查询,本系统设计的是SELECT id,NAME,ADDNAME FROM add_test
2.构建索引
indexadd_test
{
source = add_test
path = /NewMapWeb/newmapserver4/geosearch/var/data/add_test
docinfo= extern
mlock= 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /NewMapWeb/newmapserver4/geosearch/etc/
charset_type = zh_cn.utf-8
}
核心配置选项:
source:索引源声明,为当前MySQL数据库名称add_test;
path:索引文件的路径和文件名,本系统将其放在/NewMapWeb/newmapserver4/geosearch/var/data目录下,文件名称为add_test;
docinfo:文档信息的存储模式,默认值为extern;
mlock:已缓冲数据的内存锁定,默认为0;
charset_type: 字符集编码类型。本系统设置为zh_cn.utf-8;
3.服务进程search配置
searchd
{
listen= 9312
read_timeout = 5
max_children = 30
max_matches = 1000000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file= /NewMapWeb/newmapserver4/geosearch/var/log/geosearch.pid
log = /NewMapWeb/newmapserver4/geosearch/var/log/geosearch.log
query_log = /NewMapWeb/newmapserver4/geosearch/var/log/query.log
binlog_path =
}
核心配置選项
listen: 监听端口默认为本机9312端口;
query_log : 查询日志文件。全部的搜索查询都会记录在此文件中。
log:日志文件,全部searchd运行时事件都会被记录在这个文件里。
max_children:子进程最大数量。用来控制服务器负载。
4.生成索引,创建守护进程
运行命令bin/indexer-c /etc/sphinx.conf–all;
all表示对对配置文件中的多个索引一次生成
5.PHP实现查询,以下为核心代码
3实验
3.1实验平台
CPU: Intel P4 2.4GHz
内存:4G
开发平台: Windows XP,PHP,MySQL地理编码数据库,sphinx引擎
3.2实验数据
选取MySQL地理编码数据库中北京西城,东城,昌平区10万条地址做查询匹配,每次取出1万条数据,连续取10次。这些数据中包含有西单,王府井大街等繁华路段,这些路段地名地址命名比较复杂,兴趣点特别多。
3.3 实验结果
实验结果如上表所示,其中能够成功返回空间坐标的地址有18405条,匹配成功率达到92%。其中8%未能成功计算出空间坐标,其主要原因是1)地理编码数据库空间信息不完备2)某些词存在歧义,分词不准确,导致匹配不成功。从上述结果我们还可以得出:对一万条地址进行地址匹配耗时平均为99.12s,平均每秒能处理 101条数据,完全可以满足需求。
4:小结
上述实验结果表明本文提出的基于中文分词和全文检索的地理编码实现方案,具有较高的匹配精度和较高的匹配效率,尤其是对兴趣点的匹配精度有了很大提升。
5.参考文献
朱前飞.MapInfo中的地理编码及应用[J].四川测绘,2001,23(3):117-119.
张伟.基于webgis的地址采集管理系统开发与研究[D].重庆:西南大学.2007.
王建涛.基于Web的地理信息服务的研究与实践[D],郑州:解放军信息工程大学,2005.
唐桂文. 基于数字地球平台的地理信息服务[D], 北京: 首都师范大学, 2008.
谢小蕙.地理编码原理及方法研究[D].长沙:中南大学,2006.
作者简介:
第一作者:
姓名:李奇;性别:男;出生年月:1985-06;籍贯:山东菏泽民族:汉族助理工程师
注:文章内所有公式及图表请以PDF形式查看。
Abstract: the digital construction at present in our country is developing very rapidly, and geographical code in the construction of digital city is a key technique, the usual geographical code to the matching of the interest points low precision. This paper puts forward the full text search technology based on the geographical code implementation scheme, and the key technology.
中图分类号:G623.45文献标识码:A 文章编号:
1引言
目前我國的城市数字化即数字城市建设发展十分迅速,数字城市是以空间信息为核心的城市信息平台系统,地理编码是其中的一项关键的技术,地理编码(Geocode)又称地址匹配,是指将地名地址映射成地理坐标的过程[1],其提供了一种将文本或者字符串描述的地名地址转换为地理坐标的方式,是非空间资源与空间信息建立联系的一种有效方式。
地理编码的实现有多种方案,常规的地理编码它是将待匹配的地名地址字符串或文本描述进行拆分和标准化[6],然后利用标准化后的地址字段与地理编码数据库中相对应的属性字段进行匹配,匹配成功后,返回地理空间坐标及相关的属性信息。
采用此种方案虽然能够实现地址匹配,但是存在以下问题:1)匹配全地址时需要多表联合查询,效率比较低;2)对非标准地址匹配精度低;3)针对兴趣点的匹配精度有待提高。本文提出的地理编码实现方案能够有效地解决以上缺点,提高匹配的精度。
2关键技术及流程
基于全文搜索技术的地理编码实现方案流程如图1所示,主要包括地址切分、全文搜索两个关键步骤,它是将待匹配的地名地址字符串基于词典进行分解,然后基于全文搜索引擎进行匹配查找,计算权重,然后按一定规则返回地理空间坐标及相关的属性信息。
图1基于分词和全文搜索技术的地理编码方案
2.1mmseg分词算法
本文采用mmseg分词算法,mmseg是一种基于词典的分词算法,以正向最大匹配为主,多种消除歧义的规则为辅。
mmseg算法中一个核心的概念是chunk。chunk中包含依据上下文分出的一组词和相关的属性,包括长度 (Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。
MMSeg分词算法中涉及了4个规则
规则1:取最大匹配的chunk
规则2:取平均词长最大的chunk
规则3:取词长标准差最小的chunk
规则4:取单字词自由语素度之和最大的chunk
这四个规则符合汉语成词的基本习惯。过滤时先使用规则1来过滤chunks,如果过滤后的结果多于或等于2,则使用规则2继续过滤,否则终止过滤过程。如果使用规则2得到的过滤结果多于或等于2,则使用规则3继续过滤,否则终止过滤过程。如果使用规则3得到的过滤结果多于或等于2,则使用规则4继续过滤,否则终止过滤过程。如果使用规则 4得到的过滤结果多于或等于2,则抛出一个表示歧义的异常,否则终止过滤过程。
2.2全文检索
全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。
应用哪种形式的搜索引擎依赖于数据的形式(和数量)。本文采用的是Sphinx 搜索引擎。Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成,也支持从标准输入读取特定格式的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。
基于Sphinx引擎实现的查询流程如图2所示:它主要包括三个过程:
1) 基于Sphinx引擎,对MySQL数据库建立索引;
2) 通过API进行查询;
3) 返回结果;
图 2Sphinx查询流程
基于Sphinx引擎的全文检索的具体实现主要包括五个关键步骤:即构建source,构建索引,服务进程search配置,创建守候进程,基于PHP API 实现代码查询,下面将对其详细介绍:
构建Source
Sourceadd_test
{
type = mysql
sql_host = 127.0.0.1
sql_port = 3306
sql_user = root
sql_pass = newmap
sql_db = geocode
sql_query_pre= SET NAMES utf8
sql_query= SELECT id,NAME,ADDNAME FROM add_test
sql_query_info_pre = SET NAMES utf8
sql_query_info = SELECT * FROM add_test WHERE id=$id
}
关键参数含义解释:
type:数据源类型,当前配置的是MySQL数据库。
Sql_host:服务器主机地址。由于sphinx与mysql在同一台机器上配置为127.0.0.1
sql_query_pre:取前查询或者预查询,预查询最常见的一个应用就是用来指定服务器服务器返回行时使用的字符编码,一般编码格式设置为utf-8格式
sql_query:获取文档的主查询,本系统设计的是SELECT id,NAME,ADDNAME FROM add_test
2.构建索引
indexadd_test
{
source = add_test
path = /NewMapWeb/newmapserver4/geosearch/var/data/add_test
docinfo= extern
mlock= 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /NewMapWeb/newmapserver4/geosearch/etc/
charset_type = zh_cn.utf-8
}
核心配置选项:
source:索引源声明,为当前MySQL数据库名称add_test;
path:索引文件的路径和文件名,本系统将其放在/NewMapWeb/newmapserver4/geosearch/var/data目录下,文件名称为add_test;
docinfo:文档信息的存储模式,默认值为extern;
mlock:已缓冲数据的内存锁定,默认为0;
charset_type: 字符集编码类型。本系统设置为zh_cn.utf-8;
3.服务进程search配置
searchd
{
listen= 9312
read_timeout = 5
max_children = 30
max_matches = 1000000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file= /NewMapWeb/newmapserver4/geosearch/var/log/geosearch.pid
log = /NewMapWeb/newmapserver4/geosearch/var/log/geosearch.log
query_log = /NewMapWeb/newmapserver4/geosearch/var/log/query.log
binlog_path =
}
核心配置選项
listen: 监听端口默认为本机9312端口;
query_log : 查询日志文件。全部的搜索查询都会记录在此文件中。
log:日志文件,全部searchd运行时事件都会被记录在这个文件里。
max_children:子进程最大数量。用来控制服务器负载。
4.生成索引,创建守护进程
运行命令bin/indexer-c /etc/sphinx.conf–all;
all表示对对配置文件中的多个索引一次生成
5.PHP实现查询,以下为核心代码
3实验
3.1实验平台
CPU: Intel P4 2.4GHz
内存:4G
开发平台: Windows XP,PHP,MySQL地理编码数据库,sphinx引擎
3.2实验数据
选取MySQL地理编码数据库中北京西城,东城,昌平区10万条地址做查询匹配,每次取出1万条数据,连续取10次。这些数据中包含有西单,王府井大街等繁华路段,这些路段地名地址命名比较复杂,兴趣点特别多。
3.3 实验结果
实验结果如上表所示,其中能够成功返回空间坐标的地址有18405条,匹配成功率达到92%。其中8%未能成功计算出空间坐标,其主要原因是1)地理编码数据库空间信息不完备2)某些词存在歧义,分词不准确,导致匹配不成功。从上述结果我们还可以得出:对一万条地址进行地址匹配耗时平均为99.12s,平均每秒能处理 101条数据,完全可以满足需求。
4:小结
上述实验结果表明本文提出的基于中文分词和全文检索的地理编码实现方案,具有较高的匹配精度和较高的匹配效率,尤其是对兴趣点的匹配精度有了很大提升。
5.参考文献
朱前飞.MapInfo中的地理编码及应用[J].四川测绘,2001,23(3):117-119.
张伟.基于webgis的地址采集管理系统开发与研究[D].重庆:西南大学.2007.
王建涛.基于Web的地理信息服务的研究与实践[D],郑州:解放军信息工程大学,2005.
唐桂文. 基于数字地球平台的地理信息服务[D], 北京: 首都师范大学, 2008.
谢小蕙.地理编码原理及方法研究[D].长沙:中南大学,2006.
作者简介:
第一作者:
姓名:李奇;性别:男;出生年月:1985-06;籍贯:山东菏泽民族:汉族助理工程师
注:文章内所有公式及图表请以PDF形式查看。