テキストアドレスインテリジェント識別コンポーネント(3)


前言
名前+電話+アドレス識別、前のテキストアドレスインテリジェント識別コンポーネント(一)とテキストアドレスインテリジェント識別コンポーネント(二)はアドレス識別の基本的な需要を満たすことができるが、絶えずテストと実際のシーンの使用を経て、まだいくつかの細部の問題が存在していることを発見し、黄河に行かないで心を込めて究極のバージョンのテキストアドレスインテリジェント識別コンポーネント(三)を実現した.宅配会社の識別機能を参考にして、自分で書き直してみましたが、手間がかからず、やっと作者の望む効果に達しました.
イニシアチブ
まず、倉考の前の考え方は、文字列を処理することによってマッチングの結果を達成する.電話はきっと手に入れることができて、住所なら、私たちは単独でデータベースに行って1.照合には、テキストの電話番号2を認識する必要がある.住所の省市区の入力が完全に正しいと仮定して、私たちは直接ライブラリの中のデータをマッチングして、それから省市区の名称を比較して、省市区の名称の前のは名前で、もし名前が詳しい住所の後ろにあるならば、それは識別できません3.住所の入力は2級または1級のみで、この場合は何度も処理する必要があり、まず省名を照会し、省名は空責で市名を照会し、市名に照会すると市名に基づいて対応する省名を照会し、市名の下の区名を照会し、テキストの住所と比較する.余計なことを言わないで,直接手を広げなさい.
/**
	  service     
	text              
	             
*/

