标题：UIMA
什么是 UIMA？
UIMA 是一个用于分析非结构化内容（比如文本、视频和音频）的组件架构和软件框架实现。这个框架的目的是为非结构化分析提供一个通用的平台，从而提供能够减少重复开发的可重用分析组件。
UIMA 架构允许您轻松插入定制的分析组件，并将它们与其他组件合并。您的 UIMA 应用程序不需要知道分析组件共同合作生成结果的细节。集成和组织多个分析组件是 UIMA 框架的工作。 
UIMA 应用程序可能分析纯文本并识别人员、位置和组织；它也可能识别关系，比如为谁工作或在什么地方工作。应用程序通常可以拆分成组件。例如 “语言识别” => “特定于语言的部分” => “句子范围检测” => “实体检测（人员/位置的名称等等）”。 
组件之间可能存在依赖性。例如，“句子范围检测” 必须先于 “特定于语言的部分”。 每个组件都是自含的并且可以与其他组件组合。每个组件（用 Java 或 C++ 编写）实现由其他框架定义的接口，并通过 XML 描述符文件提供自我描述元数据。UIMA 框架管理组件和在它们之间流动的数据。分析引擎、注释器和 Common Analysis Structure　分析引擎 是 UIMA 中的中央构建块。分析引擎包含一个或多个注释器 或其他分析引擎。每个注释器实现一个特定的文本分析功能。这种递归式打包允许您通过简单的分析引擎构建复杂的分析引擎。每个注释器将其结果储存在具有类型的特征结构 中，该结构仅是包含类型和一组属性/值对的数据结构。
注释 是一种特殊的特征结构，它被附加到需要分析的工件的某个区域。例如，注释可能被附加到文档中的一段文本上。对于这种情况，注释在文档中包含一个特定的开始和结束位置。这意味着可以方便地使用注释指定信息提取结果。例如，在以下文本中，Company 注释覆盖的位置是从 19 到 21：
UIMA started as an IBM initiative, but has gone open source in 2008所有特征结构（包括注释）都用 UIMA Common Analysis Structure (CAS) 表示，CAS 是中央数据结构，所有 UIMA 组件都通过它进行通信。 
图 1 显示一个包含用于已命名实体识别、语法分析和关系探测的注释器的分析引擎。注意，Relationship Annotator 通过分析在 CAS 中预先存在的概念和语法注释探测关系，而不需要查看实际的文档文本。 
图 1. 包含用于已命名实体识别、语法分析和关系探测的注释器的文本分析引擎
  
UIMA 类型系统
UIMA 类型系统 定义能够在文档中找到并且能够被分析引擎提取的各种对象的类型。例如，Person 就是一个类型。 
类型包括特征。例如 Age 和 Occupation 可能被定义为 Person 类型的特征。类型的例子还有 Organization、Company、Money、Product 或 NounPhrase。 
类型系统特定于领域和特定于应用程序。您可以将类型并入到不同的类中。例如 Company 可以定义为 Organization 的子类型，或 NounPhrase 可以定义为 ParseNode 的子类型。 
在文本分析中，用于派生其他类型的概括性的通用类型被称为 Annotation 类型，它由 UIMA 框架提供。您可以使用 Annotation 类型在文档中标记区域。Annotation 类型包含 Begin 和 End 特征，这些特征的值将确定一个跨段。例如，在以下文本字符串（与图 1 分析的字符串一样）中，注释 Person 从位置 0 开始在位置 10 结束：
Fred Center is the CEO of Center Micros 
开发注释器的第一步是定义需要使用的 CAS Feature Structure 类型。这在一个称为 Type System Descriptor 的 XML 文件中完成。UIMA 定义内置类型 TOP（它是类型系统的根，类似于 Java 中的 Object）和以上描述的 Annotation 等。UIMA 还为 Boolean、Integer 和 Double 等特征定义基础范围类型，并为执行原始类型定义数组。
Processing Engine ARchives (PEAR) 文件
开发并成功测试了分析引擎之后，您可以打包它并将其作为预配置（文本）分析组件部署到另一个应用程序中。在 UIMA 中，一种注释器打包格式称为 PEAR，它是 Processing Engine ARchive 的缩写。PEAR 格式包含运行打包注释器组件所需的所有信息。要详细了解 PEAR 打包格式，请查看 UIMA 参考文档的 PEAR Reference 章节。 
通过在 InfoSphere Warehouse Design Studio 中使用 Text Analyzer 操作器，您可以导入任何 Apache UIMA 支持的分析引擎，以注释非结构化文本中的概念。使用 Analysis Engine Import 向导可以导入这些预配置的 PEAR 文件。对于使用以前的 UIMA 版本（比如 IBM UIMA）创建的分析引擎，首先要迁移它。本文的下一小节将描述迁移过程。
UIMA 和 InfoSphere Warehouse
如前面小节所述，您可以将预配置的 UIMA 分析引擎（PEAR 文件）导入到 InfoSphere Warehouse 中。这允许您扩展 InfoSphere Warehouse 的文本分析功能，以满足特定的需求。 
本文概述如何在数据库中表示由分析引擎创建的文本分析结果。此外，还解释了如何使用 InfoSphere Warehouse 导入并执行使用以前版本的 UIMA 创建的文本分析引擎。
将分析结果映射到数据库的列上
在 InfoSphere Warehouse 中，分析非结构化数据要求该数据作为列储存在数据库中，并且使用的字符数据类型为 CHAR、VARCHAR 或 CLOB。UIMA 将每个表行的特定文本列内容作为一个文本文档处理。
生成的分析结果（都来自 Annotation 类型）存储在 CAS 中。通过 CAS Consumer 将选择的结果的内容写入到使用 JDBC 的数据库中。每个选择的特征都储存在一个新列中。
为了指定应该将哪个分析结果写入到数据库，您应该配置 Text Analyzer 操作器的属性，具体而言，就是配置 Analysis Results 选项卡。使用这个选项卡指定哪个注释类型包含分析结果（例如，类型 Company）。 
如前所述，每个注释都包含 Begin 和 End 等特征，同时也可以包含自定义特征，比如 Company 类型的 Full_Legal_Name 或 CEO。 选择的注释类型指定您感兴趣的结果，而该注释类型中选择的特征指定感兴趣的细节部分。每个特征都存储在一个数据库列中。
最终生成的数据库表不一定要包含从分析创建的列。它也可以包含来自输入表的列。这允许您在随后，例如，将结果与原始文本关联起来。 
图 2 总结了这个流程。在图中可以看到，Text Analyzer 操作器的 Analysis Result 选项卡配置 CAS Consumer，以将 Begin、End 和 Full_Legal_Name 特征的内容写到结果表中。
图 2. 分析文本列并将分析结果写到表中的 UIMA 流
  
