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