|
@@ -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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|