Creating your own Suggestion Analyzer
You can create your own Suggestion Analyzer.
Conditions:
- The new Suggestion Analyzer class must implement the “Suggestion” interface.
- The new Suggestion Analyzer class must be declared in the package “com.openkm.plugin.form.suggestion”.
- The new Suggestion Analyzer class must be annotated with “@PluginImplementation”.
- The new Suggestion Analyzer class must extend BasePlugin.
Suggestion Analyzer interface:
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;}The new class must be loaded into the package com.openkm.plugin.form.suggestion because the application plugin system will try to load it from there.
Method descriptions
Section titled “Method descriptions”| Method | Type | Description |
|---|---|---|
| getSuggestions(String nodeUuid, String nodePath, Select sel) | List |
Returns a list of suggested words to tag the document. The method needs the document UUID (nodeUuid) and the document path (nodePath). Select can be used as a collection of possible values (an enclosed dictionary). |
Example of a Suggestion Analyzer
Section titled “Example of a 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; }}