Pārlūkot izejas kodu

优化分词器

ximinghao 1 mēnesi atpakaļ
vecāks
revīzija
8501634d4a

+ 2 - 5
src/main/java/com/skyversation/poiaddr/addquery/DataCallBack.java

@@ -2,11 +2,10 @@ package com.skyversation.poiaddr.addquery;
 
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.bean.GeoJsonBean;
-import com.skyversation.poiaddr.bean.SplitAddress;
+import com.skyversation.poiaddr.util.address_spliter.SplitAddress;
 import com.skyversation.poiaddr.service.AreaService;
-import com.skyversation.poiaddr.util.CoordTransform;
 import com.skyversation.poiaddr.util.CoordTransform2;
-import com.skyversation.poiaddr.util.ShanghaiAddressSplitUtil;
+import com.skyversation.poiaddr.util.address_spliter.ShanghaiAddressSplitUtil;
 import com.skyversation.poiaddr.util.jpa.entity.TAddressCallback;
 import com.skyversation.poiaddr.util.jpa.entity.YyszAddressQp;
 import com.skyversation.poiaddr.util.jpa.rep.TAddressCallbackRep;
@@ -15,13 +14,11 @@ import lombok.Getter;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
 import org.springframework.transaction.support.TransactionTemplate;
 
 import javax.annotation.Resource;
 import java.time.Instant;
-import java.time.LocalDate;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

+ 3 - 1
src/main/java/com/skyversation/poiaddr/util/AddressSplitUtil.java → src/main/java/com/skyversation/poiaddr/util/address_spliter/AddressSplitUtil.java

@@ -1,4 +1,6 @@
-package com.skyversation.poiaddr.util;
+package com.skyversation.poiaddr.util.address_spliter;
+
+import com.skyversation.poiaddr.util.ExcelReaderUtils;
 
 import java.io.InputStream;
 import java.util.*;

+ 30 - 20
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java → src/main/java/com/skyversation/poiaddr/util/address_spliter/ShanghaiAddressSplitUtil.java

@@ -1,6 +1,6 @@
-package com.skyversation.poiaddr.util;
+package com.skyversation.poiaddr.util.address_spliter;
 
-import com.skyversation.poiaddr.bean.SplitAddress;
+import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -193,10 +193,7 @@ public class ShanghaiAddressSplitUtil {
                 if (communityName.isEmpty())continue;
                 for(threeLevelAddress t:All_COMMUNITY_IN_SHANGHAI.get(communityName)){
                     int point = checkTLA(t);
-                    if (point==221){
-                        threeLevelAddress=t;
-                        return;
-                    }else if (point>handingPoint){
+                    if (point>handingPoint){
                         handingPoint=point;
                         handingTLA=t;
                     }
@@ -206,10 +203,7 @@ public class ShanghaiAddressSplitUtil {
                 if (streetName.isEmpty())continue;
                 for(threeLevelAddress t:All_STREET_IN_SHANGHAI.get(streetName)){
                     int point = checkTLA(t);
-                    if (point==2111){
-                        threeLevelAddress=t;
-                        return;
-                    }else if (point>handingPoint){
+                    if (point>handingPoint){
                         handingPoint=point;
                         handingTLA=t;
                     }
@@ -314,13 +308,21 @@ public class ShanghaiAddressSplitUtil {
         splitAddress.setDistrict(result[2]);
         //检查是否在外省,未找到省市或者在省市中找到上海,或者找到上海的区都算作省内
         Map<Integer, String> districtContainResult = contain(beautyAddress, DISTRICT_TO_COMMUNITY_MAP.keySet(), 0);
-        washResult(beautyAddress, districtContainResult,LEVEL_1_SUFFIX_PATTERN);
-        if (!((result[0].isEmpty()|| result[0].equals("上海市")) && (result[1].isEmpty()  || result[1].equals("上海市")||
-                !districtContainResult.isEmpty()))) {
+        int  disIndex= washResult(beautyAddress, districtContainResult,LEVEL_1_SUFFIX_PATTERN);
+        if (!((result[0].isEmpty()|| result[0].equals("上海市")) && (result[1].isEmpty()  || result[1].equals("上海市"))||
+                !districtContainResult.isEmpty())) {
             splitAddress.setStatus(2);
             splitAddress.setAddr(result[3]);
             return splitAddress;
         }
+        if (!districtContainResult.isEmpty()){
+            if (disIndex!=-1){
+                String district=districtContainResult.get(disIndex);
+                threeLevelAddress disTLA = All_COMMUNITY_IN_SHANGHAI.get(DISTRICT_TO_COMMUNITY_MAP.get(district).get(0)).get(0);
+                splitAddress.setDistrict(disTLA.districtFullName);
+                splitAddress.setDistrictCode(disTLA.districtCode);
+            }
+        }
         splitAddress.setProvince("上海市");
         splitAddress.setCity("上海市");
         splitAddress.setCityCode("3101");
@@ -342,8 +344,10 @@ public class ShanghaiAddressSplitUtil {
             splitAddress.setCommunityCode(splittingAddress.threeLevelAddress.communityCode);
 
         }
-        splitAddress.setDistrict(splittingAddress.threeLevelAddress.districtFullName);
-        splitAddress.setDistrictCode(splittingAddress.threeLevelAddress.districtCode);
+        if (disIndex==-1){
+            splitAddress.setDistrict(splittingAddress.threeLevelAddress.districtFullName);
+            splitAddress.setDistrictCode(splittingAddress.threeLevelAddress.districtCode);
+        }
 
 
         //检查是否能够分离
@@ -353,15 +357,20 @@ public class ShanghaiAddressSplitUtil {
                 splitAddress.setStatus(3);
                 return splitAddress;
             }
-            splitAddress.setDistrict(result[2]);
-            splitAddress.setAddr(result[3]);
+
+            if (disIndex!=-1){
+                String sub = beautyAddress.substring(disIndex+districtContainResult.get(disIndex).length());
+                Matcher m = LEVEL_1_SUFFIX_PATTERN.matcher(sub);
+                if (m.find()){
+                    sub = sub.substring(m.end());
+                }
+                splitAddress.setAddr(sub);
+            }
 
             splitAddress.setStatus(1);
             if (result[0].isEmpty()&&result[1].isEmpty()&&districtContainResult.isEmpty())splitAddress.setStatus(4);
             return splitAddress;
-        }
-        //尝试分离
-        if (splittingAddress.street> splittingAddress.community){
+        }else if (splittingAddress.street> splittingAddress.community){
             String sub = beautyAddress.substring(splittingAddress.street+splittingAddress.streetMap.get(splittingAddress.street).length());
             Matcher m = LEVEL_2_SUFFIX_PATTERN.matcher(sub);
             if (m.find()){
@@ -379,6 +388,7 @@ public class ShanghaiAddressSplitUtil {
             }
             splitAddress.setAddr(sub);
         }
+
         splitAddress.setStatus(0);
         if (result[0].isEmpty()&&result[1].isEmpty()&&districtContainResult.isEmpty())splitAddress.setStatus(4);
         if (splitAddress.getStreet().equals("自由贸易试验区"))splitAddress.setStatus(0);

+ 1 - 1
src/main/java/com/skyversation/poiaddr/bean/SplitAddress.java → src/main/java/com/skyversation/poiaddr/util/address_spliter/SplitAddress.java

@@ -1,4 +1,4 @@
-package com.skyversation.poiaddr.bean;
+package com.skyversation.poiaddr.util.address_spliter;
 
 import lombok.Data;