2025年1月31日 星期五 甲辰(龙)年 冬月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 神器,自动识别文字中的省市区并绘图

时间:08-06来源:作者:点击数:36
CDSY,CDSY.XYZ

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

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

1.准备

请选择以下任一种方式输入命令安装依赖

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,即可解决问题。

网盘地址:

链接: https://pan.baidu.com/s/1XJHXbbcZxjmBs6MWPEhEdQ?pwd=d77f 提取码: d77f

2.基本使用

通过两行代码就能实现最基本的省市区提取:

  • 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 参数:

  • 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号新城大厦1440304 0 3 6
  • 1 上海市 None None310000 38 -1 -1
  • 2 四川省 德阳市 广汉市 城西三星堆镇的鸭子河畔,属青铜时代文化遗址 510681 9 -1 12

它标记出了识别到省、市、区的关键位置(index),当然如果是德阳市这种特殊的识别会被标记为-1.

3.高级使用

它还可以从大段文本中批量识别多个地区:

  • 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

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

  • 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://github.com/DQinYuan/chinese_province_city_area_mapper

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