@Override
	public Map<String, Object> getTextRecognitionInfo(String text) {
		//             
		String details = text.replaceAll("\\pP|\\pS|\\s+", "").trim();
		Map<String, Object> data = new HashMap<String, Object> ();

		//          
		String phone = "";
		Pattern phoneReg = Pattern.compile("\\d{7,17}");
		Matcher phoneMatcher = phoneReg.matcher(details);
		while (phoneMatcher.find()) {
			phone = phoneMatcher.group();
		}
		phoneReg = Pattern.compile("1[345678]\\d{9}");
		phoneMatcher = phoneReg.matcher(details);
		while(phoneMatcher.find()) {
			phone = phoneMatcher.group();
			details = details.replaceFirst(phone, "");
		}
		data.put("phone", phone);
		details = details.replaceFirst(phone, "");

		//         
		RegionDTO region = regionMapper.getMatchingRecognition(details);
		//   
		int provinceLength = 0;
		String provinceTemp = "";
		//          
		if (region != null) {
			data.put("region", region);
			String name = details.substring(0, details.indexOf(region.getProvince()));
			data.put("name", name);
			details = details.replaceFirst(name, "");
			data.put("details", details.replaceFirst(region.getProvince()+region.getCity()+region.getCounty(), ""));
			return data;
		} else {
			region = new RegionDTO();
			//      
			List<KdRegion> provinceList = regionMapper.getRegionListByType(1);
			for (KdRegion province : provinceList) {
				String tem;
				if (province.getRegionName().contains(" ")) {
					tem = province.getRegionName().replace(" ","");
				} else if (province.getRegionName().contains(" ")) {
					tem = province.getRegionName().replace(" ","");
				} else if (province.getRegionName().contains("   ")) {
					tem = province.getRegionName().replace("   ","");
				} else {
					tem = province.getRegionName();
				}
				if (details.contains(tem)) {
					if (tem.length() > provinceLength) {
						provinceLength = tem.length();
						provinceTemp = tem;
						region.setProvince(province.getRegionName());
						region.setProvinceCode(province.getRegionId());
					}
				}
			}
		}
		
		String name = details.substring(0, details.indexOf(provinceTemp));
		data.put("name", name);
		details = details.replaceFirst(name, "");
		details = details.replaceFirst(region.getProvince()==null ? "" : region.getProvince(), "").replaceFirst(provinceTemp, "");

		String cityCode = "";
		int cityLength = 0;
		String cityTemp = "";
		//   
		if (region.getProvince() != null) {
			List<KdRegion> cityList = regionMapper.queryregionParentId(region.getProvinceCode());
			for (KdRegion city : cityList) {
				String tem;
				if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else if (city.getRegionName().contains("   ")) {
					tem = city.getRegionName().replace("   ","");
				} else if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else if (city.getRegionName().contains("   ")) {
					tem = city.getRegionName().replace("   ","");
				} else if (city.getRegionName().contains("  ")) {
					tem = city.getRegionName().replace("  ","");
				} else if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else {
					tem = city.getRegionName();
				}

				if (details.contains(tem)) {
					if (tem.length() > cityLength) {
						cityLength = tem.length();
						cityTemp = tem;
						cityCode = city.getRegionId();
						region.setCity(city.getRegionName());
					}
				}

			}
		} else {

			List<KdRegion> cityList = regionMapper.getRegionListByType(2);

			for (KdRegion city : cityList) {
				String tem;
				if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else if (city.getRegionName().contains("   ")) {
					tem = city.getRegionName().replace("   ","");
				} else if (city.getRegionName().contains("   ")) {
					tem = city.getRegionName().replace("   ","");
				} else if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else if (city.getRegionName().contains(" ")) {
					tem = city.getRegionName().replace(" ","");
				} else if (city.getRegionName().contains("  ")) {
					tem = city.getRegionName().replace("  ","");
				} else {
					tem = city.getRegionName();
				}

				if (details.contains(tem)) {
					if (tem.length() > cityLength) {
						cityLength = tem.length();
						cityTemp = tem;
						cityCode = city.getRegionId();
						region.setCity(city.getRegionName());
						region.setProvinceCode(city.getRegionParentId());
						region.setProvince(regionMapper.selectByPrimaryKey(city.getRegionParentId()).getRegionName());
					}
				}

			}

		}

		name = details.substring(0, details.indexOf(cityTemp));
		data.put("name", name);
		details = details.replaceFirst(name, "");
		details = details.replaceFirst(region.getCity()==null ? "" : region.getCity(), "").replaceFirst(cityTemp, "");

		//   
		int countyLength = 0;
		String countyTmp = "";
		if (region.getCity() != null) {
			List<KdRegion> countyList = regionMapper.queryregionParentId(cityCode);
			for (KdRegion county : countyList) {
				String tem;
				if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains("  ")) {
					tem = county.getRegionName().replace("  ","");
				} else if (county.getRegionName().contains(" ")) {
					tem = county.getRegionName().replace(" ","");
				} else if (county.getRegionName().contains("  ")) {
					tem = county.getRegionName().replace("  ","");
				} else if (county.getRegionName().contains("  ")) {
					tem = county.getRegionName().replace("  ","");
				} else {
					tem = county.getRegionName();
				}

				if (details.contains(tem)) {
					if (tem.length() > countyLength) {
						countyLength = tem.length();
						countyTmp = tem;
						region.setCounty(county.getRegionName());
					}
				}

			}
		} else {

			List<KdRegion> cityList = regionMapper.queryregionParentId(region.getProvinceCode());

			for (KdRegion city : cityList) {
				List<KdRegion> countyList = regionMapper.queryregionParentId(city.getRegionId());

				for (KdRegion county : countyList) {
					String tem;
					if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains("  ")) {
						tem = county.getRegionName().replace("  ","");
					} else if (county.getRegionName().contains(" ")) {
						tem = county.getRegionName().replace(" ","");
					} else if (county.getRegionName().contains("  ")) {
						tem = county.getRegionName().replace("  ","");
					} else if (county.getRegionName().contains("  ")) {
						tem = county.getRegionName().replace("  ","");
					} else {
						tem = county.getRegionName();
					}
					if (details.contains(tem)) {
						if (tem.length() > countyLength) {
							countyLength = tem.length();
							countyTmp = tem;
							region.setCity(city.getRegionName());
							region.setCounty(county.getRegionName());
						}
					}
				}
//				if (region.getCity() != null) {
//					break;
//				}

			}

		}
		
		name = details.substring(0, details.indexOf(countyTmp));
		data.put("name", name);
		details = details.replaceFirst(name, "");
		details = details.replaceFirst(region.getCounty()==null ? "" : region.getCounty(), "").replaceFirst(countyTmp, "");

		data.put("region", region);
		data.put("details", details);
		return data;
	}


注意事項
コードは比较的に长くて、それから业务は主に私の仕事の中の需要に対して研究开発して、だから関连するコードは変更したことがあって、住所のSQLを调べても今の表の构造の処理によって、関连する考え方を参考にして変更することができて、本人はこれが识别率が最も高くて、最もシーンに合います.
コードレンズは誰がピークですか?VX 18670040141 POS機办理,クレジットカード办理