Project Icon

geocoding

Java地址标准化与相似度计算库

Geocoding是一个Java开源库,专注于地址标准化和相似度计算。它可以将不规范的文本地址标准化,并计算地址间的相似度。该项目采用国家标准地址库,结合倒排索引和最大长度优先匹配等技术,实现高效准确的地址处理。Geocoding使用IK Analyzer进行分词,采用余弦相似度算法计算地址相似度。它支持自定义地址文件和设置,适用于物流、电商等需要大规模地址数据处理的领域。

项目阶段 Java 8 CI Maven Central

简介

本项目旨在将不规范(或连续)的文本地址尽可能标准化,并计算两个地址之间的相似度

地理编码技术主要包括以下步骤:

  • 地址标准库
  • 地址标准化
  • 相似度计算

pom

<dependencies>
    <dependency>
        <groupId>org.bitlap</groupId> 
        <artifactId>geocoding</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

1. 数据测试

方法调用:Geocoding

  • normalizing:标准化
  • analyze:解析成分词文档
  • similarity:相似度计算
  • similarityWithResult:相似度计算,返回包含更多丰富数据

1.1 标准化

>> 输入:山东青岛市北区山东省青岛市市北区水清沟街道九江路20号大都会3号楼2单元1303
>> 输出:
Address(
	provinceId=370000000000, province=山东省, 
	cityId=370200000000, city=青岛市, 
	districtId=370203000000, district=市北区, 
	streetId=370203030000, street=水清沟街道, 
	townId=null, town=null, 
	villageId=null, village=null, 
	road=九江路, 
	roadNum=20号, 
	buildingNum=3号楼2单元1303, 
	text=大都会
)
>> 输入:上海上海宝山区宝山区【新沪路58弄11-802  水韵华庭 】 (水韵华庭附近)
>> 输出:
Address(
	provinceId=310000000000, province=上海, 
	cityId=310100000000, city=上海市, 
	districtId=310113000000, district=宝山区, 
	streetId=null, street=null, 
	townId=null, town=null, 
	villageId=null, village=null, 
	road=新沪路, 
	roadNum=58弄, 
	buildingNum=11-802, 
	text=水韵华庭水韵华庭附近
)
  • 返回对象说明
    • province相关:省
    • city相关:市
    • district相关:区、县
    • street相关:街道
    • town相关:乡镇
    • village相关:村
    • road:道路
    • roadNum:路号
    • buildingNum:建筑物号
    • text:标准化后未匹配的地址。通常包含小区、商场名称等信息

注:如果对text的结果不太满意,比如出现重复或不准确,可以通过分词方法解决

1.2 相似度

>> 输入:
  浙江金华义乌市南陈小区8幢2号
  浙江金华义乌市稠城街道浙江省义乌市宾王路99号后面南陈小区8栋2号
>> 输出:
  0.8451542547285166
>> 输入:
  山东省沂水县四十里堡镇东艾家庄村206号
  浙江金华义乌市南陈小区8幢2号
>> 输出:
  0.0

1.3 自定义地址文件设置

// 加载自定义地址文件
val geocoding = GeocodingX("region_2021.dat")

// 添加自定义区县"临平区"
geocoding.addRegionEntry(330113000000, 330100000000, "临平区", RegionType.District, "", true)

// 保存自定义字典文件
geocoding.save("xxx.dat")

1.4 自定义地址设置

// 100000000000 代表中国的ID
Geocoding.addRegionEntry(88888888, 100000000000, "尼玛省", RegionType.Province)
Geocoding.addRegionEntry(8888888, 88888888, "尼玛市", RegionType.City)
Geocoding.addRegionEntry(888888, 8888888, "泥煤市", RegionType.District)

>> 输入:中国尼玛省尼玛市泥煤市泥煤大道888号xxx
>> 输出:
Address(
	provinceId=88888888, province=尼玛省, 
	cityId=8888888, city=尼玛市, 
	districtId=888888, district=泥煤市, 
	streetId=null, street=null, 
	townId=null, town=null, 
	villageId=null, village=null, 
	road=泥煤大道, 
	roadNum=888号, 
	buildingNum=null, 
	text=xxx
)

提示:可以从"国家标准地址库"中获取"父级城市ID"

2. 说明

2.1 标准地址库

项目目前采用的是淘宝物流4级地址(已过期,可通过淘宝收货地址获取实际调用地址)的标准地址库,也可以采用"国家的标准地址库"(对应的GitHub仓库,中国5级行政区域MySQL库)。

导入中国5级行政区域MySQL库注意事项

参考文档

2.2 标准地址库(兼容本项目)

标准库文件描述参考感谢
region_2021.dat国家标准地址库2021ISSUE-163TsLenMoweijiang.lin

使用方式:将文件下载到classpath,使用自定义的GeocodingX类即可。

2.3 标准化

  1. 首先基于正则表达式提取出道路、建筑物号等信息
  2. 省市区等匹配
    1. 将标准的地址库建立倒排索引
    2. 从文本起始位置开始,采用最大长度优先的方式匹配所有词条
    3. 对所有匹配结果进行标准行政区域从属关系校验

2.4 相似度计算

  1. 对输入的两个地址进行标准化
  2. 对省市区等信息分配不同的权重
  3. 对道路号、建筑号进行语义处理,分配权重
  4. 对剩余文本(text)使用IK Analyzer进行分词
  5. 对两个结果集使用余弦相似度算法计算相似度

本项目参考了address-semantic-search,简化了流程,修复了各种不规则错误,使得使用更加方便。

感谢

发布日志

更新日志

许可证

MIT

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号