Crear su propio Suggestion Analyzer
Puede crear su propio Suggestion Analyzer.
Condiciones:
- La nueva clase Suggestion Analyzer debe implementar la interfaz “Suggestion”.
- La nueva clase Suggestion Analyzer debe declararse en el paquete “com.openkm.plugin.form.suggestion”.
- La nueva clase Suggestion Analyzer debe anotarse con “@PluginImplementation”.
- La nueva clase Suggestion Analyzer debe extender BasePlugin.
Interfaz Suggestion Analyzer:
package com.openkm.plugin.form.suggestion;
import com.openkm.bean.form.Select;import com.openkm.core.DatabaseException;import com.openkm.core.PathNotFoundException;import net.xeoh.plugins.base.Plugin;
import java.util.List;
public interface Suggestion extends Plugin { List<String> getSuggestions(String nodeUuid, String nodePath, Select sel) throws PathNotFoundException, SuggestionException, DatabaseException;}La nueva clase debe cargarse en el paquete com.openkm.plugin.form.suggestion porque el sistema de plugins de la aplicación intentará cargarla desde ahí.
Descripción de los métodos
Sección titulada «Descripción de los métodos»| Método | Tipo | Descripción |
|---|---|---|
| getSuggestions(String nodeUuid, String nodePath, Select sel) | List |
Devuelve una lista de palabras sugeridas para etiquetar el documento. El método necesita el UUID del documento (nodeUuid) y la ruta del documento (nodePath). Select puede usarse como una colección de valores posibles (un diccionario cerrado). |
Ejemplo de un Suggestion Analyzer
Sección titulada «Ejemplo de un Suggestion Analyzer»package com.openkm.plugin.form.suggestion;
import com.openkm.bean.form.Option;import com.openkm.bean.form.Select;import com.openkm.core.DatabaseException;import com.openkm.core.PathNotFoundException;import com.openkm.db.bean.NodeDocumentVersion;import com.openkm.db.service.NodeDocumentSrv;import com.openkm.db.service.NodeDocumentUtilsSrv;import com.openkm.db.service.NodeDocumentVersionSrv;import com.openkm.extractor.TextExtractorWork;import com.openkm.plugin.BasePlugin;import com.openkm.principal.PrincipalUtils;import com.openkm.search.lucene.LuceneUtils;import net.xeoh.plugins.base.annotations.PluginImplementation;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;import java.util.ArrayList;import java.util.List;
@PluginImplementationpublic class DocumentTermsSuggestion extends BasePlugin implements Suggestion { private static final Logger log = LoggerFactory.getLogger(DocumentTermsSuggestion.class);
@Autowired private NodeDocumentVersionSrv nodeDocumentVersionSrv;
@Autowired private NodeDocumentUtilsSrv nodeDocumentUtilsSrv;
@Autowired private NodeDocumentSrv nodeDocumentSrv;
@Autowired private LuceneUtils luceneUtils;
@Override public List<String> getSuggestions(String nodeUuid, String nodePath, Select sel) throws PathNotFoundException, SuggestionException, DatabaseException { log.debug("getSuggestions({}, {}, {})", nodeUuid, nodePath, sel); List<String> list = new ArrayList<>();
try { if (nodeDocumentSrv.itemExists(nodeUuid)) { // Get text extraction if (!nodeDocumentUtilsSrv.isTextExtracted(nodeUuid)) { // Force text extraction NodeDocumentVersion nDocVer = nodeDocumentVersionSrv.findCurrentVersion(nodeUuid); TextExtractorWork tew = new TextExtractorWork(); tew.setDocUuid(nodeUuid); tew.setDocPath(nodePath); tew.setDocVerUuid(nDocVer.getUuid()); tew.setTenant(PrincipalUtils.getTenantId());
// Execute extractor nodeDocumentUtilsSrv.textExtractorHelper(tew); }
for (String term : luceneUtils.getTerms(nodeUuid)) { for (Option opt : sel.getOptions()) { if (term.equals(opt.getLabel().toLowerCase())) { if (!list.contains(opt.getValue())) { list.add(opt.getValue()); break; } } } } } } catch (IOException e) { throw new SuggestionException(e.getMessage(), e); }
return list; }}