Skip to main content
Join the official Python Developers Survey 2018 and win valuable prizes: Start the survey!

Chinese Province, City and Area Recognition Utilities

Project description

chinese_province_city_area_mapper

chinese_province_city_area_mapper:一个用于识别简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块

举个例子:

 ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
         ↓ 转换
|省    |市   |区    |地址                 |
|上海市|上海市|徐汇区|虹漕路461号58号楼5楼  |
|福建省|泉州市|洛江区|万安塘西工业区        |

chinese_province_city_area_mapper: built to be recognize Chinese province,city and area in simplified Chinese string, it can automaticall map area to city and map city to province. for example:

 ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
         ↓ transform
|省    |市   |区    |地址                 |
|上海市|上海市|徐汇区|虹漕路461号58号楼5楼  |
|福建省|泉州市|洛江区|万安塘西工业区        |

完整文档见该模块的Github, GitHub: https://github.com/DQinYuan/chinese_province_city_area_mapper

特点

  • 基于jieba分词进行匹配,同时加入了一些额外的校验匹配逻辑保证了准确率
  • 因为jieba分词本身只有80%的准确率,经常会分错,所以引入了全文匹配的模式,这种模式下能够提高准确率,但会导致性能降低,关于如何开启这个模式见Github上的使用文档
  • 如果地址数据比较脏的,不能指望依靠这个模块达到100%的准确,本模块只能保证尽可能地提取信息,如果想要达到100%准确率的话,最好在匹配完后再人工核验一下
  • 自带完整的省,市,区三级地名及其经纬度的数据
  • 支持自定义省,市,区映射
  • 输出的是基于pandas的DataFrame类型的表结构,易于理解和使用
  • 封装了简单的绘图功能,可以很方便地进行简单的数据可视化
  • MIT 授权协议

安装说明

代码目前仅仅支持python3

pip install cpca

Get Started

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

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

输出的结果为:

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

全文模式

jieba分词并不能百分之百保证分词的正确性,在分词错误的情况下会造成奇怪的结果,比如下面:

location_str = ["浙江省杭州市下城区青云街40号3楼","广东省东莞市莞城区东莞大道海雅百货"]
from cpca import *
df = transform(location_str)
df

输出的结果为:

区    市    省            地址
城区  东莞市  广东省  莞大道海雅百货自然堂专柜
城区  杭州市  浙江省  下青云街40号3楼

这种诡异的结果因为jieba本身就将词给分错了,所以我们引入了全文模式,不进行分词,直接全文匹配,使用方法如下:

location_str = ["浙江省杭州市下城区青云街40号3楼","广东省东莞市莞城区东莞大道海雅百货"]
from cpca import *
df = transform(location_str, cut=False)
df

输出结果:

  区    市    省        地址
下城区  杭州市  浙江省  青云街40号3楼
莞城区  东莞市  广东省    大道海雅百货

这些就完全正确了,不过全文匹配模式会造成效率低下,我默认会向前看8个字符(对应transform中的lookahead参数默认值为8),这个是比较保守的,因为有的地名会比较长(比如“新疆维吾尔族自治区”),如果你的地址库中都是些短小的省市区名的话,可以选择将lookahead设置得小一点,比如:

location_str = ["浙江省杭州市下城区青云街40号3楼","广东省东莞市莞城区东莞大道海雅百货"]
from cpca import *
df = transform(location_str, cut=False, lookahead=3)
df

输出结果与上面一样。

如果还想知道更多的细节,请访问该 模块的github地址 https://github.com/DQinYuan/chinese_province_city_area_mapper, 在那里我写了更多的细节.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
cpca-0.3.5-py3-none-any.whl (75.9 kB) Copy SHA256 hash SHA256 Wheel py3 Oct 8, 2018
cpca-0.3.5.tar.gz (71.4 kB) Copy SHA256 hash SHA256 Source None Oct 8, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page