如果 UIMA 注释器的结果大于它们映射到的结果列，那么可能出现难以识别的问题。例如，如果列的类型为 VARCHAR(256)，大于 256 个字符的结果将导致失败的流和 SQL 错误。识别该问题的简易方法是临时使用 CLOB 类型作为目标列，它没有任何大小限制。 如果这能够解决该问题，那么注释器将返回一个比较长的返回值。在注释器代码中确保创建注释时不超过特定长度是非常有用的。如果没有可用的特定长度的 DB2 表空间，可能会导致另一个问题。 
将基于 IBM UIMA 的分析引擎迁移到 Apache
InfoSphere Warehouse V9.5.1 和更新版本不支持基于 IBM UIMA 的打包文本分析组件。不过，通过遵循以下步骤之一，您就可以在这些版本中使用提到的组件：
使用 IBM UIMA 到 Apache UIMA 的转换工具迁移 PEAR 文件的源代码。要了解更多信息，请在 UIMA Web 站点上查看 Migrating from IBM UIMA to Apache UIMA 部分。 使用 IBM UIMA Adapter Wrapper for Apache UIMA 在基于 Apache UIMA 的运行时环境中运行基于 IBM UIMA 的 PEAR 文件。当没有可以用 IBM UIMA 到 Apache UIMA 转换工具转换的源代码时，您可以对基于 IBM UIMA 的解释器使用 IBM UIMA Adapter 包。要处理这些 IBM UIMA 解释器，请在新的 Apache UIMA 运行时中使用 IBM UIMA Adapter 包。要了解更多信息，请访问 alphaWorks 上的 UIMA 页面。 通过开启 InfoSphere Warehouse 中的 UIMA 日志识别问题
InfoSphere Warehouse 将在注释器代码中发生的错误消息转发到执行分析流跟踪中。如果您对流程、数据流或挖掘流启用内容跟踪，那么 CONFIG 级别和该级别以上的 UIMA 日志将路由到 InfoSphere Warehousing 日志。 
在某些情况下，有必要从更细的级别获取 UIMA 日志消息来调试注释器的问题。这将涵盖在注释器的 UIMA 代码中发生的问题，以及在定制注释器的注释器代码中发生的问题。查看 InfoSphere Warehouse 文档 了解如何查看挖掘流或数据流的 UIMA 日志，以及如果更改 UIMA 跟踪级别获得更多信息。
通过开启 InfoSphere Warehouse 中的 UIMA 日志识别问题
InfoSphere Warehouse 将在注释器代码中发生的错误消息转发到执行分析流跟踪中。如果您对流程、数据流或挖掘流启用内容跟踪，那么 CONFIG 级别和该级别以上的 UIMA 日志将路由到 InfoSphere Warehousing 日志。 
在某些情况下，有必要从更细的级别获取 UIMA 日志消息来调试注释器的问题。这将涵盖在注释器的 UIMA 代码中发生的问题，以及在定制注释器的注释器代码中发生的问题。查看 InfoSphere Warehouse 文档 了解如何查看挖掘流或数据流的 UIMA 日志，以及如果更改 UIMA 跟踪级别获得更多信息。