Ir al contenido
Otras versiones

Cargando…

Creación de su propio plugin de control de validación OCR

Puede crear su propio plugin de validación OCR.

Condiciones:

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

Interfaz de control de validación OCR:

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á cargarla desde allí.

Método Tipo Descripción
parse(OCRTemplateControlField otcf, String text) boolean Devuelve true si el campo cumple las condiciones.
Más información sobre las etapas de las plantillas OCR en: Plantillas OCR.
getName() String Establece el nombre que se mostrará en la lista de selección de la interfaz de usuario de administración.
isPatternRequired() boolean Devuelve true si el campo de patrón es obligatorio.
Mostrará un error — “missing pattern” — en la interfaz de usuario de administración si se requiere un patrón y el usuario no lo ha establecido.
info() String Descripción de la lógica implementada.
Esta descripción se muestra en la interfaz de usuario de administración.

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;
}
}