Addressrec:地址解析库

在我们的日常工作中,特别是数据分析、地理信息系统 (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

posted @ 2024-05-09 14:40  luckzack  阅读(161)  评论(0编辑  收藏  举报