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í.
Descripción de los métodos
Sección titulada «Descripción de los métodos»| 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. |
Ejemplo:
Sección titulada «Ejemplo:»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 */@PluginImplementationpublic 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; }}