Creación de su propio analizador de sugerencias
Puede crear su propio analizador de sugerencias (Suggestion Analyzer).
Condiciones:
- La nueva clase de analizador de sugerencias debe implementar la interfaz “Suggestion”.
- La nueva clase de analizador de sugerencias debe estar declarada en el paquete “com.openkm.plugin.form.suggestion”.
- La nueva clase de analizador de sugerencias debe estar anotada con “@PluginImplementation”.
- La nueva clase de analizador de sugerencias debe extender “BasePlugin”.
Interfaz del analizador de sugerencias:
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, ya que 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 utilizarse como una colección de valores posibles (un diccionario cerrado). |
Ejemplo de un analizador de sugerencias
Sección titulada «Ejemplo de un analizador de sugerencias»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; }}