Ir al contenido
Otras versiones

Cargando…

Crear su propio plugin de control de validación OCR

Puede crear su propio plugin de validación OCR.

Condiciones:

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

Interfaz OCR TemplateControlParser:

package com.openkm.plugin.ocr.template;
import net.xeoh.plugins.base.Plugin;
import com.openkm.dao.bean.OCRTemplateControlField;
/**
* OCRTemplateControlParser
*
*
*/
public interface OCRTemplateControlParser extends Plugin {
boolean parse(OCRTemplateControlField otcf, String text) throws OCRTemplateException, OCRParserEmptyValueException;
String getName();
boolean isPatternRequired();
String info();
}
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 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 del administrador.
isPatternRequired() boolean Cuando devuelve true indica que el campo de patrón es obligatorio.
Mostrará un error (falta el patrón) en la interfaz de usuario del administrador 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 del administrador.

Clase StringSimilarParser:

package com.openkm.ocr.template.controlparser;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import com.openkm.core.DatabaseException;
import com.openkm.dao.ConfigDAO;
import com.openkm.dao.bean.OCRTemplateControlField;
import com.openkm.ocr.template.OCRParserEmptyValueException;
import com.openkm.ocr.template.OCRTemplateControlParser;
import com.openkm.ocr.template.OCRTemplateException;
import com.openkm.util.AlgorithmUtils;
/**
* StringParser
*
*/
@PluginImplementation
public class StringSimilarParser implements OCRTemplateControlParser {
@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<ConfigDAO.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<ConfigDAO.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() {
StringBuffer sb = new StringBuffer();
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;
}
}