0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Cpca 模块:自动识别文字中的省市区并绘图

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 11:26 次阅读

在做NLP(自然语言处理)相关任务时,经常会遇到需要识别并提取省、城市、行政区的需求。虽然我们自己通过关键词表一个个查找也能实现提取目的,但是需要先搜集省市区关键词表,相对而言比较繁琐。

今天给大家介绍一个模块,你只需要把字符串传递给这个模块,他就能给你返回这个字符串内的省、市、区关键词,并能给你在图片上标注起来,它就是 Cpca 模块。

1.准备

开始之前,你要确保Pythonpip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—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号新城大厦1440304
1 上海市 None None310000
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:push20220623 >python 1.py
     省 市 区 地址 adcode 省_pos 市_pos 区_pos
0  广东省 深圳市 福田区 巴丁街深南中路1025号新城大厦1440304      0      3      6
1  上海市 None None310000     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:push20220623 >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:push20220623 >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:Anaconda3libsite-packagescpcadrawer.py", line 41, in draw_locations
    import folium
ModuleNotFoundError: No module named 'folium'

使用pip安装即可:

pip install folium

然后重新运行代码,会在当前目录下生成 df.html, 双击打开,效果如下:

图片

怎么用,是不是感觉非常方便?以后地点的识别用这个模块就完全够了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2485

    浏览量

    46539
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20135
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30214
  • 数据分析
    +关注

    关注

    2

    文章

    1352

    浏览量

    33738
  • CPCA
    +关注

    关注

    0

    文章

    9

    浏览量

    5913
收藏 人收藏

    评论

    相关推荐

    如何实现串口的自动识别

    用visa设计串口通信程序每次都得选择串口,请问有没有哪位大侠会设计能够自动识别串口的程序??谢谢了~
    发表于 03-23 22:48

    求助帖 labview自动识别

    自动识别 ,不想直接在前面板组合框输入,因为如果表格的A和B变成C和D的话就不匹配了,想实现自动识别。问题是组合框是字符串类型,A,B形成了一个一维数组,怎么办!!!求助
    发表于 04-19 14:34

    LabVIEW怎么自动识别IMEI条码

    公司的移动设备产品条码号是IMEI(15位)类型的,想用labview通过视频采集回图像,然后通过图像处理自动得到IMEI条码号,而labview里面的条码号识别的是13位的国际码,这15位的IMEI条码号怎么自动识别,哪个大神
    发表于 03-18 13:24

    请问USB自动识别芯片RH7901是怎样自动识别充电设备的?

    控制IC,可自动识别充电设备类型,通过对应的USB充电协议与设备握手,使之获得最大充电电流,在保护充电设备的前提下节省充电时间。RH7902 双端口控制功能(RH7902):可同时独立支持两路USB
    发表于 05-22 14:15

    RFID汽车号牌自动识别系统安全如何保证?

    耦合(交变磁场或电磁场)实现无接触信息传递,通过所传递的信息达到识别目的的技术。它是一种非接触式的自动识别技术,通过射频信号自动识别目标对象
    发表于 08-12 06:08

    自动识别串口端工具

    直接打开就能自动识别串口端,就是发送数据的时候不能发送回车过去,其实蛮好使的占用资源低,效率高。sscom33.exe (754 KB )
    发表于 10-22 04:31

    车辆自动识别称重系统的工作原理

    车辆自动识别称重系统的工作原理车辆自动识别称重系统组成车辆自动识别称重系统典型方案示意图车辆自动识别称重系统给用户带来的利益
    发表于 03-01 09:31

    车辆自动识别称重系统是怎样组成的?

    车辆自动识别称重系统的工作原理是什么?车辆自动识别称重系统是怎样组成的?
    发表于 05-13 07:02

    如何实现系统自动识别切断电池供电的呢?

    便携式设备经常会存在USB供电和锂电池供电并存的情况,那么当USB插入供电的时候如何实现系统自动识别切断电池供电的呢?带着这个问题我们来看下今天的分享内容。如下电路主要是实现USB插入自...
    发表于 01-26 07:40

    智能交通系统的车牌自动识别技术有哪些应用呢

    治安卡口等场合,成为研究的热点。车牌识别技术是利用计算机等辅助设备进行的自动汽车牌照自动识别就是在装备了数字摄像设备和计算机信息管理系统等软硬件平台的基础之上,通过对车辆图像的采集,采用先进的图像处理、模式
    发表于 03-02 06:30

    Python pacp模块——自动识别文字省市区绘图

    省市区之后的具体地址也可以将大段文本中所有提到的地址提取出来,并且自动将相邻的存在所属关系的地址归并到一条记录(0.5.5版本新功能):"分店位于徐汇区虹漕路461号58号楼5楼
    发表于 06-27 17:20

    STLink是怎么自动识别STM32芯片型号的?

    这个自动识别机制是怎么样做到的
    发表于 10-27 08:32

    STM32的串口自动识别波特率

    STM32串口自动识别波特率
    的头像 发表于 03-04 09:53 8373次阅读

    Python pacp模块自动识别文字中的省市区并将其绘图

    |省 |市 |区 |地址 ||上海市|上海市|徐汇区|虹漕路461号58号楼5楼 ||福建省|泉州市|洛江区|万安塘西工业区 |   注:“地址”列代表去除了省市区之后的具体地址 也可以将大段文本中所有提到的地址提取出来,并且自动将相邻的存在所属关系的地址归并到一条记录中
    的头像 发表于 06-27 17:19 2427次阅读

    数电票试点扩围至36个省市区 百望云解决方案助力企业数电升级

    省市区(含计划单列市)已全面开展数电票试点。 对于企业而言,这是一次系统升级的最好契机。 一方面,数电票的开票试点和用票试点已在36个省市区全面推广,这使多数企业无须再顾虑各地试点步调不一致的问题,尽快上线数电票系统,就能尽早享受
    的头像 发表于 11-29 17:45 317次阅读
    数电票试点扩围至36个<b class='flag-5'>省市区</b> 百望云解决方案助力企业数电升级