普通规则匹配 以及规则修改接口

segment2.0
zhanglb 2 years ago
parent b66e6d1b0b
commit 4325d283d5

@ -70,6 +70,14 @@ public interface OcrRuleTestApi {
@PutMapping("/edit") @PutMapping("/edit")
void edit(@RequestBody EditOcrRuleTestDTO editOcrRuleTestDTO); void edit(@RequestBody EditOcrRuleTestDTO editOcrRuleTestDTO);
/**
*
*
* @param editOcrRuleTestDTOList
*/
@PutMapping("/deleteAndAdd")
void deleteAndAdd(@RequestBody List<EditOcrRuleTestDTO> editOcrRuleTestDTOList);
/** /**
* *
* *

@ -67,19 +67,19 @@ public class AddOcrFileInfoDTO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -64,19 +64,19 @@ public class EditOcrFileInfoDTO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -67,19 +67,19 @@ public class AddOcrFileInfoTestDTO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -65,19 +65,19 @@ public class EditOcrFileInfoTestDTO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -89,7 +89,7 @@ public class OcrFileInfo implements Serializable {
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
@TableField("assort_id") @TableField("assort_id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
@TableField("assort_name") @TableField("assort_name")
@ -97,7 +97,7 @@ public class OcrFileInfo implements Serializable {
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
@TableField("rule_id") @TableField("rule_id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
@TableField("hit_key") @TableField("hit_key")
@ -105,7 +105,7 @@ public class OcrFileInfo implements Serializable {
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
@TableField("rate") @TableField("rate")
private Float rate; private Double rate;
@ApiModelProperty(value = "文件大小") @ApiModelProperty(value = "文件大小")
@TableField("file_size") @TableField("file_size")

@ -90,7 +90,7 @@ public class OcrFileInfoTest implements Serializable {
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
@TableField("assort_id") @TableField("assort_id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
@TableField("assort_name") @TableField("assort_name")
@ -98,7 +98,7 @@ public class OcrFileInfoTest implements Serializable {
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
@TableField("rule_id") @TableField("rule_id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
@TableField("hit_key") @TableField("hit_key")
@ -106,7 +106,7 @@ public class OcrFileInfoTest implements Serializable {
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
@TableField("rate") @TableField("rate")
private Float rate; private Double rate;
@ApiModelProperty(value = "文件大小") @ApiModelProperty(value = "文件大小")
@TableField("file_size") @TableField("file_size")

@ -17,7 +17,7 @@ public class OcrRuleJson {
private String assortName; private String assortName;
@ApiModelProperty(value = "占比分") @ApiModelProperty(value = "占比分")
private Integer matchRatio; private Double matchRatio;
@ApiModelProperty(value = "匹配关键词 多个#分割") @ApiModelProperty(value = "匹配关键词 多个#分割")
private String keyWord; private String keyWord;

@ -6,8 +6,18 @@ import lombok.Data;
@Data @Data
public class OcrRuleResult { public class OcrRuleResult {
@ApiModelProperty(value = "id") @ApiModelProperty(value = "分段id")
private Long id; private String assortId;
@ApiModelProperty(value = "分段名称")
private String assortName;
@ApiModelProperty(value = "命中策略id")
private Long ruleId;
@ApiModelProperty(value = "命中关键词")
private String hitKey;
@ApiModelProperty(value = "命中占比")
private Double rate;
} }

@ -7,7 +7,20 @@ import lombok.Data;
@Data @Data
public class OcrSpecialResult { public class OcrSpecialResult {
@ApiModelProperty(value = "id") @ApiModelProperty(value = "分段id")
private Long id; private String assortId;
@ApiModelProperty(value = "分段名称")
private String assortName;
@ApiModelProperty(value = "命中策略id")
private Long ruleId;
@ApiModelProperty(value = "命中关键词")
private String hitKey;
@ApiModelProperty(value = "命中占比")
private Double rate;
} }

@ -11,7 +11,7 @@ import lombok.*;
public class OcrSpecialRuleJson { public class OcrSpecialRuleJson {
@ApiModelProperty(value = "命中分数") @ApiModelProperty(value = "命中分数")
private Integer score; private double score;
@ApiModelProperty(value = "匹配关键词 多个#分割") @ApiModelProperty(value = "匹配关键词 多个#分割")
private String keyWord; private String keyWord;

@ -11,7 +11,7 @@ public enum OcrStatusEnum implements IIntegerEnum {
STARTING(1, "分段中"), STARTING(1, "分段中"),
COMPLETE(1, "完成分段"); COMPLETE(2, "完成分段");
private Integer value; private Integer value;
private String display; private String display;

@ -64,19 +64,19 @@ public class OcrFileInfoVO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -64,19 +64,19 @@ public class OcrFileInfoTestVO implements Serializable {
private OcrStatusEnum ocrStatus; private OcrStatusEnum ocrStatus;
@ApiModelProperty(value = "分段id") @ApiModelProperty(value = "分段id")
private Integer assortId; private String assortId;
@ApiModelProperty(value = "分段名称") @ApiModelProperty(value = "分段名称")
private String assortName; private String assortName;
@ApiModelProperty(value = "命中策略id") @ApiModelProperty(value = "命中策略id")
private Integer ruleId; private Long ruleId;
@ApiModelProperty(value = "命中关键词") @ApiModelProperty(value = "命中关键词")
private String hitKey; private String hitKey;
@ApiModelProperty(value = "命中占比") @ApiModelProperty(value = "命中占比")
private Float rate; private Double rate;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private Date createTime; private Date createTime;

@ -84,6 +84,11 @@ public class OcrRuleTestController implements OcrRuleTestApi {
iOcrRuleTestService.edit(editOcrRuleTestDTO); iOcrRuleTestService.edit(editOcrRuleTestDTO);
} }
@Override
public void deleteAndAdd(List<EditOcrRuleTestDTO> editOcrRuleTestDTOList) {
iOcrRuleTestService.deleteAndAdd(editOcrRuleTestDTOList);
}
/** /**
* *
* *

@ -20,10 +20,10 @@ public interface IOcrRuleTestService {
/** /**
* *
* @param text * @param ocrTextList
* @return * @return
*/ */
OcrRuleResult handleSpecialRule(String text); OcrRuleResult handleRule(List<String> ocrTextList);
/** /**
* *
@ -71,4 +71,6 @@ public interface IOcrRuleTestService {
* @return * @return
*/ */
PageResult<OcrRuleTestVO> search(SearchDTO searchDTO); PageResult<OcrRuleTestVO> search(SearchDTO searchDTO);
void deleteAndAdd(List<EditOcrRuleTestDTO> editOcrRuleTestDTOList);
} }

