我在管道中使用一些UIMA注解器。它运行的任务如下:
问题是我不想写所有的注解(标记,句子,SubToken,时间,myAnnotations等等)因为文件很快就会变大。
我希望删除所有的注释,只保留由创建的注释器。
我正在与下一个图书馆合作:
我用的是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注解器(从ClearTK中)并删除无用的注释。
我该怎么做?
据我所知,您可以通过注释实例使用removeFromIndexes();方法。
是否需要创建UIMA处理器并将其添加到管道中?
发布于 2014-01-01 23:11:10
最后,我创建了一个引擎来删除无用的注释:
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注释
发布于 2013-12-31 12:30:06
是的:在MyAnnotator和XWriter之间,添加另一个注释器,删除除您的注释之外的所有注释。
发布于 2018-12-06 14:40:43
我使用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);
}https://stackoverflow.com/questions/20844217
复制相似问题