GithubHelp home page GithubHelp logo

dqinyuan / chinese_province_city_area_mapper Goto Github PK

View Code? Open in Web Editor NEW
1.6K 1.6K 388.0 732 KB

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

License: MIT License

Python 99.29% Makefile 0.71%

chinese_province_city_area_mapper's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chinese_province_city_area_mapper's Issues

无法查询已撤销的区

例如:大厂区凤北路22号,提示“无法映射,建议增加到umap中”,但province_area_map中原本就没有“大厂区”,所以无法增加映射
对于这种已经撤销的行政区划的提取,建议允许在umap中增加最新行政区划不存在的映射,或者有其他更好的办法?

鄂尔多斯市 不显示

地址:内蒙古鄂尔多斯市乌审旗,
只在省和区显示了内蒙古和乌审旗,并没有显示鄂尔多斯市,看了源码也没有做特殊的限制。

广州南沙在地址库且唯一但是提示无法映射?

from cpca import area_map
area_map.get_relational_addrs('南沙区')
[('广东省', '广州市', '南沙区')]
location_str = ["南沙区","南沙"]
df = cpca.transform(location_str)
WARNING:root: 无法映射, 建议添加进umap中
WARNING:root: 无法映射, 建议添加进umap中

“天津市”在全文匹配模式下,会被拆分成“天津市”、“津市市”

(1)正确情况
import cpca
values = ['天津市滨海新区']
df = cpca.transform(values, umap={}, pos_sensitive=False, cut=False)

返回 结果为

 省    市    区    地址

0 天津市 天津市 津市市 滨海新区

(2)错误情况
import cpca
values = ['天津市滨海区']
df = cpca.transform(values, umap={}, pos_sensitive=False, cut=False)

返回结果为

 省    市    区   地址

0 天津市 天津市 津市市 滨海区

输入地址前的无效内容去除

请问我能够去除识别到的地址(第一个匹配到的词)之前的无效内容吗?

example:"我的地址是XXXXXXX",去除"我的地址是"这一块

非行政区向行政区(高新区)匹配

各地划分的产业开发区、高新区(非行政区),匹配度不是很好

eg:杭州大江东产业集聚区临江高新区纬五路3688号科创园2幢四层

Prefix dict has been built succesfully.
省 市 区 地址 省_pos 市_pos 区_pos
5 浙江省 杭州市 临江市 大江东产业集聚区临江高新区纬五路3688号科创园2幢四层 -1 0 10

地址不带“省、市、区”的也匹配不到

地址不带“省、市、区”的也匹配不到
杭州经济技术开发区10号大街

还有路名给匹配到省的:
嘉兴市乍浦镇雅山东路126、128、130、132号 | 山东省 | 嘉兴市 |  

当传入地址含有省份命名的街道时,会被错误解析

举的例子 都是淘宝地址。

1、含陕西的,
上海 上海市 徐汇区 陕西南路666弄
image
上海 上海市 普陀区 长寿路街道 陕西北路澳门路
image
传入参数 cut=False 也不能正确解析。

2、含四川的,有的能解析正确,有的不能
解析错误:
重庆 重庆市 沙坪坝区 壮志路33号四川外国语大学山下400020:
image

解析正确:
上海 上海市 虹口区 四川北路街道 海泰时代大厦
image

地址解析bug

{'省': '', '市': '', '区': '', '地址': '云南省楚雄彝族自治州得3434343'}

对于类似“启东市**风情街”的一种改进策略

我在做地名解析过程中,偶尔遇见标题中提及的case,地名中街道里带个省份,这好像也是大家经常遇到的bug。

比如 "启东市**风情街" 会被识别为 "**省 南通市 启东市" (启东市在pca.csv中标记为南通市下的一个区,这个没关系)

