首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除UIMA注释?

如何删除UIMA注释?
EN

Stack Overflow用户
提问于 2013-12-30 17:14:15
回答 3查看 977关注 0票数 5

我在管道中使用一些UIMA注解器。它运行的任务如下:

  • 令牌器
  • 分句器
  • 凝视剂
  • 我的注解器

问题是我不想写所有的注解(标记,句子,SubToken,时间,myAnnotations等等)因为文件很快就会变大。

我希望删除所有的注释,只保留由创建的注释器

我正在与下一个图书馆合作:

  1. uimaFIT 2.0.0
  2. ClearTK 1.4.1
  3. Maven

我用的是org.apache.uima.fit.pipeline.SimplePipeline和:

代码语言:javascript
复制
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注解器(从ClearTK中)并删除无用的注释。

我该怎么做?

据我所知,您可以通过注释实例使用removeFromIndexes();方法。

是否需要创建UIMA处理器并将其添加到管道中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-01 23:11:10

最后,我创建了一个引擎来删除无用的注释:

代码语言:javascript
复制
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注释

票数 7
EN

Stack Overflow用户

发布于 2013-12-31 12:30:06

是的:在MyAnnotator和XWriter之间,添加另一个注释器,删除除您的注释之外的所有注释。

票数 2
EN

Stack Overflow用户

发布于 2018-12-06 14:40:43

我使用java 8重写了德国Attanasios解决方案,并将其更改为使用不同的annotationTypePrefix过滤掉任何内容:

代码语言:javascript
复制
public void filterAnnotations(JCas jcas, String annotationTypePrefix) {

    JCasUtil.selectAll(jcas)
            .stream()
            .filter(t -> !t.getType().getName().startsWith(annotationTypePrefix))
            .forEach(TOP::removeFromIndexes);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20844217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档