Ir al contenido

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

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).
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;
@PluginImplementation
public 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;
}
}