2016-08-23 29 views
-1

我是Apache UIMA的新手,我尝试使用Apache UIMA构建NLP管道。当用户上传文档(即PDF,单词)时,我想使用Tika Annotator提取数据。我能够使用APache Tika从pdf和其他文档中提取文本,但是如何为此编写Annotator以及如何将一个注释器的输出作为输入传递给其他注释器。我经历了apache UIMA网站,但无法从网站获取太多内容,因此我可以在我的项目中使用它。使用Apache UIMA构建NLP操作管道

例如将具有提卡标注器来提取文本,然后使用输出提卡注释器在TokenAnnotator执行标记化,然后使用TokenAnnotator输出作为输入到POS标注器

任何帮助将不胜感激

+0

嗨Rana,我认为这可能会有所帮助,如果你能提供更多关于实际使用情况的细节。即使你有标记和POS标记的文本,他们也没有多大用处。你到底想要完成什么? –

+0

嗨,我正在尝试在UIMA中构建管道。实际使用情况如下(1)您上传的某个文件可能是pdf,word文档(2)您使用Apache Tika Annotator从文档中提取内容(3)使用Tika Annotator的输出执行空白区域Tokenization( 4)执行POS标记。 – Rana

+0

我明白了很多。但是,一旦您将文本标记化并添加了POS标签,接下来的步骤是什么?因为通常,这两个步骤是NLP管道中的初步步骤(除非优化标记和标记是您正在处理的内容,但它并不像它那样)。 –

回答

2

UIMA使用CAS(或JCas,如果您正在执行Java)作为注释器之间的“共享上下文”。所以在你的情况下,你需要定义一个UIMA Annotator管道作为(TikaAnnotator,SentenceAnnotator,POSAnnotator)的序列,然后用PDF或Word文档作为输入调用这个管道。您可能必须将PDF/Word字节序列化为base64,并将其解码回来,因为CAS在documentText中需要一个(ascii?)字符串。 TikaAnnotator将使用CAS.getDocumentText()读取PDF/Word字节,解析出文本,并使用特定类型的Annotation类(例如TikaAnnotation)将文本写入AnnotationIndex。

SentenceAnnotator然后将使用TikaAnnotation.class键从Annotation索引中提取文本,并将其标记为多个SentenceAnnotations,并将其再次写入CAS中的AnnotationIndex。

最后,POSAnnotator将按类名提取SentenceAnnotations,并为每个名称将多个POS注释写回索引。

我在这里有一些代码可能有助于说明上述情况。网上也有很多类似的例子,IIRC UIMA也有一些优秀的文档。

http://sujitpal.blogspot.com/2011/04/uima-sentence-annotator-using-opennlp.html http://sujitpal.blogspot.com/2011/08/uima-noun-phrase-pos-annotator-using.html

UIMA依赖于XML配置和Java代码的组合,我发现,该系统成为了一段时间后,维持疼痛。对于后续(与工作有关的)项目(基于博客文章中描述的POC),我选择了UIMAFit