由于公司软件需求,需要将一段字符串进行解析出省、市、区、街道、详细地址、手机、姓名。类似淘宝的地址自动识别,研究了一个下午加一个上午,换了好多种算法。
- 手机号
这个不难,将字符串用特定的符号分割,如:英文逗号、中文逗号、空格
分割出来的数组进行字数统计,找到11位字符且可以转换为数字的就是手机号,当然不嫌麻烦也可以用正则 - 姓名
这个不简单,如果输入的都是正常的姓名那也简单,做一个百家姓的数据表。匹配第一个字,且字数不要超过4个。中国4个字的姓名真的不多。
但现在地址里写的可能都不会是真实姓名,且超过5个字的昵称,那就麻烦了。
所以现在用的就是长度对比,数组里长度最长的当作地址来解析,排去手机号,剩下的当作姓名。(暂时没有想到更好的方法) - 地址
真的走了好多弯路
- 省市区分割
这个思路是最早的思路一串字符串用省市区去分割,显然对正规的地址是有效的。但我如果"浙江宁波海曙",这样就找不到了。
失败! - 模糊查询(统计法)
既然地址里的省市区都可能不全,那我就用模糊查询,然后查询到的数据存入数组,且做次数统计。
如地址是:河南郑州100号100幢
先搜索“河”,如图总计1600多条匹配信息,OK!加