Ir al contenido

Crear su propio plugin de OCR Validation Control

Puede crear su propio plugin de validación OCR.

Condiciones:

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

Interfaz de 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í.

Método Tipo Descripción
parse(OCRTemplateControlField otcf, String text) boolean Cuando devuelve true, indica que el campo cumple las condiciones.
Más información sobre las fases de las plantillas OCR en: OCR templates.
getName() String Establece el nombre que se mostrará en la lista selectora de la interfaz de usuario del administrador.
isPatternRequired() boolean Cuando devuelve true, indica que el campo pattern es obligatorio.
Mostrará un error - ‘missing pattern’ - en la interfaz de usuario del administrador si se requiere un patrón y el usuario no ha establecido ninguno.
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 otcf, String text) throws OCRTemplateException, OCRParserEmptyValueException {
if (text == null || text.equals("")) {
return false;
} else {
if (otcf.getPattern() == null || otcf.getPattern().equals("")) {
int distance = AlgorithmUtils.computeLevenshteinDistance(text, otcf.getValue());
try {
return distance < configSrv.getInteger("ocr.control.similar.distance", 5);
} catch (DatabaseException e) {
throw new OCRTemplateException(e);
}
} else {
Pattern pattern = Pattern.compile("(" + otcf.getPattern() + ")", Pattern.UNICODE_CASE);
Matcher matcher = pattern.matcher(text);
if (matcher.find() && matcher.groupCount() == 1) {
if (otcf.getValue().equals("")) {
return true;
} else {
int distance = AlgorithmUtils.computeLevenshteinDistance(matcher.group(), otcf.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;
}
}