簡體   English   中英

如何刪除UIMA注釋?

[英]How to remove UIMA annotations?

我在管道中使用了一些UIMA注釋器。 它運行如下任務:

  • 標記生成器
  • 句子分割器
  • gazetizer
  • 我的注釋器

問題是我不想將所有注釋(Token,Sentence,SubToken,Time,myAnnotations等)寫入磁盤,因為文件變得非常大。

我想刪除所有注釋,只保留由My Annotator創建的注釋。

我正在使用下一個庫:

  1. uimaFIT 2.0.0
  2. ClearTK 1.4.1
  3. 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注釋

是的:在MyAnnotator和XWriter之間添加另一個注釋器,刪除所有注釋但是你的注釋。

我使用java 8重寫了德語Attanasios解決方案,並將其更改為使用不同的annotationTypePrefix過濾掉任何內容:

public void filterAnnotations(JCas jcas, String annotationTypePrefix) {

    JCasUtil.selectAll(jcas)
            .stream()
            .filter(t -> !t.getType().getName().startsWith(annotationTypePrefix))
            .forEach(TOP::removeFromIndexes);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM