首页 > 其他分享 >Addressrec:地址解析库

Addressrec:地址解析库

时间:2024-05-09 14:45:05浏览次数:28  
标签:Addressrec addressrec town 地址 __ village 解析

在我们的日常工作中,特别是数据分析、地理信息系统 (GIS) 开发,或者在线零售等行业中,经常会遇到处理包含地址信息的文本数据这个棘手的任务。
面对大量规格不统一,格式不一致的非结构化地址数据,想要从中快速地提取分级地址、联系人、电话等,简直就是不可能完成的任务。
即使费九牛二虎之力写一个处理程序,也经不起国家统计局对地区信息的调整。到现在我还清楚地记得,当北京亦庄地区被命名为北京经济开发区时,我和小伙伴们通宵达旦修正系统中地址信息地狼狈样子……
那么,有没有办法能快速解决者地址提取问题呢?
你猜的没错,确实有,那就是 —— addressrec

地址分析师

addressrec 是一种基于 Python 的地址解析库,它可以将纷繁复杂的地址信息变成结构化的数据。
它基于 JioNLP 地址解析工具以及国家统计局发布的最新行政区划数据(地址库:2020年国家统计局行政区划[1]),结合 jieba 分词技术与 Levenshtein 字符串相似度算法来处理和解析地址信息。
在线体验 colab[2] 提供了一个简单的演示,表明地址解析是多么轻松简单。
addressrec 的作者是王志超[3]
项目地址:https://github.com/wzc570738205/smartParsePro-py

安装 addressrec

为了使用 addressrec,你需要确保你的 Python 版本为 3.8 或更高:

pip3 install addressrec

解析如魔法

addressrec 提供了简单而强大的接口来处理地址解析。下面是一个基本示例,演示如何使用 addressrec 来从一个文本字符串中识别出地址组件。

基本使用

import addressrec

result = addressrec.run(
    '王志超 029-68216000 新疆维吾尔自治区乌鲁木齐市沙依巴克区西虹东路 463 号',
    True, # 可不传默认true 指定参数town_village(bool),可获取乡镇、村、社区两级详细地名  
    False # 可不传默认false 指定参数change2new(bool)可自动将旧地址转换为新地址
)
print(result)

运行上面的代码,得到的结果会是一个结构化的字典,像这样:

{
    "city": "乌鲁木齐市",
    "county": "沙依巴克区",
    "detail": "西虹东路 463 号",
    "name": "王志超",
    "phone": "029-68216000",
    "province": "新疆维吾尔自治区",
    "town": "",
    "village": ""
}

API 化

如果你想将地址解析的功能集成到你的 web 服务中,addressrec 也提供了相应的方法。
以下是用 Flask 创建一个简单 Web 服务的示例:

from flask import Flask, request, jsonify
import addressrec

app = Flask(__name__)

@app.route('/smart_address', methods=['POST'])
def handle_smart_address():
    data = request.get_json()

    # 获取请求数据 
    text = data.get('text', '')
    town_village = data.get('town_village', True)
    change2new = data.get('change2new', False)

    # 运行地址解析 
    result = addressrec.run(text, town_village, change2new)

    if result:
        return jsonify(result)
    else:
        return jsonify({"error": "Failed to process the request"}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

请求数据:

URL: `http://127.0.0.1:3000/smart_address`
METHOD: 'POST'
BODY:
{
    "text":"马云,陕西省西安市雁塔区丈八沟街道高新四路高新大都荟  13593464918",
    "town_village": true, //
"change2new": false //可不传默认false 指定参数change2new(bool)可自动将旧地址转换为新地址
}

识别结果:

{
    "city": "西安市",
    "county": "雁塔区",
    "detail": "高新四路高新大都荟",
    "name": "马云",
    "phone": " 13593464918",
    "province": "陕西省",
    "town": "丈八沟街道",
    "village": ""
}

实践环节

作为一个 hands-on 的教程,不如我们动手试试吧!以下是几个练习建议:

  1. 尝试使用 addressrec 解析你家附近的某个地址,说不定有惊喜哦!
  2. 创建一个简单的 Web 表单,通过它接收用户输入的地址,然后使用 addressrec 进行解析。
  3. 思考如何将解析结果用于地图标记或其他地理信息服务。

参考资料
[1]
2020年国家统计局行政区划: http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020
[2]
colab: https://colab.research.google.com/drive/1AQ4UAT8N6KeZCSNXfKmrlCaVyah72bKy#scrollTo=gIU_U088qX-g
[3]
项目作者 王志超: https://github.com/wzc570738205

标签:Addressrec,addressrec,town,地址,__,village,解析
From: https://www.cnblogs.com/luckzack/p/18182228

相关文章

  • 视频汇聚边缘网关EasyCVR硬件设备无法访问域名,解析失败该如何处理?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视频监控的能力,也具备接入AI智能分析的能力......
  • Autoware定位模块解析
    定位概述定位有两个目的,一个是为了建图,一个是为了感知和决策规划建图时的定位和实际自动驾驶时的定位区别和相同点?区别:建图过程可以是离线的(回环检测),不要求定位实时性,而自动驾驶时的定位是在线的;建图时除了当前数据和已建地图不包含其他先验信息,而自动驾驶时的定位是包......
  • 2024年PMP考生|考前必练全真模拟题,附答案解析
    需要考试资料的朋友可以加我V.X:huangwanwei99或者QQ:8692555521、在⼀家已经完成多个类似项⽬的组织⾥,项⽬经理必须执⾏⼀个新项⽬的成本估算。如果项⽬经理利⽤这些之前的⼯作作为估算当前项⽬的基础,这属于下列哪⼀个估算法?()A.三点估算法B.⾃下⽽上估算C.参数估算D.......
  • 号称能打败MLP的KAN到底行不行?数学核心原理全面解析
    前几天火爆的Kolmogorov-ArnoldNetworks是具有开创性,目前整个人工智能社区都只关注一件事LLM。我们很少看到有挑战人工智能基本原理的论文了,但这篇论文给了我们新的方向。mlp或多层感知位于AI架构的最底部,几乎是每个深度学习架构的一部分。而KAN直接挑战了这一基础,并且也挑战了......
  • GreatSQL的sp中添加新的sp_instr引入的bug解析
    GreatSQL的sp中添加新的sp_instr引入的bug解析一、问题发现在一次开发中用到的sp需要添加新的sp_instr以满足需求,但是添加了数个sp_instr以后发现执行新的sp会发生core。注:本次使用的GreatSQL8.0.32-251、sp_head.cc的init_sp_psi_keys()代码里面添加10个新的sp_instr:void......
  • 02-大厂电商设计解析之商品管理系统
    1雪花算法使用IdWorkeridWorker=newIdWorker(1,1);for(inti=0;i<10000;i++){longid=idWorker.nextId();System.out.println(id);}配置分布式ID生成器将IdWorker.java拷贝到util包在工程的resources下新增applicationContext-service.xml<!‐‐雪花ID生......
  • 知识扩展--- MMU 将虚拟地址转换为物理地址
    MMU(内存管理单元)如何将虚拟地址转换为物理地址什么是MMU?MMU是“MemoryManagementUnit”的缩写,中文名是内存管理单元。MMU是现代计算机操作系统中的一个重要组成部分,其主要功能是将虚拟地址转换为物理地址。通过MMU,可以实现虚拟内存管理、内存保护、内存共享等功能,从而提高系......
  • JUC源码解析:深入解读偏向锁
    JUC源码解析:深入解读偏向锁本文使用jdk8几种锁状态介绍先介绍一下锁状态吧看偏向锁这一栏,它的内存存储了线程ID和Epoch,这一点尤为关键,意味着偏向锁没有内存可以存储对象头的hashCode,而其他锁是有地方存的.。也就意味着,,当锁对象被隐式(父类)或显试调用了has......
  • DHCP中继配置+2种方式绑定固定地址
    目录路由器环境下中继部署PC1配置PC3配置PC4配置Router_relay配置server2配置三层交换机环境下中继部署路由器环境下中继部署PC1配置noiproutinginte0/0noshutipadddhcpPC3配置noiproutinginte0/0noshutipadddhcpPC4配置noiproutinginterfaceEthe......
  • CyberRT_record解析代码走读
    共享内存共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机......