标签:没有想到 北京 解析 顺序 比较 不难 模糊 递归 sha
由于公司软件需求,需要将一段字符串进行解析出省、市、区、街道、详细地址、手机、姓名。类似淘宝的地址自动识别,研究了一个下午加一个上午,换了好多种算法。
总计1600多条匹配信息,OK!加入数组下一步
搜索“河南”,如图:
总计32条信息,数组里都存在,那次数+1
接着搜“河南郑”,结果0条数据。
如果数据是0,那就从前面删除一位接着搜
搜索“南郑”,如图:
1条数据,好加入数组。
然后查看数组发现统计出来次数是2的有32条,还是确定不了。
失败!
模糊查询(概率法)
再加改造,上面的思路是没有错的,就是要去查询数据匹配出最优的选择,那该怎么办呢
如 “河南”,数据库存储的“河南省”,3个字对了2个,那就是66%的正确率
如 “河南”,数据库存储的“河南岸街道”(一个广东惠州的街道),5个字对了2个,那就是66%的正确率40%
ok,这样就区分开来了,按照每个词语的正确率去排序
但是!字数一样的呢?“河南乡“(中国,四川省,雅安市,汉源县,河南乡),正确率也是一样的66%
这就真的区分不开了,谁都不知道用户指的河南是哪一个
int GetProbability(string str1, string str2) { decimal fm = str1.Length; str1 = str1.Replace(str2, ""); decimal fz = fm - str1.Length; return (int)Math.Floor(fz / fm * 100) + (int)fz; }
这样的正确率计算就没什么大问题了,接下来就是处理。筛选出来的 省市区街道,进行筛选,确定最终结果了,下面都是 if else 的判断。
总计代码量写了300多行没有优化,因为全是if else,可以写递归或者循环省代码的,但是头太疼了就不写了。
下面放一下效果图
有不懂的可以加我 QQ1124391467
标签:没有想到 北京 解析 顺序 比较 不难 模糊 递归 sha
原文地址:https://www.cnblogs.com/jy8888/p/10314729.html