大模型批量提取标题接口

topo_dev
DESKTOP-DDTUS3E\yaxin 8 months ago
parent 9cff14a305
commit 029a8a636d

@ -0,0 +1,13 @@
package com.supervision.police.dto;
import lombok.Data;
/**
* ocrdto
*/
@Data
public class OcrExtractDto {
private String id;
private String text;
private String title;
}

@ -0,0 +1,16 @@
package com.supervision.police.service;
import com.supervision.police.dto.OcrExtractDto;
import java.util.List;
public interface OcrExtractService {
/**
*
*
* @param ocrExtractDtoList ocrExtractDtoList
* @return List<OcrExtractDto>
*/
List<OcrExtractDto> extractTitle(List<OcrExtractDto> ocrExtractDtoList);
}

@ -0,0 +1,60 @@
package com.supervision.police.service.impl;
import cn.hutool.core.util.StrUtil;
import com.supervision.police.dto.OcrExtractDto;
import com.supervision.police.service.OcrExtractService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Service
public class OcrExtractServiceImpl implements OcrExtractService {
@Autowired
private OllamaChatClient ollamaChatClient;
@Override
public List<OcrExtractDto> extractTitle(List<OcrExtractDto> ocrExtractDtoList) {
List<OcrExtractDto> result = new ArrayList<>();
// 遍历ocrExtractDtoList调用接口提取标题
ocrExtractDtoList.forEach(ocrExtractDto -> {
HashMap<String, String> paramMap = new HashMap<>();
paramMap.put("text", ocrExtractDto.getText());
paramMap.put("requirement", "1.尝试提取图中明显的标题。2.始终输出json格式{\"title\":\"*****\"},没有明显标题则返回:{\"title\":\"\"}。3.只提取title属性不需要任何其他输出。");
String template = "要求如下:\n{requirement}\n文本内容如下\n{text}";
ChatResponse call = ollamaChatClient.call(new Prompt(new UserMessage(StrUtil.format(template, paramMap))));
String content = call.getResult().getOutput().getContent();
log.info("content: {}", content);
//将text置为空减少返回数据量
ocrExtractDto.setText("");
//判断content是否为JSON格式如果是则尝试转换为JSON格式并获取title属性的值
try {
JSONObject jsonObject = new JSONObject(content);
String title = jsonObject.getString("title");
ocrExtractDto.setTitle(title);
} catch (Exception e) {
log.error("解析标题失败", e);
} finally {
//如果未提取到标题则使用result中最后一个节点的title
if (StringUtils.isEmpty(ocrExtractDto.getTitle())) {
if (!result.isEmpty()) {
ocrExtractDto.setTitle(result.get(result.size() - 1).getTitle());
}
}
result.add(ocrExtractDto);
}
});
return result;
}
}

@ -0,0 +1,82 @@
package com.supervision.demo;
import com.supervision.police.dto.OcrExtractDto;
import com.supervision.police.service.OcrExtractService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@SpringBootTest
public class OcrExtractTest {
@Autowired
private OcrExtractService ocrExtractService;
@Test
public void testExtractTitle() {
List<OcrExtractDto> ocrExtractDtoList = new ArrayList<>();
OcrExtractDto ocrExtractDto = new OcrExtractDto();
ocrExtractDto.setId("1833322433007398913");
ocrExtractDto.setText("关于李社辉等人涉嫌合同诈骗罪的\n" +
"报案材料\n" +
"报案人许锋8。年\n" +
"一月\n" +
"/旦,汉族,\n" +
"号:-640/2119001012218\n" +
"电话1837571888。\n" +
"被报案人:\n" +
"李社辉年月1/日,汉族,住\n" +
"址西安市间良7x公园路7株号身份证号610114195505110513\n" +
"电话1810537777。\n" +
"宁夏博金特立体泊车设备有限公司,住所地:青铜峡市嘉宝\n" +
"工业园区7-8号。\n" +
"法定代表人:李社辉,该公司总经理。\n" +
"报案请求:\n" +
"因被报案人李社辉等人涉嫌合同诈骗罪,报案人现向贵局报\n" +
"案,请求立案侦查。\n" +
"事实与理由:\n" +
"一、背景事实\n" +
"2017年4月左右罗静给报案人打电话称其时任宁夏博金\n" +
"特立体泊车设备有限公司副总,公司项目的发拨、资金的发放均\n" +
"由他决定,将会有好的项目给报案人介绍。\n" +
"2017年5月10日罗静给报案人打电话说有一个很好的立\n" +
"体停车场的项目欲承包给报案人,让报案人准备二十万元保证金\n" +
"交到公司,并强调必须是现金。因此,当天下午报案人从银行卡\n" +
"里取出二十万元现金交至被报案人李社辉处,对方给报案人出具");
ocrExtractDtoList.add(ocrExtractDto);
OcrExtractDto ocrExtractDto2 = new OcrExtractDto();
ocrExtractDto2.setId("1833322459494428674");
ocrExtractDto2.setText("了《收据》一张,并与报案人签订了《协议书》一份,约定报案\n" +
"人同意向宁夏博金特立体泊车设备有限公司以现金方式进行担\n" +
"保,交纳质量及施工保证金,即人民币二十万元整。该保证金交\n" +
"至甲方账户后,宁夏博金特立体泊车设备有限公司须确保凯尔福\n" +
"邸项目由报案人完成。\n" +
"二、李社辉涉嫌合同诈骗罪的犯罪事实非常明确、证据确凿,\n" +
"应予认定\n" +
"在报案人与被报案人宁夏博金特立体泊车设备有限公司签订\n" +
"《协议书》后,报案人积极起草项目施工合同,期待与被报案人\n" +
"宁夏博金特立体泊车设备有限公司签订合同,完成合作,但对方\n" +
"总是以各种理由推脱。之后,报案人经多方打听,才知道被报案\n" +
"人宁夏博金特根本没有关于凯尔福邸的项目,报案人才知道上当\n" +
"受骗。报案人就开始向被报案人李社辉索要报案人交的二十万元\n" +
"保证金,被报案人李社辉等人以各种理由推,并且一直欺骗报\n" +
"案人说要给报案人介绍其他工程项目。但是这已经过去了两年,\n" +
"对方并没有给报案人退还保证金,也没有给报案人介绍其他项目。\n" +
"直到现在,被报案人李社辉等人不接听电话,也不出现与报案人\n" +
"处理,报案人深感受骗!\n" +
"李社辉等人骗取报案人钱财是合谋诈骗,是有预谋团伙作案,\n" +
"通过签订假协议的方式诈骗他人财物,涉案数额特别巨大,其行\n" +
"为严重扰乱了正常的市场经济秩序。\n" +
"三、李社辉等人行为已构成犯罪,符合立案标准。\n" +
"(一)立案标准明确\n" +
"《最高人民检察院公安部关于公安机关管辖的刑事案件立案\n" +
"2");
ocrExtractDtoList.add(ocrExtractDto2);
List<OcrExtractDto> result = ocrExtractService.extractTitle(ocrExtractDtoList);
log.info("result: {}", result);
}
}
Loading…
Cancel
Save