|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.docus.server.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.docus.core.util.Func;
|
|
|
|
|
import com.docus.infrastructure.redis.service.IdService;
|
|
|
|
|
import com.docus.infrastructure.web.request.SearchDTO;
|
|
|
|
|
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.DeleteOcrRuleTestDTO;
|
|
|
|
|
import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO;
|
|
|
|
|
import com.docus.server.entity.segmentation.OcrRuleResult;
|
|
|
|
|
import com.docus.server.entity.segmentation.OcrRuleTest;
|
|
|
|
|
import com.docus.server.entity.segmentation.*;
|
|
|
|
|
import com.docus.server.infrastructure.dao.IOcrRuleTestDao;
|
|
|
|
|
import com.docus.server.service.IOcrRuleTestService;
|
|
|
|
|
import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO;
|
|
|
|
@ -16,7 +16,9 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 匹配策略表-调试 服务实现类
|
|
|
|
@ -32,17 +34,56 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService {
|
|
|
|
|
private IdService idService;
|
|
|
|
|
|
|
|
|
|
@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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -95,6 +136,19 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService {
|
|
|
|
|
//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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 新增
|
|
|
|
|
*
|
|
|
|
|