1. 三元组抽取完成后直接入图

master
xueqingkun 3 months ago
parent 14b0e79c7f
commit e014b70574

@ -70,4 +70,6 @@ public interface Neo4jService {
List<Record> executeCypher(String cypher, Map<String, Object> parameters);
TripleInfo saveTripleInfo(TripleInfo tripleInfo);
void deleteTripleInfo(TripleInfo tripleInfo);
}

@ -1,6 +1,7 @@
package com.supervision.neo4j.service.impl;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
@ -669,4 +670,34 @@ public class Neo4jServiceImpl implements Neo4jService {
tripleInfo.setEndNodeGraphId(endNode.getId());
return tripleInfo;
}
@Override
public void deleteTripleInfo(TripleInfo tripleInfo) {
if (ObjectUtil.isNotEmpty(tripleInfo.getRelGraphId())) {
// 先移除关系
try {
this.deleteRel(tripleInfo.getRelGraphId());
} catch (Exception e) {
log.error("删除关系失败:{}", tripleInfo.getRelation(), e);
return;
}
}
if (ObjectUtil.isNotEmpty(tripleInfo.getEndNodeGraphId())) {
// 再移除尾节点
try {
this.deleteNoRelationNode(tripleInfo.getEndNodeGraphId());
} catch (Exception e) {
log.error("删除尾节点失败:{}", tripleInfo.getEndNode(), e);
return;
}
}
if (ObjectUtil.isNotEmpty(tripleInfo.getStartNodeGraphId())) {
// 尝试删除头节点(只有头节点不存在任何关系的时候才进行删除)
try {
this.deleteNoRelationNode(tripleInfo.getStartNodeGraphId());
} catch (Exception e) {
log.error("删除头节点失败:{}", tripleInfo.getStartNode(), e);
}
}
}
}

@ -1,6 +1,7 @@
package com.supervision.police.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.TripleInfo;
import java.util.List;
@ -16,4 +17,6 @@ public interface TripleInfoService extends IService<TripleInfo> {
void updateNeo4jFlag(List<String> ids, String neo4jFlag);
List<TripleInfo> queryByRecordIdAndPrompt(String recordId, NotePrompt notePrompt);
}

@ -3,7 +3,7 @@ package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.supervision.neo4j.service.Neo4jService;
import com.supervision.police.domain.CasePerson;
import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecordSplit;
@ -42,6 +42,8 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
@Autowired
private NoteRecordSplitService noteRecordSplitService;
private final Neo4jService neo4jService;
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public void extractTripleInfo(String caseId, String name, String recordSplitId) {
@ -108,7 +110,11 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
// 如果有提取到三元组信息
if (CollUtil.isNotEmpty(tripleInfos)) {
for (TripleInfo tripleInfo : tripleInfos) {
log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束...,三元组信息入库:{}",tripleInfo.getRecordSplitId(), JSONUtil.toJsonStr(tripleInfo));
// 三元组入库到neo4j
log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束,开始三元组信息入库",tripleInfo.getRecordSplitId());
neo4jService.saveTripleInfo(tripleInfo);
log.info("doTripleExtractTask:笔录片段:{}三元组提取任务执行结束...,开始三元组信息入库",tripleInfo.getRecordSplitId());
tripleInfo.setAddNeo4j("1");
tripleInfoService.saveOrUpdateByBusiness(tripleInfo);
}
}
@ -143,7 +149,13 @@ public class ExtractTripleInfoServiceImpl implements ExtractTripleInfoService {
Assert.notNull(notePrompt, "notePrompt不能为空");
Assert.notEmpty(recordId, "recordId不能为空");
Assert.notEmpty(caseId, "caseId不能为空");
// 先清除之前的三元组信息
List<TripleInfo> tripleInfos = tripleInfoService.queryByRecordIdAndPrompt(recordId, notePrompt);
log.info("extractTripleInfo:笔录片段:{}清除之前的三元组信息,三元组个数:{}", recordId, tripleInfos.size());
for (TripleInfo tripleInfo : tripleInfos) {
neo4jService.deleteTripleInfo(tripleInfo);
tripleInfoService.removeById(tripleInfo.getId());
}
CasePerson mainActor = casePersonService.getMainActor(caseId);
List<NoteRecordSplit> noteRecordSplits = noteRecordSplitService.queryRecordSplitList(recordId);
return extractTripleInfo(notePrompt, mainActor, noteRecordSplits);

@ -48,9 +48,6 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
private final Neo4jService neo4jService;
private final OllamaChatClient chatClient;
private final NotePromptTypeRelService notePromptTypeRelService;
private final CaseTaskRecordService caseTaskRecordService;

@ -371,7 +371,7 @@ public class ModelServiceImpl implements ModelService {
String recordSplitIdJoin = res.stream().filter(r ->
StringUtils.isNotEmpty(r.getRelId())
&& StringUtils.isNotEmpty(r.getRecordSplitId()))
.map(ResultDTO::getRecordSplitId).collect(Collectors.joining(","));
.map(ResultDTO::getRecordSplitId).distinct().collect(Collectors.joining(","));
atomicResult.setRecordSplitId(recordSplitIdJoin);
}
}

@ -143,6 +143,7 @@ public class TaskRecordServiceImpl extends ServiceImpl<TaskRecordMapper, TaskRec
}
if (CollUtil.isNotEmpty(tripleInfos)) {
for (TripleInfo tripleInfo : tripleInfos) {
tripleInfo.setAddNeo4j("1");
tripleInfoService.updateById(tripleInfo);
}
}

@ -3,11 +3,12 @@ package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.TripleInfo;
import com.supervision.police.mapper.TripleInfoMapper;
import com.supervision.police.service.TripleInfoService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@ -34,6 +35,9 @@ public class TripleInfoServiceImpl extends ServiceImpl<TripleInfoMapper, TripleI
.eq(TripleInfo::getRecordSplitId, tripleInfo.getRecordSplitId()).one();
if (null == one) {
super.save(tripleInfo);
}else {
tripleInfo.setId(one.getId());
super.updateById(tripleInfo);
}
}
@ -47,4 +51,17 @@ public class TripleInfoServiceImpl extends ServiceImpl<TripleInfoMapper, TripleI
}
super.lambdaUpdate().in(TripleInfo::getId, ids).set(TripleInfo::getAddNeo4j, neo4jFlag).update();
}
@Override
public List<TripleInfo> queryByRecordIdAndPrompt(String recordId, NotePrompt notePrompt) {
if (StrUtil.isEmpty(recordId)){
return new ArrayList<>();
}
// 没有直接通过提示词id查询的原因是应为为了兼容老数据
return super.lambdaQuery().eq(TripleInfo::getRecordId, recordId)
.eq(TripleInfo::getStartNodeType, notePrompt.getStartEntityType())
.eq(TripleInfo::getEndNodeType, notePrompt.getEndEntityType())
.eq(TripleInfo::getRelation, notePrompt.getRelType())
.list();
}
}

Loading…
Cancel
Save