Python实现识别文字中的省市区并绘图
作者:Ckend 发布时间:2021-10-11 08:14:52
在做NLP(自然语言处理)相关任务时,经常会遇到需要识别并提取省、城市、行政区的需求。虽然我们自己通过关键词表一个个查找也能实现提取目的,但是需要先搜集省市区关键词表,相对而言比较繁琐。
今天给大家介绍一个模块,你只需要把字符串传递给这个模块,他就能给你返回这个字符串内的省、市、区关键词,并能给你在图片上标注起来,它就是 Cpca 模块。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。
(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip.
(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点
请选择以下任一种方式输入命令安装依赖:
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install cpca
注意,目前 cpca 模块仅支持Python3及以上版本。
在 windows 上可能会出现类似如下问题:
Building wheel for pyahocorasick (setup.py) ... error
先阅读原文去下载 Microsoft Visual C++ Build Tools 安装VC++构建工具,再重新 pip install cpca,即可解决问题。
2.基本使用
通过两行代码就能实现最基本的省市区提取:
# 公众号: Python 实用宝典
# 2022/06/23
import cpca
location_str = [
"广东省深圳市福田区巴丁街深南中路1025号新城大厦1层",
"特斯拉上海超级工厂是特斯拉汽车首座美国本土以外的超级工厂,位于中华人民共和国上海市。",
"三星堆遗址位于中国四川省广汉市城西三星堆镇的鸭子河畔,属青铜时代文化遗址"
]
df = cpca.transform(location_str)
print(df)
效果如下:
省 市 区 地址 adcode
0 广东省 深圳市 福田区 巴丁街深南中路1025号新城大厦1层 440304
1 上海市 None None 。310000
2 四川省 德阳市 广汉市 城西三星堆镇的鸭子河畔,属青铜时代文化遗址 510681
注意第三条的广汉市,cpca 不仅识别到了语句中的县级市广汉市,还能自动匹配到其代管市的德阳市,不得不说非常强大。
如果你想获知程序是从字符串的那个位置提取出省市区名的,可以添加一个 pos_sensitive=True 参数:
# 公众号: Python 实用宝典
# 2022/06/23
import cpca
location_str = [
"广东省深圳市福田区巴丁街深南中路1025号新城大厦1层",
"特斯拉上海超级工厂是特斯拉汽车首座美国本土以外的超级工厂,位于中华人民共和国上海市。",
"三星堆遗址位于中国四川省广汉市城西三星堆镇的鸭子河畔,属青铜时代文化遗址"
]
df = cpca.transform(location_str, pos_sensitive=True)
print(df)
效果如下:
(base) G:\push\20220623>python 1.py
省 市 区 地址 adcode 省_pos 市_pos 区_pos
0 广东省 深圳市 福田区 巴丁街深南中路1025号新城大厦1层 440304 0 3 6
1 上海市 None None 。310000 38 -1 -1
2 四川省 德阳市 广汉市 城西三星堆镇的鸭子河畔,属青铜时代文化遗址 510681 9 -1 12
它标记出了识别到省、市、区的关键位置(index),当然如果是德阳市这种特殊的识别会被标记为-1.
3.高级使用
它还可以从大段文本中批量识别多个地区:
# 公众号: Python 实用宝典
# 2022/06/23
import cpca
long_text = "对一个城市的评价总会包含个人的感情。如果你喜欢一个城市,很有可能是喜欢彼时彼地的自己。"\
"在广州、香港读过书,工作过,在深圳买过房、短暂生活过,去北京出了几次差。"\
"想重点比较一下广州、深圳和香港,顺带说一下北京。总的来说,觉得广州舒适、"\
"香港精致、深圳年轻气氛好、北京大气又粗糙。答主目前选择了广州。"
df = cpca.transform_text_with_addrs(long_text, pos_sensitive=True)
print(df)
效果如下:
(base) G:\push\20220623>python 1.py
省 市 区 地址 adcode 省_pos 市_pos 区_pos
0 广东省 广州市 None 440100 -1 44 -1
1 香港特别行政区 None None 810000 47 -1 -1
2 广东省 深圳市 None 440300 -1 58 -1
3 北京市 None None 110000 71 -1 -1
4 广东省 广州市 None 440100 -1 86 -1
5 广东省 深圳市 None 440300 -1 89 -1
6 香港特别行政区 None None 810000 92 -1 -1
7 北京市 None None 110000 100 -1 -1
8 广东省 广州市 None 440100 -1 110 -1
9 香港特别行政区 None None 810000 115 -1 -1
10 广东省 深圳市 None 440300 -1 120 -1
11 北京市 None None 110000 128 -1 -1
12 广东省 广州市 None 440100 -1 143 -1
不仅如此,模块中还自带一些简单绘图工具,可以在地图上将上面输出的数据以热力图的形式画出来:
# 公众号: Python 实用宝典
# 2022/06/23
import cpca
from cpca import drawer
long_text = "对一个城市的评价总会包含个人的感情。如果你喜欢一个城市,很有可能是喜欢彼时彼地的自己。"\
"在广州、香港读过书,工作过,在深圳买过房、短暂生活过,去北京出了几次差。"\
"想重点比较一下广州、深圳和香港,顺带说一下北京。总的来说,觉得广州舒适、"\
"香港精致、深圳年轻气氛好、北京大气又粗糙。答主目前选择了广州。"
df = cpca.transform_text_with_addrs(long_text, pos_sensitive=True)
drawer.draw_locations(df[cpca._ADCODE], "df.html")
运行的时候可能会报这个错:
(base) G:\push\20220623>python 1.py
Traceback (most recent call last):
File "1.py", line 12, in <module>
drawer.draw_locations(df[cpca._ADCODE], "df.html")
File "G:\Anaconda3\lib\site-packages\cpca\drawer.py", line 41, in draw_locations
import folium
ModuleNotFoundError: No module named 'folium'
使用pip安装即可:
pip install folium
然后重新运行代码,会在当前目录下生成 df.html, 双击打开,效果如下:
怎么用,是不是感觉非常方便?以后地点的识别用这个模块就完全够了。
还有更多的细节你可以访问这个项目的Github主页阅读,该项目的README完全中文编写,非常容易阅读:
来源:https://mp.weixin.qq.com/s/Z90nrxBT4bk7MVdsj_uFBg
猜你喜欢
- 总有人认为linux搭建php环境很复杂,然后尝试安装lnmp一键安装包。其实说白了就是安装一个web服务器,然后支持php即可,很简单的,
- 如下所示:>>> import numpy as np>>> a = np.array([[1, 2,
- 本文实例讲述了php7 图形用户界面GUI 开发。分享给大家供大家参考,具体如下:一、下载指定系统扩展http://pecl.php.net
- 之前就见过很多网站在侧边栏上使用<dl />标签对来完成侧边栏栏目的布局,最近在研究DEDECMS的默认模板时,也发现该模板在大
- 前言Tenacity是一个 Apache 2.0授权的通用重试库,用 Python 编写,用于简化向几乎所有内容添加重试行为的任务。它起源于
- 为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有
- 佛爷去了公司的年夜饭,我有点无聊就在公司 Coding 点东西玩玩,于是就有了这玩意。请允许我很猥·琐得将这个游戏称之为“是男人坚持 100
- 一、前言在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态的辅助数据。下面通过一个例子
- 本文实例为大家分享了python webp图片格式转化的具体代码,供大家参考,具体内容如下1、将本地的webp图片转换为jpg2、将下载的w
- 在一般问题的优化中,最速下降法和共轭梯度法都是非常有用的经典方法,但最速下降法往往以”之”字形下降,速度较慢,不能很快的达到最优值,共轭梯度
- 前言本文主要给大家介绍了关于python用MethodType绑定方法到类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细
- 一、修改操作系统核心参数在Root用户下执行以下步骤:1)修改用户的SHELL的限制,修改/etc/security/limits.conf
- 做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而
- 导读:这篇论坛文章主要介绍了使用SQL Server升级顾问的具体步骤,详细内容请参考下文。微软提供了SQL Server 2008升级顾问
- 本文实例讲述了PHP实现多文件上传的方法。分享给大家供大家参考。具体实现方法如下:<?phpdefine('ROOT'
- 出现的问题状况是:在Anaconda文件下,少了Jupyter Notebook快捷键,不然每次都要打开Anaconda Navigator
- 随着因特网的发展,在网络环境中,数据库应用渐渐向操作简单、功能实用的方向发展。本文介绍如何利用ASP技术实现对数据库进行在线维护的方法,并给
- 1 蚂蚁森林简介蚂蚁森林是一项旨在带动公众低碳减排的公益项目,每个人的低碳行为在蚂蚁森林里可计为"绿色能量"。"
- 本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下题目期末项目 一. 项目要求利用函数实现通讯
- 昨天看到设计师提供的一张有关多个设计师角色间的漫画图(如下图),着实感到有点讽刺。现在的设计还只是停留在“盲人摸象”的阶段,为什么会这样?在