@ -31,7 +31,7 @@ public interface IOcrSpecialRuleTestService {
* @param result * @param result
* @return * @return
*/ */
boolean handleSpecialRule(OcrSpecialResult result,String text); boolean handleSpecialRuleEnd (OcrSpecialResult result,List<String> ocrTextList);
/** /**

@ -1,14 +1,19 @@
package com.docus.server.service.handler; package com.docus.server.service.handler;
import com.docus.core.util.Func;
import com.docus.log.annotation.TrackRetryListener; import com.docus.log.annotation.TrackRetryListener;
import com.docus.server.api.ocr.OcrApi; import com.docus.server.api.ocr.OcrApi;
import com.docus.server.entity.segmentation.OcrFileInfoTest; import com.docus.server.entity.segmentation.OcrFileInfoTest;
import com.docus.server.entity.segmentation.OcrRuleResult;
import com.docus.server.entity.segmentation.OcrSpecialResult; import com.docus.server.entity.segmentation.OcrSpecialResult;
import com.docus.server.enums.OcrStatusEnum;
import com.docus.server.infrastructure.dao.IOcrFileInfoTestDao; import com.docus.server.infrastructure.dao.IOcrFileInfoTestDao;
import com.docus.server.service.IOcrRuleTestService;
import com.docus.server.service.IOcrSpecialRuleTestService; import com.docus.server.service.IOcrSpecialRuleTestService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -22,25 +27,60 @@ public class StartOcrTestHandler {
private IOcrFileInfoTestDao iOcrFileInfoTestDao; private IOcrFileInfoTestDao iOcrFileInfoTestDao;
@Resource @Resource
private IOcrSpecialRuleTestService iOcrSpecialRuleTestService; private IOcrSpecialRuleTestService iOcrSpecialRuleTestService;
@Resource
private IOcrRuleTestService iOcrRuleTestService;
@TrackRetryListener("START_OCR_TEST") @TrackRetryListener("START_OCR_TEST")
public void startOcr(String patientId) { public void startOcr(String patientId) {
boolean isSpecialFile = false;
OcrSpecialResult lastSpecialResul = null;
//根据病案号查询文件列表 //根据病案号查询文件列表
List<OcrFileInfoTest> fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId",patientId); List<OcrFileInfoTest> fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId",patientId);
for (OcrFileInfoTest fileInfoTest:fileInfoTestList) { for (OcrFileInfoTest fileInfoTest:fileInfoTestList) {
//遍历文件列表 获取ocr识别结果 //遍历文件列表 获取ocr识别结果
List<String> ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl()); List<String> ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl());
fileInfoTest.setOcrText(Func.toJson(ocrTextList));
fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE);
fileInfoTest.setOcrFinishTime(new Date());
//判断上次是否特殊文件开始 需要判断是否特殊文件结尾
if (isSpecialFile){
fileInfoTest.setAssortId(lastSpecialResul.getAssortId());
fileInfoTest.setAssortName(lastSpecialResul.getAssortName());
fileInfoTest.setRuleId(lastSpecialResul.getRuleId());
boolean b = iOcrSpecialRuleTestService.handleSpecialRuleEnd(lastSpecialResul, ocrTextList);
if (b){
//当前分段为特殊分段结尾
isSpecialFile = false;
lastSpecialResul = null;
}
continue;
}
//优先判断是否特殊规则开始 //优先判断是否特殊规则开始
OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList); OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList);
//判断是否属于某个分段 //判断是否属于某个分段
if (ocrSpecialResult!=null){
fileInfoTest.setAssortId(ocrSpecialResult.getAssortId());
fileInfoTest.setAssortName(ocrSpecialResult.getAssortName());
fileInfoTest.setRuleId(ocrSpecialResult.getRuleId());
isSpecialFile = true;
lastSpecialResul = ocrSpecialResult;
continue;
}
OcrRuleResult ocrRuleResult = iOcrRuleTestService.handleRule(ocrTextList);
//更新文件数据的分段 //更新文件数据的分段
if (ocrRuleResult!=null){
fileInfoTest.setAssortId(ocrRuleResult.getAssortId());
fileInfoTest.setAssortName(ocrRuleResult.getAssortName());
fileInfoTest.setRuleId(ocrRuleResult.getRuleId());
}
} }
//更新数据库表 //更新数据库表
iOcrFileInfoTestDao.updateBatchById(fileInfoTestList,1000);
} }
} }

@ -1,5 +1,6 @@
package com.docus.server.service.impl; package com.docus.server.service.impl;
import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService; import com.docus.infrastructure.redis.service.IdService;
import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
@ -7,8 +8,7 @@ import com.docus.server.convert.OcrRuleTestConvert;
import com.docus.server.dto.segmentation.ocrruletest.AddOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.AddOcrRuleTestDTO;
import com.docus.server.dto.segmentation.ocrruletest.DeleteOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.DeleteOcrRuleTestDTO;
import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO;
import com.docus.server.entity.segmentation.OcrRuleResult; import com.docus.server.entity.segmentation.*;
import com.docus.server.entity.segmentation.OcrRuleTest;
import com.docus.server.infrastructure.dao.IOcrRuleTestDao; import com.docus.server.infrastructure.dao.IOcrRuleTestDao;
import com.docus.server.service.IOcrRuleTestService; import com.docus.server.service.IOcrRuleTestService;
import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO; import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO;
@ -16,7 +16,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* - * -
@ -32,17 +34,56 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService {
private IdService idService; private IdService idService;
@Override @Override
public OcrRuleResult handleSpecialRule(String text) { public OcrRuleResult handleRule(List<String> ocrTextList) {
//查询所有规则列表 //查询所有规则列表
List<OcrRuleTest> ocrRuleTestList = iOcrRuleTestDao.findAll();
//判断是否符合某个条件的开始条件
//判断是否包含 for (OcrRuleTest ocrRuleTest : ocrRuleTestList) {
String assortId = ocrRuleTest.getAssortId();
double score = ocrRuleTest.getMatchRatio();
//判断命中率 String[] keyWordList = ocrRuleTest.getKeyWord().split("#");
for (String ocrText : ocrTextList) {
for (int i = 0; i < keyWordList.length; i++) {
String keyWord = keyWordList[i];
if (ocrText.contains(keyWord)) {
double rate = keyWord.length() / (double) ocrText.length() * 100;
//判断是否命中
if (rate >= score) {
//判断二级是否启用
if (ocrRuleTest.getIsUseSecond() && Func.isNotEmpty(ocrRuleTest.getJson())) {
List<OcrRuleJson> ocrRuleList = Func.parseJsonArray(ocrRuleTest.getJson(), OcrRuleJson.class)
.stream().sorted(Comparator.comparing(OcrRuleJson::getSort))
.collect(Collectors.toList());
for (OcrRuleJson ruleJson : ocrRuleList) {
assortId = ruleJson.getAssortId();
keyWordList = ruleJson.getKeyWord().split("#");
score = ruleJson.getMatchRatio();
for (int j = 0; j < keyWordList.length; j++) {
keyWord = keyWordList[i];
if (ocrText.contains(keyWord)) {
rate = keyWord.length() / (double) ocrText.length() * 100;
//判断是否命中
if (rate >= score) {
OcrRuleResult ocrRuleResult = new OcrRuleResult();
ocrRuleResult.setRuleId(ocrRuleTest.getId());
ocrRuleResult.setAssortId(assortId);
return ocrRuleResult;
}
}
}
}
} else {
OcrRuleResult ocrRuleResult = new OcrRuleResult();
ocrRuleResult.setRuleId(ocrRuleTest.getId());
ocrRuleResult.setAssortId(assortId);
return ocrRuleResult;
}
}
}
}
}
}
return null; return null;
} }
@ -95,6 +136,19 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService {
//return result; //return result;
} }
@Override
public void deleteAndAdd(List<EditOcrRuleTestDTO> editOcrRuleTestDTOList) {
List<OcrRuleTest> ruleTestList = editOcrRuleTestDTOList.stream().map(m->{
OcrRuleTest ocrRuleTest = OcrRuleTestConvert.INSTANCE.convertDO(m);
ocrRuleTest.setId(ocrRuleTest.getId()==null?idService.getDateSeq():ocrRuleTest.getId());
return ocrRuleTest;
}).collect(Collectors.toList());
String assortId = ruleTestList.get(0).getAssortId();
iOcrRuleTestDao.deleteBy("assortId",assortId);
iOcrRuleTestDao.saveBatch(ruleTestList,1000);
}
/** /**
* *
* *

@ -1,5 +1,7 @@
package com.docus.server.service.impl; package com.docus.server.service.impl;
import com.docus.core.util.Func;
import com.docus.core.util.jackson.JsonUtil;
import com.docus.infrastructure.redis.service.IdService; import com.docus.infrastructure.redis.service.IdService;
import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
@ -8,10 +10,13 @@ import com.docus.server.dto.segmentation.ocrspecialruletest.AddOcrSpecialRuleTes
import com.docus.server.dto.segmentation.ocrspecialruletest.DeleteOcrSpecialRuleTestDTO; import com.docus.server.dto.segmentation.ocrspecialruletest.DeleteOcrSpecialRuleTestDTO;
import com.docus.server.dto.segmentation.ocrspecialruletest.EditOcrSpecialRuleTestDTO; import com.docus.server.dto.segmentation.ocrspecialruletest.EditOcrSpecialRuleTestDTO;
import com.docus.server.entity.segmentation.OcrSpecialResult; import com.docus.server.entity.segmentation.OcrSpecialResult;
import com.docus.server.entity.segmentation.OcrSpecialRule;
import com.docus.server.entity.segmentation.OcrSpecialRuleJson;
import com.docus.server.entity.segmentation.OcrSpecialRuleTest; import com.docus.server.entity.segmentation.OcrSpecialRuleTest;
import com.docus.server.infrastructure.dao.IOcrSpecialRuleTestDao; import com.docus.server.infrastructure.dao.IOcrSpecialRuleTestDao;
import com.docus.server.service.IOcrSpecialRuleTestService; import com.docus.server.service.IOcrSpecialRuleTestService;
import com.docus.server.vo.segmentation.ocrspecialruletest.OcrSpecialRuleTestVO; import com.docus.server.vo.segmentation.ocrspecialruletest.OcrSpecialRuleTestVO;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -31,20 +36,48 @@ public class OcrSpecialRuleTestServiceImpl implements IOcrSpecialRuleTestService
@Resource @Resource
private IdService idService; private IdService idService;
@Override @Override
public OcrSpecialResult handleSpecialRule(List<String> ocrTextList) { public OcrSpecialResult handleSpecialRule(List<String> ocrTextList) {
// 查询所以的特殊规则列表
// 查询所以的特殊规则列表
List<OcrSpecialRuleTest> all = iOcrSpecialRuleTestDao.findAll();
//判断是否符合某个条件的开始条件 //判断是否符合某个条件的开始条件
for (OcrSpecialRuleTest ocrSpecialRuleTest : all) {
String assortId = ocrSpecialRuleTest.getAssortId();
String startJson = ocrSpecialRuleTest.getStartJson();
String assortName = ocrSpecialRuleTest.getName();
List<OcrSpecialRuleJson> ocrSpecialRuleJsons = Func.parseJsonArray(startJson, OcrSpecialRuleJson.class);
for (OcrSpecialRuleJson ocrSpecialRuleJson : ocrSpecialRuleJsons) {
double score = ocrSpecialRuleJson.getScore();
String[] keyWordList = ocrSpecialRuleJson.getKeyWord().split("#");
for (String ocrText : ocrTextList) {
for (int i = 0; i < keyWordList.length; i++) {
String keyWord = keyWordList[i];
if (ocrText.contains(keyWord)){
double rate = keyWord.length() / (double)ocrText.length() * 100;
//判断是否命中
if (rate>=score) {
OcrSpecialResult ocrSpecialResult = new OcrSpecialResult();
ocrSpecialResult.setAssortId(assortId);
ocrSpecialResult.setAssortName(assortName);
ocrSpecialResult.setRate(rate);
ocrSpecialResult.setHitKey(keyWord);
return ocrSpecialResult;
}
}
}
}
}
}
//默认返回空对象 //默认返回空对象
return null; return null;
} }
@Override @Override
public boolean handleSpecialRule(OcrSpecialResult result,String text) { public boolean handleSpecialRuleEnd(OcrSpecialResult result, List<String> ocrTextList) {
//获取结束条件列表 //获取结束条件列表

Loading…
Cancel
Save