问题的出现原因是 "**风情街" 中的“**”被识别为一个合法的province,**省
然后再根据 area “启东市”,对 `city 进行补全,得到南通市

从而 bug occurs...

---------------------- 一个解决方案
_fill_province 中不论是否已有 pca.province,都进行一次省市二元组的合法性检查。如果省份. 城市 没有在 pca.csv 中出现,则视为一个错误的分类结果。我们假设 pca.csv 是一个可靠的文档...

当上述问题出现时,舍弃现有的 pca.province,重新进行补全。

我目前的实现方式是依赖了 cpca 预处理构造的 city_map,如果 (pca.province, pca.city, "") 存在于 city_map[pca.city] 中,即为合法。

def _fill_province(pca):
    """填充省"""

    # 下面的判定条件是新加的,city_map中的每一项都有area取空字符串的情形,因此取空字符串即可
    if pca.city and (pca.province, pca.city, "") in city_map[pca.city]:
        return
    # 下面是原有的,移除了 pca.province 已存在的判定
    if pca.city and (pca.city in city_map):
        pca.province = city_map.get_value(pca.city, P)

顺便感谢一下作者的工作,cpca是一个很有用的库。由于我没有太深入阅读您的实现,可能写的方案有点粗暴。

如果我的 issue 能帮助改进cpca库,那将非常荣幸 O_O

第一次提 issue,不规范的地方多包涵

对少数民族地区的地名映射存在问题

比如输入字符串 "内蒙古阿拉善盟阿拉善左旗巴彦浩特镇"
输出
省 市 区
0 None 阿拉善盟市 阿拉善左旗

  1. 不能找到省级行政单位 内蒙古自治区
  2. 会给市级行政单位盟的后面再加上一个市,造成重复和错误。

获取数据异常

我使用了php调用python来处理地址,输出返回值时数据异常,也就是无法显示正确的省市区,但是我用python直接运行又是正常的,这是为什么

Python2兼容性

Python3和Python2的多继承的始化语句有所差异,因此在Python2下不能使用,建议修改下~
super().init() ==> super(ClassName, self).init()

某些单独的地级市无法被识别

如果没有省份信息, 有些地级市无法被识别(甚至有省份信息也无法识别), 例如 "河北秦皇岛", "江西景德镇", "四川六盘水".

transform返回dataframe的index缺失

强烈建议将transform函数最后一行pd.concat中ignore_index=True这个参数作为transforme的自定义参数,
让用户自己决定是否要输出原有的index。
大多数情况,我们需要相同的index以便对原有表格进行合并或者计算。

不知意下如何?

地址套叠

大神最近遇到一些地址套叠的情况,例如北京市东城区燕郊开发区,这里燕郊开发区是河北的,有木有什么办法可以解决这个问题。谢谢。

“福建省鼓楼区”的bug

都已经能识别出福建省,为啥不能识别出福州市,一个省下面的市不会重名把,这个明显的bug都解决不了,(就算一个省下面有相同的区,那也不至于所有省都会有把)

**地区在地图上不显示

用draw_locations和echarts_draw这两个方法绘图都不显示**
测试了一下 对比**和武汉两个地方

test = pd.DataFrame({'省':['**维吾尔自治区', '湖北省'], '市':['乌鲁木齐市', '武汉市'], '区':['新市区', '汉阳区']}, index=['a', 'b']) draw_locations(test, 'test.html')

发现武汉可以正常显示但**不行。
image

**自动补全问题

我拿这个地址试了一下:“**阿克苏地区阿克苏市实验林场二队”,只能把**识别出来,后面的阿克苏地区和阿克苏市虽然mappers里面都有写,但识别不出来,看了下可能是infrastructure.py里面fillProvince的问题,加了一行
if cls.province_country_mapper.get(word + "自治区"):
return word + "自治区", True
然后在mappers.py里的province_country_mapper加了
'**自治区':'**'
再跑就没问题了。
因为代码还没仔细研究过,不知道改的有没有问题,反正结果是对了。。
大佬有空可以看一下这个问题吗

环境如何搭建

感觉需要相应的版本才能执行?
AttributeError: module 'pandas' has no attribute 'compat'

echart版本?

请问,报错cannot import name 'geo' from 'pyecharts'是echart版本问题吗?
我的echart是1.0版本
麻烦了!

下城区、上城区被压缩为“城区”

杭州市下城区中河北路83号705室 | 河北省 | 杭州市 | 城区 | 下城区中河北路83号705室
杭州市上城区水门南弄3号锦绣工坊1号楼151室 | 浙江省 | 杭州市 | 城区 | 上城区水门南弄3号锦绣工坊1号楼151室
杭州市上城区西湖大道38号6号楼住院楼 | 浙江省 | 杭州市 | 城区 | 上城区西湖大道38号6号楼住院楼

县级市是不是没法解析?

如:万宁市万宁中学
解析结果:万宁市 万宁中学
期待结果:海南省 万宁市 万宁中学

--
因为没看代码逻辑,所以不清楚是什么问题

请问如何添加地址

我发现对香港和澳门及**的匹配有些问题,同时我有对国外数据进行匹配的需求,我组建了自己的地址表,如何添加到此模块?

**、西藏、宁夏、广西 识别不了

试了多遍都是这个情况,可能是bug,反馈一下。

from cpca import *

location_str = ["**","广西","宁夏","西藏"]
df = transform(location_str)
print(df)

输出:

区 市 省
0      
1      
2      
3      

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.