【问题标题】:Using Apache UIMA to Build NLP Operation Pipeline使用 Apache UIMA 构建 NLP 操作流水线
【发布时间】:2016-08-23 17:36:58
【问题描述】:

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

例如将让 Tika Annotator 提取文本,然后使用 Output Tika Annotator 在 TokenAnnotator 中执行标记化,然后使用 TokenAnnotator 输出作为 POS Annotator 的输入

任何帮助将不胜感激

【问题讨论】:

  • 嗨 Rana,如果您能提供有关实际用例的更多详细信息,我认为这可能会有所帮助。即使您对文本进行了标记和 POS 标记,它们也没有多大用处。你到底想完成什么?
  • 嗨,我正在尝试在 UIMA 中构建管道。实际用例是这样的(1)您上传的一些文档可能是 pdf、word 文档(2)您使用 Apache Tika Annotator 从文档中提取内容(3)使用 Tika Annotator 的输出执行空白标记化( 4) 执行词性标注。
  • 我明白了。但是,一旦您对文本进行了标记和 POS 标记,接下来的步骤是什么?因为通常,这两个步骤是 NLP 管道中的初步步骤(除非您正在优化标记化和标记,但听起来并不像它)。
  • Martin,您可以执行主题建模、文本分类、情感分析,还可以使用 apache solr 进行搜索和组织

标签: java apache nlp uima


【解决方案1】:

UIMA 使用 CAS(如果您正在使用 Java,则使用 JCas)作为注释器之间的“共享上下文”。

因此,在您的情况下,您可以将 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 索引中提取文本,并将其标记为多个 SentenceAnnotation,这些 SentenceAnnotation 再次写入 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2022-11-26
    相关资源
    最近更新 更多