Przeglądaj źródła

修复地址准确性校验“弄号”判断逻辑BUG

DESKTOP-6LTVLN7\Liumouren 1 miesiąc temu
rodzic
commit
d99ed3703b

+ 1 - 2
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -341,7 +341,7 @@ public class AreaService {
             addr2 = lmrAddrBean.getAddress();
         }
         Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr2);
-        if (roadInfos != null && StringUtils.hasText(roadInfos.get("路名"))) {
+        if (roadInfos != null && roadInfos.containsKey("路名") && roadInfos.get("路名") != null && StringUtils.hasText(roadInfos.get("路名"))) {
             addr2 = roadInfos.get("路名");
         }
         List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
@@ -349,7 +349,6 @@ public class AreaService {
             returnDatas = ScheduledTasks.allDmdzData.get(addr2);
         } else {
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
-//                if (key != null && addr != null && (key.contains(addr2) || addr.contains(key))) {
 //                TODO 地址库有离谱的骚东西
                 if (key != null && addr != null && key.contains(addr2)) {
                     returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));

+ 5 - 2
src/main/java/com/skyversation/poiaddr/util/AddrSplitLmrMap.java

@@ -154,7 +154,6 @@ public class AddrSplitLmrMap {
 //          如果不是外地数据和连接数据的话
             if (!errorAddr) {
 //              上海地址匹配
-//                if (pattern.matcher(addr).find()) {
                 if (addr.startsWith("上海")) {
                     addrMap.setProvinces("上海市");
                     addrMap.setMarket("上海市");
@@ -368,13 +367,17 @@ public class AddrSplitLmrMap {
                 returnMap.put("室号", null);
             }
         }
+//      防止室号误判断
+        if (returnMap.get("楼栋号") == null && returnMap.get("室号") != null && returnMap.get("弄号") != null && returnMap.get("室号").contains(returnMap.get("弄号"))) {
+            returnMap.put("室号", null);
+        }
         return returnMap;
     }
 
     public static void main(String[] args) {
         AddrSplitLmrMap AddrSplitLmrMap = new AddrSplitLmrMap();
         AddrSplitLmrMap.initFile();
-        System.out.println(outAddrMapInAddr("浦东龙华大道2223号"));
+        System.out.println(outAddrMapInAddr("上海市嘉定区兴庆路1551号"));
         // 测试示例(包含所有典型场景)
 //        行政区划、街镇、居委、路名、弄号、室号
 ////      路名

+ 1 - 1
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -924,7 +924,7 @@ public class AddressTools {
         Map<String, String> roomInfo1 = AddrSplitLmrMap.parseAddress(splitAddress1.getAddr());
         Map<String, String> roomInfo2 = AddrSplitLmrMap.parseAddress(splitAddress3.getAddr());
         if (roomInfo1 != null && roomInfo2 != null) {
-            if (!roomInfo1.get("弄号").contains(roomInfo2.get("弄号"))) {
+            if (roomInfo1.get("弄号") != null && roomInfo2.get("弄号") != null && !roomInfo1.get("弄号").contains(roomInfo2.get("弄号"))) {
                 AreaService.getInstance().callBackErrorAddr(bean.getSearchAddress());
             }
         }

+ 25 - 3
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java

@@ -90,6 +90,7 @@ public class ShanghaiAddressSplitUtil {
         errAddrReStr.put("大港镇", "小昆山镇");
         errAddrReStr.put("天马山镇", "佘山镇");
         errAddrReStr.put("江海镇", "南桥镇");
+        errAddrReStr.put("工业区", "");
         Map<String, threeLevelAddress> districtMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> streetMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> communityMap = new HashMap<>();
@@ -585,15 +586,36 @@ public class ShanghaiAddressSplitUtil {
     */
     public static void main(String[] args) throws Exception {
         new ShanghaiAddressSplitUtil().init();
-        AddrSplitLmrMap addrSplitLmrMap = new AddrSplitLmrMap();
+        /*AddrSplitLmrMap addrSplitLmrMap = new AddrSplitLmrMap();
         addrSplitLmrMap.initFile();
-        String testAddress = "上海市崇明区港西镇三双公路1021号10幢U1006室(上海津桥经济开发区)";
+        String testAddress = "上海市嘉定区兴庆路1551号";
         System.out.println("测试地址:" + testAddress);
         SplitAddress xzqh = splitBestAddress(testAddress);
         System.out.println(xzqh);
         AddrBean lmrAddrBean = AddrSplitLmrMap.outAddrMapInAddr(xzqh.getAddr());
         System.out.println("AddrBean:" + lmrAddrBean);
-        System.out.println(AddrSplitLmrMap.parseAddress(lmrAddrBean.getAddress()));
+        System.out.println(AddrSplitLmrMap.parseAddress(lmrAddrBean.getAddress()));*/
+
+        AddressResult.ContentBean test = new AddressResult.ContentBean();
+        test.setRoomNumber("1551");
+        test.setDistance("");
+        test.setLon(121.18766784667969);
+        test.setRoadName("兴庆路");
+        test.setScore("rule_3");
+        test.setAdname("嘉定工业区");
+        test.setLat(31.439653396606445);
+        test.setAddress("兴庆路930号内");
+        test.setSearchAddress("兴庆路1551");
+        test.setPname("上海市");
+        test.setCityname("嘉定区");
+        test.setCommunity("园区5");
+        test.setStandAddr("上海市嘉定区嘉定工业区兴庆路1551");
+        test.setName("兴庆路930号内");
+        test.setX(-26568.0603190182);
+        test.setY(22674.637411829084);
+        test.setLocation("121.18767,31.439653");
+        test.setCommunityCode("141348");
+        AddressTools.ifTrueAddressByBeans(test);
 /*//      数据总条数
         int dataSize = 2158170;
         int numberSize = 100000;