Browse Source

大模型信息抽取

master
kami 1 year ago
parent
commit
a090322e7e
  1. 2
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java
  2. 25
      src/main/java/com/biutag/supervisiondata/pojo/constants/Prompt.java
  3. 113
      src/main/java/com/biutag/supervisiondata/rest/ApiController.java
  4. 30
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java
  5. 17
      src/main/java/com/biutag/supervisiondata/util/PatternUtil.java

2
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java

File diff suppressed because one or more lines are too long

25
src/main/java/com/biutag/supervisiondata/pojo/constants/Prompt.java

@ -0,0 +1,25 @@
package com.biutag.supervisiondata.pojo.constants;
import lombok.experimental.UtilityClass;
/**
* @author kami on 2024-12-04 11:10:46
* @version 0.0.1
* @since 1.8
*/
@UtilityClass
public class Prompt {
public static final String CONTENT = """
警情内容
报警人姓名%s
报警人公民身份证号码%s
报警电话号码%s
接警人员分析获取的电话号码 %s
接警人员分析获取的公民身份证号码 %s
报警内容
%s
处警情况
%s
""";
}

113
src/main/java/com/biutag/supervisiondata/rest/ApiController.java

@ -8,6 +8,7 @@ import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.common.response.RS; import com.biutag.supervisiondata.common.response.RS;
import com.biutag.supervisiondata.config.cache.RedisDao; import com.biutag.supervisiondata.config.cache.RedisDao;
import com.biutag.supervisiondata.lock.LocalLock; import com.biutag.supervisiondata.lock.LocalLock;
import com.biutag.supervisiondata.pojo.constants.Prompt;
import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD;
import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcJJDAi; import com.biutag.supervisiondata.pojo.entity.wdpc.WdpcJJDAi;
@ -49,7 +50,6 @@ public class ApiController {
} else { } else {
riskScoreRuleService.runScore(List.of(idCodes.split(","))); riskScoreRuleService.runScore(List.of(idCodes.split(",")));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("", e); log.error("", e);
} finally { } finally {
@ -61,7 +61,20 @@ public class ApiController {
@GetMapping("/get/jjd") @GetMapping("/get/jjd")
public String getJJD() { public String getJJD() {
return (String) RedisDao.getInstance().leftPop("jjd"); String data = (String) RedisDao.getInstance().leftPop("jjd");
if(data == null) {
return "";
}
JSONObject obj = JSON.parseObject(data);
List<String> mobiles = obj.getList("mobiles", String.class);
List<String> idCodes = obj.getList("idCodes", String.class);
return String.format(Prompt.CONTENT, obj.getString("name"),
obj.getString("idCode"),
obj.getString("mobile"),
String.join(",", mobiles),
String.join(",", idCodes),
obj.getString("bjnr"),
obj.getString("cjqk"));
} }
private final GBaseSYRKXXRepository repository; private final GBaseSYRKXXRepository repository;
@ -78,12 +91,13 @@ public class ApiController {
GBaseJJD jjd = JSON.parseObject(str, GBaseJJD.class); GBaseJJD jjd = JSON.parseObject(str, GBaseJJD.class);
String res = data.getString("content"); String res = data.getString("content");
res = res.replaceFirst("```json","").replaceAll("```", ""); res = res.replaceFirst("```json","").replaceAll("```", "").replaceAll("\n","");
JSONObject jb = JSON.parseObject(res); JSONObject jb = JSON.parseObject(res);
JSONArray array = jb.getJSONArray("information"); JSONArray array = jb.getJSONArray("informations");
if(array.isEmpty()) { if(array.isEmpty()) {
return ""; return "";
} }
log.info("{}", array);
List<WdpcJJDAi> aiList = new ArrayList<>(); List<WdpcJJDAi> aiList = new ArrayList<>();
Map<String, Integer> group = new WeakHashMap<>(); Map<String, Integer> group = new WeakHashMap<>();
List<String> idCodes = new ArrayList<>(); List<String> idCodes = new ArrayList<>();
@ -91,9 +105,10 @@ public class ApiController {
for (int i = 0; i < array.size(); i++) { for (int i = 0; i < array.size(); i++) {
WdpcJJDAi ai = new WdpcJJDAi(); WdpcJJDAi ai = new WdpcJJDAi();
JSONObject obj = array.getJSONObject(i); JSONObject obj = array.getJSONObject(i);
log.info("对象:{}", obj);
ai.setBjsj(jjd.getBjsj()); ai.setBjsj(jjd.getBjsj());
ai.setJjdbh(ai.getJjdbh()); ai.setJjdbh(jjd.getJjdbh());
ai.setGroup(Optional.of(group.get(obj.getString("group"))).orElse(group.size())); ai.setGroup(Optional.ofNullable(group.get(obj.getString("group"))).orElse(group.size()));
group.put(obj.getString("group"), group.size()); group.put(obj.getString("group"), group.size());
ai.setMobile(Optional.ofNullable(obj.getString("mobile")).orElse("")); ai.setMobile(Optional.ofNullable(obj.getString("mobile")).orElse(""));
ai.setName(Optional.ofNullable(obj.getString("name")).orElse("")); ai.setName(Optional.ofNullable(obj.getString("name")).orElse(""));
@ -107,49 +122,49 @@ public class ApiController {
} }
aiList.add(ai); aiList.add(ai);
} }
LambdaQueryWrapper<GBaseSYRKXX> wrapper = new LambdaQueryWrapper<GBaseSYRKXX>(); // LambdaQueryWrapper<GBaseSYRKXX> wrapper = new LambdaQueryWrapper<GBaseSYRKXX>();
if(!idCodes.isEmpty()) { // if(!idCodes.isEmpty()) {
wrapper.in(GBaseSYRKXX::getGmsfhm, idCodes); // wrapper.in(GBaseSYRKXX::getGmsfhm, idCodes);
} // }
if(!idCodes.isEmpty() && !mobiles.isEmpty()) { // if(!idCodes.isEmpty() && !mobiles.isEmpty()) {
wrapper.or().in(GBaseSYRKXX::getLxdh, mobiles); // wrapper.or().in(GBaseSYRKXX::getLxdh, mobiles);
} else if(!mobiles.isEmpty()) { // } else if(!mobiles.isEmpty()) {
wrapper.in(GBaseSYRKXX::getLxdh, mobiles); // wrapper.in(GBaseSYRKXX::getLxdh, mobiles);
} // }
List<GBaseSYRKXX> xxList = repository.list(wrapper); // List<GBaseSYRKXX> xxList = repository.list(wrapper);
Map<String, GBaseSYRKXX> xxMap = new WeakHashMap<>(); // Map<String, GBaseSYRKXX> xxMap = new WeakHashMap<>();
Map<String, List<GBaseSYRKXX>> xxMMap = new WeakHashMap<>(); // Map<String, List<GBaseSYRKXX>> xxMMap = new WeakHashMap<>();
for (GBaseSYRKXX syrkxx : xxList) { // for (GBaseSYRKXX syrkxx : xxList) {
xxMap.put(syrkxx.getGmsfhm(), syrkxx); // xxMap.put(syrkxx.getGmsfhm(), syrkxx);
xxMMap.computeIfAbsent(syrkxx.getLxdh(), k -> new ArrayList<>()).add(syrkxx); // xxMMap.computeIfAbsent(syrkxx.getLxdh(), k -> new ArrayList<>()).add(syrkxx);
} // }
//
for (WdpcJJDAi ai : aiList) { // for (WdpcJJDAi ai : aiList) {
GBaseSYRKXX xx = xxMap.get(ai.getIdCode()); // GBaseSYRKXX xx = xxMap.get(ai.getIdCode());
if(xx != null) { // if(xx != null) {
ai.setSyrkMobile(xx.getLxdh()); // ai.setSyrkMobile(Optional.ofNullable(xx.getLxdh()).orElse(""));
ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse("")); // ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse(""));
ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse("")); // ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse(""));
continue; // continue;
} // }
List<GBaseSYRKXX> tmp = xxMMap.get(ai.getMobile()); // List<GBaseSYRKXX> tmp = xxMMap.get(ai.getMobile());
if(tmp == null || tmp.isEmpty()) { // if(tmp == null || tmp.isEmpty()) {
continue; // continue;
} // }
for (GBaseSYRKXX syrkxx : tmp) { // for (GBaseSYRKXX syrkxx : tmp) {
if(xx == null) { // if(xx == null) {
xx = syrkxx; // xx = syrkxx;
continue; // continue;
} // }
if(syrkxx.getXm().equals(ai.getName())) { // if(syrkxx.getXm().equals(ai.getName())) {
xx = syrkxx; // xx = syrkxx;
break; // break;
} // }
} // }
ai.setSyrkMobile(xx.getLxdh()); // ai.setSyrkMobile(Optional.ofNullable(xx.getLxdh()).orElse(""));
ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse("")); // ai.setSyrkName(Optional.ofNullable(xx.getXm()).orElse(""));
ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse("")); // ai.setSyrkIdCode(Optional.ofNullable(xx.getGmsfhm()).orElse(""));
} // }
if(!aiList.isEmpty()) { if(!aiList.isEmpty()) {
aiRepository.saveBatch(aiList); aiRepository.saveBatch(aiList);
} }

