文章目录

  • 引言
  • 模块安装
  • Github地址
  • 基本功能
  • 地图绘制

引言


在一次建模比赛中,我手头里的原始数据中有一个“地址描述”地段,如下:

地址描述
广州国际采购中心1401
上海市长宁区金钟路658弄5号楼5楼
徐汇区虹漕路461号58号楼5楼
济南市历下区和平路34号轻骑院内东二层山东朵拉

这样的地址描述字段过于随意,很难使用,但是看这些字符串的样子似乎又可以提取出其所在的省、市和区,即使只能够提取出区或者市,如果我们有一个省、市和区的归属数据库的话,应该也能够将剩下的信息映射出来,如果自己写的话肯定很麻烦,还要去网上找数据库,于是我做了一个可以复用的python模块,一条命令就可以将上面的“地址描述”字段转换成如下的样子:

广东省 广州市
上海市 上海市 长宁区
上海市 上海市 徐汇区
山东省 济南市 历下区

模块安装


目前支持python3

pip install cpca

常见安装问题:

在 windows 上可能会出现类似如下问题

Building wheel for pyahocorasick (setup.py) ... error

先去下载 Microsoft Visual C++ Build Tools,安装完成后,再重新使用 pip install cpca 安装,即可解决问题

只要先去

Github地址


更详细的模块介绍见Github上的README
https://github.com/DQinYuan/chinese_province_city_area_mapper

如果觉得这个模块对你有帮助的话,请给个star啊

基本功能


本模块中最主要的方法是cpca.transform,该方法可以输入任意的可迭代类型(如list,pandas的Series类型等),然后将其转换为一个DataFrame,下面演示一个最为简单的使用方法:

location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "北京朝阳区北苑华贸城"]
import cpca
df = cpca.transform(location_str)
df

输出的结果为(adcode为官方地址编码):

   省     市    区          地址              adcode
0 上海市 上海市  徐汇区     虹漕路461号58号楼5楼  310104
1 福建省 泉州市  洛江区     万安塘西工业区        350504
2 北京市 市辖区  朝阳区     北苑华贸城           110105

地理小提示:在中国行政区划中,直辖市的区都不是直接挂在直辖市下面的,而是挂在唯一的一个市辖区下面,普通的市下面也会有市辖区,但是普通的市辖区只是 三级行政单位,不像直辖市的市辖区,是二级行政单位

如果你想获知程序是从字符串的哪个位置提取出省市区名的,可以添加一个pos_sensitive=True参数:

location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "北京朝阳区北苑华贸城"]
import cpca
df = cpca.transform(location_str, pos_sensitive=True)
df

输出如下:

     省    市    区        地址               adcode     省_pos  市_pos 区_pos
0  上海市  上海市  徐汇区  虹漕路461号58号楼5楼   310104     -1     -1      0
1  福建省  泉州市  洛江区  万安塘西工业区         350504     -1      0      3
2  北京市  市辖区  朝阳区  北苑华贸城            110105     -1     -1      0

其中省_pos市_pos区_pos三列大于-1的部分就代表提取的位置。-1则表明这个字段是靠程序推断出来的,或者没能提取出来。

中国的区级行政单位非常的多,经常有重名的情况,比如“北京市朝阳区”和“吉林省长春市朝阳区”,当有上级地址信息的时候,cpca 能够根据上级地址 推断出这是哪个区,但是如果没有上级地址信息,单纯只有一个区名的时候, cpca 就没法推断了,只能随便选一个了, 通过 umap 参数你可以指定这种情况下该选择哪一个:

import cpca
cpca.transform(["朝阳区汉庭酒店大山子店"])
#     省    市    区        地址  adcode
#0  吉林省  长春市  朝阳区  汉庭酒店大山子店  220104
cpca.transform(["朝阳区汉庭酒店大山子店"],umap={"朝阳区":"110105"})
#     省    市    区        地址  adcode
#0  北京市  市辖区  朝阳区  汉庭酒店大山子店  110105

从例子可以看出,umap 字典的 key 是区名,value 是区的 adcode,这里 110105 就是北京市朝阳区的 adcode,具体的 adcode 可以去 全国行政区划查询平台 上查询。

从大段文本中提取多个地址(0.5.5版本新功能):

import cpca
df = cpca.transform_text_with_addrs("分店位于徐汇区虹漕路461号58号楼5楼和泉州市洛江区万安塘西工业区以及南京鼓楼区")
df

结果为(注意 transform_text_with_addrs 获得的数据,“地址”列都是空的):

    省     市     区    地址   adcode
0  上海市  市辖区  徐汇区       310104
1  福建省  泉州市  洛江区       350504
2  江苏省  南京市  鼓楼区       320106

transform_text_with_addrs 还支持和 transform 类似的 index, pos_sensitive 以及 umap 参数

地图绘制


模块中还自带一些简单绘图工具,可以在地图上将上面输出的数据以热力图的形式画出来.

