文本地址智能识别组件(二)

时间:2025-02-15 09:30:41
/** * 识别相关信息: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); }