python 行政区域地址标准化:业务经理填报的地址乱起八糟,高德接口有点厉害! -- 后续,使用分词思路完成解析
对前文 https://www.cnblogs.com/cycxtz/p/13378922.html 思路1进行补充。
可以考虑jieba分词库,不过需要先进行训练。
依赖库:jieba
提前准备:国家统计局所有地区信息,以及地区简写。
下来,对使用jieba分词库的add_word。参考使用网站:https://www.cnblogs.com/qilin20/p/12253067.html
import jieba content = "韩国东大门单鞋女方头绒面一脚蹬韩版休闲2020春季新款平底毛毛鞋" result = jieba.cut(content) print("自定义前:",",".join(result)) jieba.add_word("东大门") jieba.add_word("女方头") jieba.add_word("一脚蹬") jieba.add_word("毛毛鞋") result = jieba.cut(content) print("自定义后:",",".join(result))
训练词库以后,对固定字段能准确识别
自定义前: 韩国,东大门,单鞋,女方,头,绒面,一脚蹬,韩版,休闲,2020,春季,新款,平底,毛毛鞋
自定义后: 韩国,东大门,单鞋,女方头,绒面,一脚蹬,韩版,休闲,2020,春季,新款,平底,毛毛鞋
训练完成以后,对每个地址进行分词。
1、匹配顺序为:省->市->县(区)->镇(街道)->城乡
2、分词以后是一个list类型,为避免重复匹配,对已经识别到的分词进行抛弃。采用搜索引擎模式分词,可防止街道信息识别不完整
#!/usr/bin/python # -*- coding: UTF-8 -*- import jieba strt = "我爱北京天安门!" # 全模式 sl = jieba.cut(strt, cut_all=True) print("全模式:", ",".join(sl)) # 精确模式,默认为精确模式,所以可以不指定cut_all=False sl = jieba.cut(strt, cut_all=False) print("精确模式:", ",".join(sl)) # 搜索引擎模式 sl = jieba.cut_for_search(strt) print("搜索引擎模式:", ",".join(sl))
全模式: 我,爱,北京,天安,天安门,,
精确模式: 我,爱,北京,天安门,!
搜索引擎模式: 我,爱,北京,天安,天安门,!
3、设定默认省、市、区,如果未找到匹配入口,从默认查找入口进入。对省、市均未能有匹配才选择默认查找入口,因为不些省份直接使用市级的情况也挺多。
需要分析一下,市级有没有重名。
其他事项:
1、局限性:对于结构不明了的地址,存在识别误差。
2、考虑可以增加,省市区均未有匹配才选择默认入口,不过需要对区的简称进行去重判断,如果重复太多,则不宜使用。
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号