Addressrec:地址解析库

2024-05-08 09:53:50 浏览数 (1)

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

地址分析师

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

安装 addressrec

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

代码语言:javascript复制
pip3 install addressrec

解析如魔法

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

基本使用
代码语言:javascript复制
import addressrec

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

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

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

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

代码语言:javascript复制
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)

请求数据:

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

识别结果:

代码语言:javascript复制
{
    "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

0 人点赞