Ir al contenido
Otras versiones

Cargando…

Creación de su propio plugin OCR Validation Control

Puede crear su propio plugin de validación OCR.

Condiciones:

  • La nueva clase OCR Validation Control debe implementar la interfaz “OCRTemplateControlParser”.
  • La nueva clase OCR Validation Control debe declararse en el paquete “com.openkm.plugin.ocr.template.controlparser”.
  • La nueva clase OCR Validation Control debe estar anotada con@PluginImplementation”.
  • La nueva clase OCR Validation Control debe extender BasePlugin.

Interfaz OCR Validation Control:

package com.openkm.plugin.ocr.template;
import com.openkm.db.bean.OCRTemplateControlField;
import net.xeoh.plugins.base.Plugin;
/**
* OCRTemplateControlParser
*/
public interface OCRTemplateControlParser extends Plugin {
boolean parse(OCRTemplateControlField otcf, String text) throws OCRTemplateException, OCRParserEmptyValueException;
String getName();
boolean isPatternRequired();
String info();
}

La nueva clase debe cargarse en el paquete com.openkm.plugin.ocr.template.controlparser porque el sistema de plugins de la aplicación intentará cargar las clases desde ahí.

Method Type Description
parse(OCRTemplateControlField otcf, String text) boolean Cuando devuelve true, indica que el campo cumple las condiciones.
Más información sobre las etapas de plantilla OCR en: OCR templates.
getName() String Establece el nombre que se mostrará en la lista de selección de la interfaz de usuario del administrador.
isPatternRequired() boolean Cuando devuelve true, indica que el campo de patrón es obligatorio.
Se mostrará un error - ‘missing pattern’ - en la interfaz de usuario del administrador si se requiere un patrón y el usuario no ha establecido uno.
info() String Descripción de la lógica implementada.
Esta descripción se muestra en la interfaz de usuario del administrador.

Clase StringSimilarParser:

package com.openkm.plugin.ocr.template.controlparser;
import com.openkm.core.DatabaseException;
import com.openkm.db.bean.OCRTemplateControlField;
import com.openkm.db.service.ConfigSrv;
import com.openkm.plugin.BasePlugin;
import com.openkm.plugin.ocr.template.OCRParserEmptyValueException;
import com.openkm.plugin.ocr.template.OCRTemplateControlParser;
import com.openkm.plugin.ocr.template.OCRTemplateException;
import com.openkm.util.AlgorithmUtils;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* StringParser
*/
@PluginImplementation
public class StringSimilarParser extends BasePlugin implements OCRTemplateControlParser {
@Autowired
private ConfigSrv configSrv;
@Override
public boolean parse(OCRTemplateControlField otf, String text) throws OCRTemplateException, OCRParserEmptyValueException {
if (text == null || text.equals("")) {
return false;
} else {
if (otf.getPattern() == null || otf.getPattern().equals("")) {
int distance = AlgorithmUtils.computeLevenshteinDistance(text, otf.getValue());
try {
return distance < configSrv.getInteger("ocr.control.similar.distance", 5);
} catch (DatabaseException e) {
throw new OCRTemplateException(e);
}
} else {
Pattern pattern = Pattern.compile("(" + otf.getPattern() + ")", Pattern.UNICODE_CASE);
Matcher matcher = pattern.matcher(text);
if (matcher.find() && matcher.groupCount() == 1) {
if (otf.getValue().equals("")) {
return true;
} else {
int distance = AlgorithmUtils.computeLevenshteinDistance(matcher.group(), otf.getValue());
try {
return distance < configSrv.getInteger("ocr.control.similar.distance", 5);
} catch (DatabaseException e) {
throw new OCRTemplateException(e);
}
}
} else {
return false;
}
}
}
}
@Override
public String getName() {
return "Similar String";
}
@Override
public boolean isPatternRequired() {
return false;
}
@Override
public String info() {
StringBuilder sb = new StringBuilder();
sb.append("Empty pattern case: true if extracted text similar field value.\n");
sb.append("Pattern with value field empty: true if pattern found.\n");
sb.append("Pattern with value field: true if pattern found similar value.\n");
return null;
}
}