这个工具依赖folium,为了减小本模块的体积,所以并不会预装这个依赖,在使用之前请使用pip install folium .

代码如下:

from cpca import drawer
#df为上一段代码输出的df
drawer.draw_locations(df[cpca._ADCODE], "df.html")

这一段代码运行结束后会在运行代码的当前目录下生成一个df.html文件,用浏览器打开即可看到
绘制好的地图(如果某条数据’省’,'市’或’区’字段有缺,则会忽略该条数据不进行绘制),速度会比较慢,需要耐心等待,绘制的图像如下:

还有更多的绘图工具请参考Github上的README中大标题为“示例与测试用例”的部分。

使用python提取中文地址描述中的省市区信息相关推荐

  1. [867]python提取中文地址描述中的省市区信息

    简介 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块. 举个例子: ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘 ...

  2. Python提取Word文档中所有超链接地址和文本

    使用Python扩展库python-docx操作Word文档的相关文章,可以阅读: Python批量导入图片到Word文件 Python查找Word文件中红色和加粗的文字(附元宵节送书活动中奖名单) ...

  3. python如何读取中文文件-如何用Python提取中文关键词?

    本文一步步为你演示,如何用Python从中文文本中提取关键词.如果你需要对长文"观其大略",不妨尝试一下. 2017-12-07-20-38-22-7-426487.png 需求 ...

  4. 如何使用python-如何用Python提取中文关键词?

    本文一步步为你演示,如何用Python从中文文本中提取关键词.如果你需要对长文"观其大略",不妨尝试一下. 2017-12-07-20-38-22-7-426487.png 需求 ...

  5. python中文模糊关键词提取_如何用Python提取中文关键词?

    本文一步步为你演示,如何用Python从中文文本中提取关键词.如果你需要对长文"观其大略",不妨尝试一下. 需求 好友最近对自然语言处理感兴趣,因为他打算利用自动化方法从长文本里提 ...

  6. Python提取岛上书店书中所有书名后做成词云

    通过笔者Python提取<岛上书店>书名这一文章内容中的算法二,我们成功地把<岛上书店>中所有书名提取出来,并保存到同目录下的output.txt文件中.如果单单将这个发到朋友 ...

  7. Python提取word文档中的图片,识别图片文字之后再转存为word文档

    #!/usr/bin/env python # coding: utf-8 import zipfile #压缩包 import os #文件库 import shutil import pytess ...

  8. 下列关于python的描述正确的是-以下关于Python循环结构的描述中,错误的是( )...

    问题:在全世界文明发展过程中,具有的特征是(). 问题:存货模式假设中允许发生资金的短缺 问题:实习大夫小刘准备给患者做六龄齿的窝沟封闭,指导老师检查后让改做预防性充填,因为 问题:对于一个具有 n个 ...

  9. 使用python提取所有word文件中的所有图片

    目录 前言 代码 GIF示例 附:doc转docx 代码 前言 办公中,偶尔会碰到一种情况,需要提取word文档中的图片,决定写这样一款工具自动提取图片. 关于脚本的使用: 情景1:如果你拿到的是一个 ...

最新文章

  1. 4大工业物联网网络的实施战略
  2. 深入了解MyBatis返回值
  3. 区块链BaaS云服务(21)腾讯CCGP跨链平台“系统架构”
  4. 获取script内html元素,Python从scripthtml标记内部获取数据值
  5. 来自东软的 OpenStack 负载均衡即服务开源项目
  6. Hive的使用之hwi
  7. java去除重复对象_Java19-2 集合类去除重复对象
  8. mysql索引怎么设计_mysql索引设计
  9. Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...
  10. 计算机专业挂职锻炼,计算机学院挂职体验谈
  11. 我是如何提升 Rust 编译器的速度?
  12. GNS 3路由器7200介绍
  13. 软件测试必须知道的精华总结
  14. transformer学习之残差网络
  15. (个人笔记)英语语法之动词时态
  16. No certificate for team ‘‘ matching ‘iPhone Distribution: VOVA TECH LIMITED ()‘ Select a different s
  17. Springboot就业招聘信息系统x8y1g计算机毕业设计-课程设计-期末作业-毕设程序代做
  18. 使用fsck命令检查并修复linux文件系统
  19. microduino与onetnet测试
  20. CCNA 初学(第一课)

热门文章

  1. 什么是增长飞轮?增长飞轮(Growth Loops)概述
  2. shamir秘密共享 go语言实现
  3. 曾经很要好的同事,离职后就没有联系了,好失落!
  4. 侧边栏导航(移动端商品--评论--详情)随楼层滑动高亮显示
  5. matroska媒体--万能的多媒体容器
  6. 十进制到八进制的转换方法
  7. python:实现十进制转八进制算法(附完整源码)
  8. 2023年顶级编程语言趋势
  9. 《Linux 黑客基础教程》翻译版发布
  10. tp3.2/thinkphp3.2引入外部类文件/.php文件总结