Open EnrigleZ opened 5 years ago
感谢,其实曾经是有这个校验,后来把去掉的原因是不知道该以省为准,还是以市为准。
举个不太现实例子,假如是 "台湾省南通风情街",按照你的逻辑就会被匹配成"江苏省南通市"。
有什么更好的解决方法吗?
你的这个例子挺合理的,按照现有的逻辑会被识别为 台湾省 南通市 空字符串 风情街 (电脑不在手边没有实验
所以问题在于“字符串里的地名到底是不是真的地名”…这个问题似乎没有直接的解。
我感觉可以把province_verify和city_verify做成一个可选参数,也可以默认不触发?毕竟如果真的出现了省市无法和pca.csv匹配的情况的话,那大概率就真是一个错误匹配了。此时做一个修正也是一个权宜之举,不过这样每次会有一个对city-map的o(n)遍历,性能会也许略收影响。
至于是按照city还是province为准,可以留给用户权衡。比如上海这样到处都是陕西北路,河南中路的,应该以city为准,匹配为上海市,上海市
如果按照中文地址从大到小的约定,可以将出现在前面的地名权重设置高一点?
我在做地名解析过程中,偶尔遇见标题中提及的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]
中,即为合法。顺便感谢一下作者的工作,cpca是一个很有用的库。由于我没有太深入阅读您的实现,可能写的方案有点粗暴。
如果我的 issue 能帮助改进cpca库,那将非常荣幸 O_O
第一次提 issue,不规范的地方多包涵