Ir al contenido
Otras versiones

Cargando…

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

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