По сути, вы пропускаете программу чтения и вместо этого сами создаете CAS и передаете их в конвейер.
Это пример сценария UIMA / uimaFIT Groovy, который не использует программу чтения, а вместо этого передает данные напрямую.в конвейер.
@Grab(group='de.tudarmstadt.ukp.dkpro.core',
module='de.tudarmstadt.ukp.dkpro.core.opennlp-asl',
version='1.5.0')
import static org.apache.uima.fit.pipeline.SimplePipeline.*;
import static org.apache.uima.fit.util.JCasUtil.*;
import static org.apache.uima.fit.factory.AnalysisEngineFactory.*;
import org.apache.uima.fit.factory.JCasFactory;
import de.tudarmstadt.ukp.dkpro.core.opennlp.*;
import de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.*;
import de.tudarmstadt.ukp.dkpro.core.api.syntax.type.*;
def jcas = JCasFactory.createJCas();
jcas.documentText = "This is a test";
jcas.documentLanguage = "en";
runPipeline(jcas,
createEngineDescription(OpenNlpSegmenter),
createEngineDescription(OpenNlpPosTagger),
createEngineDescription(OpenNlpParser,
OpenNlpParser.PARAM_WRITE_PENN_TREE, true));
select(jcas, Token).each { println "${it.coveredText} ${it.pos.posValue}" }
select(jcas, PennTree).each { println it.pennTree }
Примечание. Этот сценарий вообще не оптимизирован для производительности.В производственном сценарии вы бы использовали пул CAS (поскольку создание CAS довольно дорого и обычно они используются повторно), и вы бы создавали конвейер, используя createEngine(...)
, прежде чем передать его в runPipeline(...)
или вызвать * 1008.* на это, потому что в противном случае вы получите много накладных расходов на создание всех компонентов конвейера для каждого документа.
Источник: https://dkpro.github.io/dkpro-core/groovy/recipes/opennlp-postag-no-reader/