30
src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java

@ -241,10 +241,13 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
@Override @Override
public void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end) { public void pullDataAndSaveRedis(LocalDateTime start, LocalDateTime end) {
RedisDao.getInstance().removeListAll("jjd"); RedisDao.getInstance().removeListAll("jjd");
RedisDao.getInstance().opsForHashDelAll("jjd_cache");
List<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), List<GBaseJJD> result = gBaseJJDRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
for (GBaseJJD gBaseJJD : result) { for (GBaseJJD gBaseJJD : result) {
if(gBaseJJD.getBjnr() == null && gBaseJJD.getCjqk()==null) { String bjnr = Optional.ofNullable(gBaseJJD.getBjnr()).orElse("");
String cjqk = Optional.ofNullable(gBaseJJD.getCjqk()).orElse("");
if(bjnr.length() <= 2 && cjqk.length() <= 2 ) {
continue; continue;
} }
JSONObject ob = new JSONObject(); JSONObject ob = new JSONObject();
@ -252,8 +255,29 @@ public class GBaseJJDServiceImpl implements GBaseJJDService {
ob.put("name", gBaseJJD.getBjrxm()); ob.put("name", gBaseJJD.getBjrxm());
ob.put("mobile", gBaseJJD.getBjdh()); ob.put("mobile", gBaseJJD.getBjdh());
ob.put("idCode", Optional.ofNullable(gBaseJJD.getBjrzjhm()).orElse("暂无")); ob.put("idCode", Optional.ofNullable(gBaseJJD.getBjrzjhm()).orElse("暂无"));
ob.put("bjnr", Optional.ofNullable(gBaseJJD.getBjnr()).orElse("")); ob.put("bjnr", bjnr);
ob.put("cjqk", Optional.ofNullable(gBaseJJD.getCjqk()).orElse("")); ob.put("cjqk", cjqk);
String str1 = PatternUtil.takeIdCard(ob.getString("bjnr"));
String str2 = PatternUtil.takeIdCard(ob.getString("cjqk"));
String str3 = PatternUtil.takeMobile(ob.getString("bjnr"));
String str4 = PatternUtil.takeMobile(ob.getString("cjqk"));
List<String> idCodes = new ArrayList<>();
List<String> mobiles = new ArrayList<>();
idCodes.addAll(Arrays.stream(str1.split(",")).filter(item -> item.length()>2).toList());
idCodes.addAll(Arrays.stream(str2.split(",")).filter(item -> item.length()>2).toList());
mobiles.addAll(Arrays.stream(str3.split(",")).filter(item -> item.length()>2).toList());
mobiles.addAll(Arrays.stream(str4.split(",")).filter(item -> item.length()>2).toList());
mobiles.add(ob.getString("mobile"));
idCodes = idCodes.stream().distinct().toList();
mobiles = mobiles.stream().distinct().toList();
if(mobiles.isEmpty() && idCodes.isEmpty()) {
continue;
}
ob.put("idCodes", idCodes);
ob.put("mobiles", mobiles);
RedisDao.getInstance().rightPush("jjd", ob.toJSONString()); RedisDao.getInstance().rightPush("jjd", ob.toJSONString());
RedisDao.getInstance().opsForHashSave("jjd_cache", gBaseJJD.getJjdbh(), JSON.toJSONString(gBaseJJD)); RedisDao.getInstance().opsForHashSave("jjd_cache", gBaseJJD.getJjdbh(), JSON.toJSONString(gBaseJJD));
} }

17
src/main/java/com/biutag/supervisiondata/util/PatternUtil.java

@ -19,6 +19,8 @@ public class PatternUtil {
private static final Pattern ID_CARD = Pattern.compile("\\d{17}[\\d|x|X]|\\d{15}"); private static final Pattern ID_CARD = Pattern.compile("\\d{17}[\\d|x|X]|\\d{15}");
private static final Pattern MOBILE = Pattern.compile("^1(3|4|5|6|7|8|9)\\\\d{9}$");
private static final Pattern MARK = Pattern.compile("1"); private static final Pattern MARK = Pattern.compile("1");
public static String takeIdCard(String content) { public static String takeIdCard(String content) {
@ -36,6 +38,21 @@ public class PatternUtil {
return str.substring(0, str.length()-1); return str.substring(0, str.length()-1);
} }
public static String takeMobile(String content) {
StringBuilder str = new StringBuilder();
if(content == null) {
return str.toString();
}
Matcher Mobiles = MOBILE.matcher(content);
while (Mobiles.find()) {
str.append(Mobiles.group()).append(",");
}
if(str.isEmpty()) {
return str.toString();
}
return str.substring(0, str.length()-1);
}
public static List<Integer> takeMarkPosition(String content) { public static List<Integer> takeMarkPosition(String content) {
List<Integer> indexes = new ArrayList<>(); List<Integer> indexes = new ArrayList<>();
if(content == null) { if(content == null) {

Loading…
Cancel
Save