我在管道中使用了一些UIMA注释器.它运行如下任务:
标记生成器
句子分割器
gazetizer
我的注释器
问题是我不想将所有注释(Token,Sentence,SubToken,Time,myAnnotations等)写入磁盘,因为文件变得非常大.
我想删除所有注释,只保留由My Annotator创建的注释.
我正在使用下一个库:
uimaFIT 2.0.0
ClearTK 1.4.1
Maven的
而我正在使用org.apache.uima.fit.pipeline.SimplePipeline
:
SimplePipeline.runPipeline( UriCollectionReader.getCollectionReaderFromDirectory(filesDirectory), //directory with text files UriToDocumentTextAnnotator.getDescription(), StanfordCoreNLPAnnotator.getDescription(),//stanford tokenize, ssplit, pos, lemma, ner, parse, dcoref AnalysisEngineFactory.createEngineDescription(// XWriter.class, XWriter.PARAM_OUTPUT_DIRECTORY_NAME, outputDirectory, XWriter.PARAM_FILE_NAMER_CLASS_NAME, ViewURIFileNamer.class.getName()) );
我想要做的是使用Standford NLP注释器(来自ClearTK)并删除无用的注释.
我该怎么做呢?
据我所知,您可以使用removeFromIndexes();
Annotation实例中的方法.
我是否需要创建UIMA处理器并将其添加到我的管道中?
最后我创建了一个引擎来删除无用的注释:
public class AnnotationRemover extends JCasAnnotator_ImplBase { public static AnalysisEngineDescription getDescription() throws ResourceInitializationException { return AnalysisEngineFactory.createEngineDescription(AnnotationRemover.class); } public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); } public void process(JCas jCas) throws AnalysisEngineProcessException { List<TOP> tops = new ArrayList<TOP>(JCasUtil.selectAll(jCas)); for (TOP t : tops) { if (!t.getType().getName().equals("mypackage.MyAnnotation")) t.removeFromIndexes(); } } }
我正在删除所有注释,只留下mypackage.MyAnnotation注释