Browse Source

添加接口返回数据地址为空异常处理。

DESKTOP-6LTVLN7\Liumouren 3 months ago
parent
commit
fa578706cf
1 changed files with 42 additions and 40 deletions
  1. 42 40
      src/main/java/com/skyversation/poiaddr/util/AddressTools.java

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

@@ -491,62 +491,64 @@ public class AddressTools {
         for (int i = 0; i < array.size(); i++) {
             JSONObject obj = array.getJSONObject(i);
             obj.put("searchAddress", address);
+            if (obj.containsKey(param) && obj.get(param) != null) {
 //          得到返回的地址
-            String addr = obj.getString(param);
+                String addr = obj.getString(param);
 //          规则4判断
 //          TODO 添加校验逻辑(首先使用第4校验规则匹配,匹配不到使用第二规则,还匹配不到的话就使用打分规则)
-            Set<String> addressString = AddressQueryEngine.tokenizeString(addr).get(0);
-            Set<String> addressNumber = AddressQueryEngine.tokenizeString(addr).get(1);
-            Set<String> address2String = AddressQueryEngine.tokenizeString(address).get(0);
-            Set<String> address2Number = AddressQueryEngine.tokenizeString(address).get(1);
-            if (addressString != null && addressString.size() > 1) {
-                int addressStrSize = addressString.size();
-                for (String addr2str : address2String) {
-                    if (addressString.contains(addr2str)) {
-                        addressStrSize--;
-                        if (addressStrSize == 0) {
-                            int addressNumSize = addressNumber.size();
-                            for (String addr2Num : address2Number) {
-                                if (addressNumber.contains(addr2Num)) {
-                                    addressNumSize--;
-                                    if (addressNumSize == 0) {
-                                        obj.put("总分", "role_4");
-                                        return obj;
+                Set<String> addressString = AddressQueryEngine.tokenizeString(addr).get(0);
+                Set<String> addressNumber = AddressQueryEngine.tokenizeString(addr).get(1);
+                Set<String> address2String = AddressQueryEngine.tokenizeString(address).get(0);
+                Set<String> address2Number = AddressQueryEngine.tokenizeString(address).get(1);
+                if (addressString != null && addressString.size() > 1) {
+                    int addressStrSize = addressString.size();
+                    for (String addr2str : address2String) {
+                        if (addressString.contains(addr2str)) {
+                            addressStrSize--;
+                            if (addressStrSize == 0) {
+                                int addressNumSize = addressNumber.size();
+                                for (String addr2Num : address2Number) {
+                                    if (addressNumber.contains(addr2Num)) {
+                                        addressNumSize--;
+                                        if (addressNumSize == 0) {
+                                            obj.put("总分", "role_4");
+                                            return obj;
+                                        }
                                     }
                                 }
                             }
                         }
                     }
                 }
-            }
 //          规则2判断
-            String role2address = AddressQueryEngine.townReplaceAll(AddressQueryEngine.addressReplaceAll(addr));
-            String role2address2 = AddressQueryEngine.townReplaceAll(AddressQueryEngine.addressReplaceAll(address));
-            if (AddressQueryEngine.isNotEmptyOrBlank(role2address) && role2address.contains(role2address2)) {
-                obj.put("总分", "role_2");
-                return obj;
-            }
+                String role2address = AddressQueryEngine.townReplaceAll(AddressQueryEngine.addressReplaceAll(addr));
+                String role2address2 = AddressQueryEngine.townReplaceAll(AddressQueryEngine.addressReplaceAll(address));
+                if (AddressQueryEngine.isNotEmptyOrBlank(role2address) && role2address.contains(role2address2)) {
+                    obj.put("总分", "role_2");
+                    return obj;
+                }
 
-            AddressInfo addrInfo = processAddress(addr);
+                AddressInfo addrInfo = processAddress(addr);
 
-            // 第一步:全词匹配比例
-            double score1 = calculateFullWordMatchScore(address, addr);
+                // 第一步:全词匹配比例
+                double score1 = calculateFullWordMatchScore(address, addr);
 
-            // 第二步:数字匹配得分
-            double score2 = calculateNumberMatchScore(addressInfo.firstNumber, addrInfo.firstNumber);
+                // 第二步:数字匹配得分
+                double score2 = calculateNumberMatchScore(addressInfo.firstNumber, addrInfo.firstNumber);
 
-            // 第三步:数字前文本匹配得分
-            double score3 = calculatePrefixTextMatchScore(addressInfo.prefixText, addrInfo.prefixText);
+                // 第三步:数字前文本匹配得分
+                double score3 = calculatePrefixTextMatchScore(addressInfo.prefixText, addrInfo.prefixText);
 
-            double totalScore = score1 + score2 + score3;
+                double totalScore = score1 + score2 + score3;
 
-            if (totalScore > maxTotalScore) {
-                maxTotalScore = totalScore;
-                bestMatch = obj;
-                bestMatch.put("计分1", score1);
-                bestMatch.put("计分2", score2);
-                bestMatch.put("计分3", score3);
-                bestMatch.put("总分", totalScore);
+                if (totalScore > maxTotalScore) {
+                    maxTotalScore = totalScore;
+                    bestMatch = obj;
+                    bestMatch.put("计分1", score1);
+                    bestMatch.put("计分2", score2);
+                    bestMatch.put("计分3", score3);
+                    bestMatch.put("总分", totalScore);
+                }
             }
         }