Author: rwesten
Date: Tue Nov 11 08:44:47 2014
New Revision: 1638048
URL: http://svn.apache.org/r1638048
Log:
merged implementation of STANBOL-1402 to trunk
Added:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/LinkingModeEnum.java
- copied unchanged from r1638045,
stanbol/branches/release-0.12/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/LinkingModeEnum.java
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/ChainedTagClusterReducer.java
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngine.java
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineComponent.java
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/resources/OSGI-INF/metatype/metatype.properties
stanbol/trunk/enhancement-engines/lucenefstlinking/src/test/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineTest.java
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/ChainedTagClusterReducer.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/ChainedTagClusterReducer.java?rev=1638048&r1=1638047&r2=1638048&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/ChainedTagClusterReducer.java
(original)
+++
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/ChainedTagClusterReducer.java
Tue Nov 11 08:44:47 2014
@@ -16,6 +16,8 @@
*/
package org.apache.stanbol.enhancer.engines.lucenefstlinking;
+import java.util.Arrays;
+
import org.apache.commons.lang.ArrayUtils;
import org.opensextant.solrtexttagger.TagClusterReducer;
import org.opensextant.solrtexttagger.TagLL;
@@ -50,4 +52,8 @@ public class ChainedTagClusterReducer im
}
+ @Override
+ public String toString() {
+ return new
StringBuilder(getClass().getSimpleName()).append(Arrays.toString(reducers)).toString();
+ }
}
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngine.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngine.java?rev=1638048&r1=1638047&r2=1638048&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngine.java
(original)
+++
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngine.java
Tue Nov 11 08:44:47 2014
@@ -61,10 +61,14 @@ import org.apache.stanbol.enhancer.engin
import org.apache.stanbol.enhancer.engines.entitylinking.impl.Suggestion;
import
org.apache.stanbol.enhancer.engines.lucenefstlinking.TaggingSession.Corpus;
import org.apache.stanbol.enhancer.nlp.model.AnalysedText;
+import org.apache.stanbol.enhancer.nlp.model.AnalysedTextUtils;
+import org.apache.stanbol.enhancer.nlp.utils.NlpEngineHelper;
+import org.apache.stanbol.enhancer.servicesapi.Blob;
import org.apache.stanbol.enhancer.servicesapi.ContentItem;
import org.apache.stanbol.enhancer.servicesapi.EngineException;
import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
import org.apache.stanbol.enhancer.servicesapi.ServiceProperties;
+import org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper;
import org.apache.stanbol.enhancer.servicesapi.helper.EnhancementEngineHelper;
import org.apache.stanbol.enhancer.servicesapi.rdf.NamespaceEnum;
import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
@@ -93,13 +97,15 @@ public class FstLinkingEngine implements
protected final String name;
+ protected final LinkingModeEnum linkingMode;
+
protected final TextProcessingConfig tpConfig;
protected final EntityLinkerConfig elConfig;
private IndexConfiguration indexConfig;
-
- public FstLinkingEngine(String name, IndexConfiguration indexConfig,
+ public FstLinkingEngine(String name, LinkingModeEnum linkingMode,
+ IndexConfiguration indexConfig,
TextProcessingConfig tpConfig, EntityLinkerConfig elConfig) {
if (StringUtils.isBlank(name)) {
throw new IllegalArgumentException("The parsed name MUST NOT be
NULL nor blank!");
@@ -108,6 +114,7 @@ public class FstLinkingEngine implements
if (indexConfig == null) {
throw new IllegalArgumentException("The parsed IndexConfiguration
MUST NOT be NULL!");
}
+ this.linkingMode = linkingMode == null ? LinkingModeEnum.values()[0] :
linkingMode;
this.indexConfig = indexConfig;
if (tpConfig == null) {
throw new IllegalArgumentException("The parsed Text Processing
configuration MUST NOT be NULL");
@@ -149,18 +156,53 @@ public class FstLinkingEngine implements
// we need a detected language, the AnalyzedText contentPart with
// Tokens.
AnalysedText at = getAnalysedText(this, ci, false);
- return at != null && at.getTokens().hasNext() ? ENHANCE_ASYNC :
CANNOT_ENHANCE;
+ if(at == null && linkingMode == LinkingModeEnum.PLAIN){
+ return NlpEngineHelper.getPlainText(this, ci, false) != null ?
ENHANCE_ASYNC : CANNOT_ENHANCE;
+ } else {
+ if(linkingMode == LinkingModeEnum.PLAIN){
+ return ENHANCE_ASYNC;
+ } else if(at.getTokens().hasNext()){
+ return ENHANCE_ASYNC;
+ } else {
+ log.warn("Unable to process {} with engine name={} and mode={}
"
+ + "as the AnalyzedText does not contain any Tokens!",
+ new Object[]{ci,name,linkingMode});
+ return at.getTokens().hasNext() ? ENHANCE_ASYNC :
CANNOT_ENHANCE;
+ }
+ }
}
@Override
public void computeEnhancements(ContentItem ci) throws EngineException {
- AnalysedText at = getAnalysedText(this, ci, true);
+ AnalysedText at;
+ if(linkingMode != LinkingModeEnum.PLAIN){
+ //require AnalysedText contentPart
+ at = getAnalysedText(this, ci, true);
+ } else { //AnalysedText is optional in LinkingModeEnum.BASIC
+ try {
+ at = AnalysedTextUtils.getAnalysedText(ci);
+ } catch (ClassCastException e) {
+ //unexpected contentPart found under the URI expecting the
AnalysedText
+ at = null;
+ }
+ }
+ final String content;
+ if(at != null){ //we can get the content from the Analyzed text
+ content = at.getSpan();
+ } else { //no analyzed text ... read is from the text/plain blob
+ try {
+ content = ContentItemHelper.getText(
+ NlpEngineHelper.getPlainText(this, ci, true).getValue());
+ } catch (IOException e) {
+ throw new EngineException(this, ci, "Unable to access
plain/text content!", e);
+ }
+ }
log.debug(" > AnalysedText {}", at);
String language = getLanguage(this, ci, true);
log.debug(" > Language {}", language);
if (log.isDebugEnabled()) {
log.debug("computeEnhancements for ContentItem {} language {}
text={}", new Object[] {
- ci.getUri().getUnicodeString(), language,
StringUtils.abbreviate(at.getSpan(), 100)});
+ ci.getUri().getUnicodeString(), language,
StringUtils.abbreviate(content, 100)});
}
// TODO: we need to do the same for the the default matching language
TaggingSession session;
@@ -177,7 +219,7 @@ public class FstLinkingEngine implements
if(session.getLanguageCorpus() != null){
corpus = session.getLanguageCorpus();
long t = System.currentTimeMillis();
- int d = tag(at, session,corpus,tags);
+ int d = tag(content, at, session,corpus,tags);
log.info(" - {}: fst: {}ms (callback: {}ms)", new Object[]{
corpus.getIndexedField(),
System.currentTimeMillis()-t, d
});
@@ -187,7 +229,7 @@ public class FstLinkingEngine implements
corpus = session.getDefaultCorpus();
}
long t = System.currentTimeMillis();
- int d = tag(at, session, session.getDefaultCorpus(),tags);
+ int d = tag(content, at, session,
session.getDefaultCorpus(),tags);
log.info(" - {}: fst: {}ms (callback: {}ms)",new Object[]{
session.getDefaultCorpus().getIndexedField(),
System.currentTimeMillis()-t, d});
@@ -201,7 +243,7 @@ public class FstLinkingEngine implements
log.info(" - sum fst: {} ms", taggingEnd - taggingStart);
}
}
- int matches = match(at,tags.values());
+ int matches = match(content,tags.values());
log.debug(" - loaded {} ({} loaded, {} cached, {} appended)
Matches in {} ms",
new Object[]{matches, session.getSessionDocLoaded(),
session.getSessionDocCached(),
session.getSessionDocAppended(),
@@ -223,7 +265,7 @@ public class FstLinkingEngine implements
}
ci.getLock().writeLock().lock();
try {
- writeEnhancements(ci,at.getSpan(),tags.values(),language,
+ writeEnhancements(ci,content,tags.values(),language,
elConfig.isWriteEntityRankings());
} finally {
ci.getLock().writeLock().unlock();
@@ -231,10 +273,9 @@ public class FstLinkingEngine implements
tags.clear(); //help the GC
}
- private int match(AnalysedText at, Collection<Tag> tags) {
+ private int match(String text, Collection<Tag> tags) {
log.trace(" ... process matches for {} extracted Tags:",tags.size());
int matchCount = 0;
- String text = at.getSpan();
Iterator<Tag> tagIt = tags.iterator();
while(tagIt.hasNext()){
Tag tag = tagIt.next();
@@ -370,35 +411,54 @@ public class FstLinkingEngine implements
/**
* Uses the {@link Corpus} to tag the the {@link AnalysedText} and adds
* tagging results to the parsed tag map.
- * @param at the AnalyzedText
+ * @param content the content to link
+ * @param at the AnalyzedText. not required if {@link
LinkingModeEnum#PLAIN}
* @param session the tagging session of the text
* @param corpus the corpus o the session to tag the content with
* @param tags the Tags map used to store the tagging results
* @return the time in milliseconds spent in the tag callback.
* @throws IOException on any error while accessing the {@link SolrCore}
*/
- private int tag(final AnalysedText at, final TaggingSession session,
- final Corpus corpus, final Map<int[],Tag> tags) throws IOException
{
+ private int tag(final String content, final AnalysedText at, final
TaggingSession session,
+ final Corpus corpus, final Map<int[],Tag> tags) throws IOException{
final OpenBitSet matchDocIdsBS = new
OpenBitSet(session.getSearcher().maxDoc());
TokenStream baseTokenStream =
corpus.getTaggingAnalyzer().tokenStream("",
- new CharSequenceReader(at.getText()));
- LinkableTokenFilter linkableTokenFilter = new
LinkableTokenFilter(baseTokenStream,
- at, session.getLanguage(),
tpConfig.getConfiguration(session.getLanguage()),
- elConfig.getMinChunkMatchScore(), elConfig.getMinFoundTokens());
+ new CharSequenceReader(content));
+ final TokenStream tokenStream;
+ final TagClusterReducer reducer;
+ log.debug(" ... set up TokenStream and TagClusterReducer for linking
mode {}", linkingMode);
+ switch (linkingMode) {
+ case PLAIN: //will link all tokens and search longest dominant
right
+ tokenStream = baseTokenStream;
+ reducer = TagClusterReducer.LONGEST_DOMINANT_RIGHT;
+ break;
+// case NER:
+ case LINKABLE_TOKEN:
+ LinkableTokenFilter linkableTokenFilter = new
LinkableTokenFilter(baseTokenStream,
+ at, session.getLanguage(),
tpConfig.getConfiguration(session.getLanguage()),
+ elConfig.getMinChunkMatchScore(),
elConfig.getMinFoundTokens());
+ reducer = new ChainedTagClusterReducer(
+ linkableTokenFilter,TagClusterReducer.ALL);
+ tokenStream = linkableTokenFilter;
+ break;
+ default:
+ throw new IllegalStateException("Unrecognized LinkingMode '"
+ + linkingMode + "! Please adapt implementation to changed
Enumeration!");
+ }
+ log.debug(" - tokenStream: {}", tokenStream);
+ log.debug(" - reducer: {}", reducer);
//we use two TagClusterReducer implementations.
// (1) the linkableTokenFilter filters all tags that do not overlap any
// linkable Token
// (2) the LONGEST_DOMINANT_RIGHT reducer (TODO: make configurable)
- TagClusterReducer reducer = new ChainedTagClusterReducer(
- linkableTokenFilter,TagClusterReducer.ALL);
final long[] time = new long[]{0};
- new Tagger(corpus.getFst(), linkableTokenFilter,
reducer,session.isSkipAltTokens()) {
+ new Tagger(corpus.getFst(), tokenStream,
reducer,session.isSkipAltTokens()) {
@Override
protected void tagCallback(int startOffset, int endOffset, long
docIdsKey) {
long start = System.nanoTime();
if(log.isTraceEnabled()){
- log.trace(" > tagCallback for {}",
at.getText().subSequence(startOffset, endOffset));
+ log.trace(" > tagCallback for {}",
content.subSequence(startOffset, endOffset));
}
int[] span = new int[]{startOffset,endOffset};
Tag tag = tags.get(span);
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineComponent.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineComponent.java?rev=1638048&r1=1638047&r2=1638048&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineComponent.java
(original)
+++
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineComponent.java
Tue Nov 11 08:44:47 2014
@@ -37,11 +37,8 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Dictionary;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -52,7 +49,6 @@ import org.apache.clerezza.rdf.core.UriR
import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrLookup;
import org.apache.commons.lang.text.StrSubstitutor;
@@ -64,17 +60,9 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.PropertyOption;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.AtomicReader;
-import org.apache.lucene.index.FieldInfo;
-import org.apache.lucene.index.FieldInfos;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.schema.FieldType;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.search.SolrIndexSearcher;
-import org.apache.solr.util.RefCounted;
import org.apache.stanbol.commons.namespaceprefix.NamespacePrefixService;
import org.apache.stanbol.commons.solr.IndexReference;
import org.apache.stanbol.commons.solr.RegisteredSolrServerTracker;
@@ -109,8 +97,7 @@ import com.google.common.util.concurrent
policy = ConfigurationPolicy.REQUIRE, // the baseUri is required!
specVersion = "1.1",
metatype = true,
- immediate = true,
- inherit = true)
+ immediate = true)
@org.apache.felix.scr.annotations.Properties(value={
@Property(name=PROPERTY_NAME), //the name of the engine
@Property(name=FstLinkingEngineComponent.SOLR_CORE),
@@ -163,6 +150,17 @@ import com.google.common.util.concurrent
intValue=FstLinkingEngineComponent.DEFAULT_ENTITY_CACHE_SIZE),
@Property(name=SUGGESTIONS, intValue=DEFAULT_SUGGESTIONS),
@Property(name=INCLUDE_SIMILAR_SCORE,
boolValue=DEFAULT_INCLUDE_SIMILAR_SCORE),
+ @Property(name=FstLinkingEngineComponent.LINKING_MODE, options={
+ @PropertyOption(
+
value='%'+FstLinkingEngineComponent.LINKING_MODE+".option.plain",
+ name="PLAIN"),
+ @PropertyOption(
+
value='%'+FstLinkingEngineComponent.LINKING_MODE+".option.linkableToken",
+ name="LINKABLE_TOKEN") //,
+ //@PropertyOption(
+ //
value='%'+FstLinkingEngineComponent.LINKING_MODE+".option.ner",
+ // name="NER")
+ },value="LINKABLE_TOKEN"),
@Property(name=CASE_SENSITIVE,boolValue=DEFAULT_CASE_SENSITIVE_MATCHING_STATE),
@Property(name=PROCESS_ONLY_PROPER_NOUNS_STATE,
boolValue=DEFAULT_PROCESS_ONLY_PROPER_NOUNS_STATE),
@Property(name=PROCESSED_LANGUAGES, cardinality=Integer.MAX_VALUE,
@@ -202,6 +200,10 @@ public class FstLinkingEngineComponent {
* a {@link Literal} is parsed.
*/
public static final String ORIGIN =
"enhancer.engines.linking.lucenefst.origin";
+ /**
+ * Property used to configure the {@link LinkingModeEnum}.
+ */
+ public static final String LINKING_MODE =
"enhancer.engines.linking.lucenefst.mode";
/**
* The size of the thread pool used to create FST models (default=1).
Creating
@@ -268,6 +270,10 @@ public class FstLinkingEngineComponent {
*/
private String fstFolder;
/**
+ * The {@link LinkingModeEnum linking mode}
+ */
+ private LinkingModeEnum linkingMode;
+ /**
* Holds the {@link TextProcessingConfig} parsed from the configuration of
* this engine. <p>
* NOTE: that by far not all configurations are supported. See
documentation
@@ -370,11 +376,27 @@ public class FstLinkingEngineComponent {
} else {
this.engineName = value.toString();
}
+ log.info(" - engine name: {}", engineName);
engineMetadata = new Hashtable<String,Object>();
engineMetadata.put(PROPERTY_NAME, this.engineName);
value = properties.get(Constants.SERVICE_RANKING);
engineMetadata.put(Constants.SERVICE_RANKING, value == null ?
Integer.valueOf(0) : value);
-
+ //(0) parse the linking mode
+ value = properties.get(LINKING_MODE);
+ if(value == null || StringUtils.isBlank(value.toString())){
+ this.linkingMode = LinkingModeEnum.LINKABLE_TOKEN;
+ } else {
+ try {
+ this.linkingMode = LinkingModeEnum.valueOf(value.toString());
+ } catch(IllegalArgumentException e){
+ throw new ConfigurationException(LINKING_MODE, "The parsed
value '"
+ +value+"' (type: "+value.getClass().getName()+") is not a
member "
+ + "of the enum (members: "+
Arrays.toString(LinkingModeEnum.values())
+ + ")!",e);
+ }
+ }
+ log.info(" - linking mode: {}",linkingMode);
+
//(1) parse the TextProcessing configuration
//TODO: decide if we should use the TextProcessingConfig for this
engine
textProcessingConfig = TextProcessingConfig.createInstance(properties);
@@ -692,7 +714,8 @@ public class FstLinkingEngineComponent {
}
//set the index configuration to the field;
this.indexConfig = indexConfig;
- FstLinkingEngine engine = new FstLinkingEngine(engineName,
indexConfig,
+ FstLinkingEngine engine = new FstLinkingEngine(engineName,
+ linkingMode, indexConfig,
textProcessingConfig, entityLinkerConfig);
String[] services = new String [] {
EnhancementEngine.class.getName(),
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/resources/OSGI-INF/metatype/metatype.properties
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1638048&r1=1638047&r2=1638048&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/resources/OSGI-INF/metatype/metatype.properties
(original)
+++
stanbol/trunk/enhancement-engines/lucenefstlinking/src/main/resources/OSGI-INF/metatype/metatype.properties
Tue Nov 11 08:44:47 2014
@@ -155,3 +155,13 @@ based on the types of Entities. Use '!{u
listing. Include '*' to force white listing (e.g. to allow Entities without
any type). \
Rules are processed based on their oder.
+enhancer.engines.linking.lucenefst.mode.name=Linking Mode
+enhancer.engines.linking.lucenefst.mode.description=The linking mode allows to
switch the \
+operation mode of the FST linking engine: PLAIN will link every single word
with the \
+vocabulary. No NLP processing is required in this mode; LINKABLE_TOKEN will
use NLP \
+processing results to determine what tokens should be linked (typically all
Nouns or \
+only ProperNouns - configurable via the TextProcessing configuration);
+#finally the NER mode will only link Named Entities detected by a NER
component.
+enhancer.engines.linking.lucenefst.mode.option.plain=Plain
+enhancer.engines.linking.lucenefst.mode.option.linkableToken=Linkable Tokens
+#enhancer.engines.linking.lucenefst.mode.option.ner=NER (not yet implemented)
Modified:
stanbol/trunk/enhancement-engines/lucenefstlinking/src/test/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineTest.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/lucenefstlinking/src/test/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineTest.java?rev=1638048&r1=1638047&r2=1638048&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/lucenefstlinking/src/test/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineTest.java
(original)
+++
stanbol/trunk/enhancement-engines/lucenefstlinking/src/test/java/org/apache/stanbol/enhancer/engines/lucenefstlinking/FstLinkingEngineTest.java
Tue Nov 11 08:44:47 2014
@@ -301,7 +301,7 @@ public class FstLinkingEngineTest {
elc.setMinFoundTokens(2);//this is assumed by this test
elc.setRedirectProcessingMode(RedirectProcessingMode.FOLLOW);
FstLinkingEngine engine = new FstLinkingEngine("proper-noun-linking",
- fstConfig, tpc, elc);
+ LinkingModeEnum.LINKABLE_TOKEN, fstConfig, tpc, elc);
processConentItem(engine);
validateEnhancements(
Arrays.asList(
@@ -322,7 +322,7 @@ public class FstLinkingEngineTest {
elc.setMinFoundTokens(2);//this is assumed by this test
elc.setRedirectProcessingMode(RedirectProcessingMode.FOLLOW);
FstLinkingEngine engine = new FstLinkingEngine("proper-noun-linking",
- fstConfig, tpc, elc);
+ LinkingModeEnum.LINKABLE_TOKEN, fstConfig, tpc, elc);
processConentItem(engine);
validateEnhancements(
Arrays.asList(