背景
最近在折腾一个好玩的库,capa
实现地址的格式化输出。我看的教程是这样的:
location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
import cpca
df = cpca.transform(location_str)
df
在正式的运行代码之前,我在想我输入的地址为什么不能是随机的呢(因为结合很多的应用场景,我觉得问题的解决办法都是相通的),顺便还能帮官方的测试一下好不好用。于是我开始了倒腾,找到了一个模拟地址生成的库 Faker
。
在正式使用之前,我也看到了这样的帖子,不使用任何的pip包实现。文章地址
这篇文章几乎是从最基础的方法开始,生成对应的随机信息。个人建议作为初学者可以做这样的尝试,可以不断的提升对于python语法特性的掌握程度,但是作为对python有一定的熟悉程度或者工程师,我们首选的还是
pip
包的组件。一是拿来就用,省时省力;二是:可以用合适呢该有的时间研究一下对方的源码,提升自己的工程化思维和技术的提升。
Faker的使用API可以参照这篇博客,关于Faker的使用我会换一期视频讲解。
安装fake
pip install faker
随机生成10个地址
from faker import Faker
# 创建Faker对象
fake = Faker('zh_CN')
# 生成10个随机地址
random_addresses = []
for _ in range(10):
address = fake.address()
# 生成的地址带区域编号,去除
random_addresses.append(address.split(' ')[0])
for address in random_addresses:
print(address)
生成的地址如下:
可以明显的感觉到这比我们自己手动的书写代码实现随机的信息生成效率、可实用性高多了。
cpca地址解析
安装cpca包
pip install cpca
测试,为了效果更加明显,我写了一条我造的数据
random_addresses.append('湖北省武汉市香港路111号')
import cpca
df = cpca.transform(random_addresses)
print(df)
最终的效果如下:
还可以输出对应的省、市、区的位置,只需要增加如下的参数:
pos_sensitive=True
官方文档的解释:pos_sensitive:如果为True则会多返回三列,分别提取出的省市区在字符串中的位置,如果字符串中不存在的话则显示-1
可见效果还是很nice的,基本上省、市、地址都能很好的提取出来,可用于部分的demo展示;地址信息完整的话,也可以用于实际的生产。但是可以看到部分地址的市、区信息没有提取出来。因为地址是虚造出来的,地址的准确性也没有得到检验。
如果遇到更加复杂的场景,如获得文本的市、区信息,这个就显得有些吃力了。更多的复杂场景,可能就需要用到NLP了,可以参考文章基于PaddleNLP的快递单信息抽取-实体抽取
参考文章
- [使用python提取中文地址描述中的省市区信息](