文本地址智能识别组件(二)
/**
* 识别相关信息:QQ1025032391
* @param request
* @return
*/
@RequestMapping("/textRecognition")
public ApiResult textRecogin(HttpServletRequest request) {
String functionId = "/textRecognition";
String text = request.getParameter("text");
if (StringUtils.isEmpty(text)) {
return error(functionId, "请传入文本信息");
}
String regEx = "[`~!@#$%^&*()\\-+={}':;,\\[\\].<>/?¥%…()_+|【】‘;:”“’。,、?\\s]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(text);
text = m.replaceAll(" ");
String[] textArr = text.split("\\s+");
if (textArr.length != 3) {
return error(functionId, "文本信息传入不正确");
}
List<String> dataList = new ArrayList<String>(Arrays.asList(textArr));
Map<String, String> data = new HashMap<String, String> ();
for (int i = 0; i < dataList.size(); i++) {
List<RegionDTO> recognition = regionService.getTextRecognition(dataList.get(i));
if (recognition.size() > 0) {
if (dataList.get(i).length() > 50) {
return error(functionId, "地址长度不能超过50位");
}
//如果多个结果,可考虑随机匹配
RegionDTO region = recognition.get(new Random().nextInt(recognition.size()));
//不随机匹配
// RegionDTO region = (new Random().nextInt(()));
data.put("provinceCode", region.getProvinceCode());
data.put("province", region.getProvince());
data.put("city", region.getCity());
data.put("county", region.getCounty());
String detail = dataList.get(i).replace(region.getProvince(), "").replace(region.getCity(), "").replace(region.getCounty(), "");
data.put("detail", detail);
data.put("text", Pattern.compile("\\s+").matcher(text.replace(dataList.get(i), region.getProvince()+region.getCity()+region.getCounty() + detail)).replaceAll(","));
dataList.remove(i);
break;
}
}
if (data.isEmpty() || StringUtils.isEmpty(data.get("county"))) {
return error(functionId, "未匹配到地址信息");
}
for (int i = 0; i < dataList.size(); i++) {
if ((Pattern.compile("[0-9]*")).matcher(dataList.get(i)).matches()) {
if (dataList.get(i).length() > 17 || dataList.get(i).length() < 7) {
return error(functionId, "电话号码长度为7-17位");
}
data.put("phone", dataList.get(i));
dataList.remove(i);
break;
}
}
if (StringUtils.isEmpty(data.get("phone"))) {
return error(functionId, "未识别到手机号");
}
if (dataList.get(0).length() > 10) {
return error(functionId, "姓名不能超过10位");
}
data.put("name", dataList.get(0));
Map tempMap = data;
Map<String,Object> resultData = tempMap;
return success(functionId, ApiResult.SUCCESS_MESSAGE, resultData);
}