内容


InfoSphere Warehouse 中的文本分析,第 3 部分

开发和集成定制的 UIMA 文本分析引擎

从非结构化数据挖掘商业信息

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: InfoSphere Warehouse 中的文本分析,第 3 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:InfoSphere Warehouse 中的文本分析,第 3 部分

敬请期待该系列的后续内容。

简介

如本系列的前两篇文章所述,InfoSphere Warehouse 为基于词典和正则表达式的文本分析提供工具。这两种方法可以说是从文本提取信息的最常用方法,但在很多情况下这两种方法还不能解决问题。

InfoSphere Warehouse 文本分析构建在 UIMA 框架之上,该框架是一个支持开发可扩展分析应用程序的开源框架。UIMA 支持从多个模块开发分析应用程序。例如,一个模块从本文提取和注释人员,另一个模块查找这些注释之间的关系。UIMA 通过一个层级类型系统定义连接、输入和输出。UIMA 框架在多种编程语言中可用,它在 Java® 中使用得最多。通过 InfoSphere Warehouse,您可以导入基于 UIMA 的 Java Analysis Engines,从而显著地扩展文本分析能力。这些定制的注释器可以在分析流中和 TextAnalyzer 操作器一起使用。类似于 Dictionary 和 Regular Expression 操作器,找到的实体能够映射到数据库表的列,经过进一步处理之后可作为结构化信息使用。

本文描述了 UIMA 框架的基础概念,为您创建定制的 UIMA 分析引擎并在 InfoSphere Warehouse 中使用它提供理论和实践指导。本文解释了如何设置基于 Eclipse 的 UIMA 框架开发环境,以及如何编写自己的简单类型系统和注释器描述,并将它们用作分析引擎的界面。然后向您展示如何编写对文档执行实际分析的 Java 代码。Java 代码编写完成之后,您将学习如何将它导出为 Processing Engine ARchive (PEAR) 文件,这是打包和部署注释器的 UIMA 标准。最后,本文解释了如何将 PEAR 文件导入到 InfoSphere Warehouse, 并在分析流中使用它从文本提取信息。本文通过一个简单例子来演示这个完整的流程,它将分析文本并返回包含 5 个以上元音的单词。

编写定制的注释器是解决特定业务问题的有效方法。另外,Apache UIMA 的主页和一些大学提供免费访问的分析引擎储存库,这些库提供可以在 InfoSphere Warehouse 中使用的解决方案。有很多公司销售文本分析解决方案。因此,通过使用 UIMA 开发标准方法,您可以利用他人已经完成的工作解决类似的问题。

与文本分析相关的最有趣、最活跃的领域是科学研究和情感探测。在情感探测中,分析引擎尝试确定某人对给定产品或服务的积极和消极感觉。情感探测的一个实际例子是,在产品发行之后监控论坛、博客和审查 Web 站点,以确定公众的反应。或者监控类似的资源以度量新的市场推广如何影响产品的认知程度。这些非常有趣的应用程序仅代表了可以在 InfoSphere Warehouse 中使用的一小部分分析引擎(用于从数据仓库的非结构化信息中提取信息)。

UIMA 概念

如前面小节所述,InfoSphere Warehouse 提供基于 Unstructured Information Management Architecture (UIMA) 的文本分析特性。您可以使用内置的文本分析特性,即基于词典和基于正则表达式的命名实体提取,如本系列的前面的文章所述。您还可以使用定制的 Apache UIMA 文本分析组件实现更高级的文本分析解决方案。可以通过 IBM 服务部门、IBM Research 或其他公司和大学获取组件。当然,您可以使用 UIMA SDK 创建自己的组件。

什么是 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. 包含用于已命名实体识别、语法分析和关系探测的注释器的文本分析引擎
显示注释器如何合并到一个文本分析引擎中以从文本字符串提取 CeoOf 关系的映射
显示注释器如何合并到一个文本分析引擎中以从文本字符串提取 CeoOf 关系的映射

UIMA 类型系统

UIMA 类型系统 定义能够在文档中找到并且能够被分析引擎提取的各种对象的类型。例如,Person 就是一个类型。

类型包括特征。例如 AgeOccupation 可能被定义为 Person 类型的特征。类型的例子还有 OrganizationCompanyMoneyProductNounPhrase

类型系统特定于领域和特定于应用程序。您可以将类型并入到不同的类中。例如 Company 可以定义为 Organization 的子类型,或 NounPhrase 可以定义为 ParseNode 的子类型。

在文本分析中,用于派生其他类型的概括性的通用类型被称为 Annotation 类型,它由 UIMA 框架提供。您可以使用 Annotation 类型在文档中标记区域。Annotation 类型包含 BeginEnd 特征,这些特征的值将确定一个跨段。例如,在以下文本字符串(与图 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 还为 BooleanIntegerDouble 等特征定义基础范围类型,并为执行原始类型定义数组。

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 中,分析非结构化数据要求该数据作为列储存在数据库中,并且使用的字符数据类型为 CHARVARCHARCLOB。UIMA 将每个表行的特定文本列内容作为一个文本文档处理。

生成的分析结果(都来自 Annotation 类型)存储在 CAS 中。通过 CAS Consumer 将选择的结果的内容写入到使用 JDBC 的数据库中。每个选择的特征都储存在一个新列中。

为了指定应该将哪个分析结果写入到数据库,您应该配置 Text Analyzer 操作器的属性,具体而言,就是配置 Analysis Results 选项卡。使用这个选项卡指定哪个注释类型包含分析结果(例如,类型 Company)。

如前所述,每个注释都包含 BeginEnd 等特征,同时也可以包含自定义特征,比如 Company 类型的 Full_Legal_NameCEO。 选择的注释类型指定您感兴趣的结果,而该注释类型中选择的特征指定感兴趣的细节部分。每个特征都存储在一个数据库列中。

最终生成的数据库表不一定要包含从分析创建的列。它也可以包含来自输入表的列。这允许您在随后,例如,将结果与原始文本关联起来。

图 2 总结了这个流程。在图中可以看到,Text Analyzer 操作器的 Analysis Result 选项卡配置 CAS Consumer,以将 BeginEndFull_Legal_Name 特征的内容写到结果表中。

图 2. 分析文本列并将分析结果写到表中的 UIMA 流
UIMA 流显示分析样例文本字符串导致在表中将 International Business Machines 写成 Full_Legal_Name
UIMA 流显示分析样例文本字符串导致在表中将 International Business Machines 写成 Full_Legal_Name

如果 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 跟踪级别获得更多信息。

创建 UIMA 分析引擎并将其集成到 InfoSphere Warehouse Design Studio 的例子

这个例子展示如何使用 UIMA SDK 编写一个简单的 UIMA 分析引擎,然后将其集成到 InfoSphere Warehouse Design Studio 中的文本分析流中。这个分析引擎将文档文本分解成单词(使用空格分隔的文本),并为所有包含 4 个以上元音的单词创建注释。尽管没有针对这个分析引擎的业务用例,但它以一种简单的方式展示了创建 UIMA 分析引擎有多么容易。

这个例子使用 Apache.org 提供的 Eclipse Tooling for UIMA 创建分析引擎。选择使用这个工具的原因是,它为开发分析引擎提供易于使用的编辑器和工具。

分析引擎就绪之后将其打包成 PEAR 文件,这是 InfoSphere Warehouse 要求使用的分析引擎导入格式。然后,在 Design Studio 中导入分析引擎,并使用它在数据库表中的样例文本文档上创建一个流。对于这些样例文本文档,将使用随 InfoSphere Warehouse 附带的位于 DWESAMP 数据库中的 CIA.FACTBOOKS 表。

安装 UIMA

要安装 UIMA,请从 UIMA 下载页面 下载 UIMA Java Framework & SDK (version 2.2.2),并将其解压缩到您的文件系统中。您还需要根据 Apache UIMA 和 SDK Setup 文档中的 逐步说明 安装 UIMA Eclipse 插件。

创建和测试 UIMA 分析引擎

UIMA 分析引擎包含一个针对自含解释器的 Java 类和一些 XML 文件。这个 Java 类扩展 UIMA SDK 提供的基础解释器实现。XML 文件描述注释器创建(或使用)的注释的类型,以及其他信息。UIMA Eclipse 简化了 XML 文件的创建。通过以下步骤在您的 Eclipse 环境中创建分析引擎。

创建包含 UIMA 性质的 Java 项目

  1. 在您的 Eclipse 环境中,选择 File -> New -> Java Project
  2. 输入项目名。例如,com.ibm.developerworks.textanalysis.partIII
  3. 接下来,将 UIMA 性质(nature)添加到该项目中。这将为项目创建一个特定的文件夹结构,并在其上支持其他操作。要添加性质,右键单击项目并选择 Add UIMA Nature。在以下步骤中,您仅使用创建的 desc 文件夹。
  4. 最后,您必须将 UIMA Java 库添加到项目的构建路径中。为此,右键单击项目并选择 Build Path -> Add External Archives。添加解压缩后的 UIMA 包中的 lib 文件夹下的所有 jar 文件。

创建类型系统

类型系统包含注释类型及其特征。您创建的样例注释器将为包含最少元音的单词创建注释,因此类型系统应该包含一个 VowelCountAnnotation 类型。这种类型的特征之一应该是单词包含的元音数。

遵循以下步骤创建类型系统:

  1. 右键单击项目的 desc 文件夹并选择 New -> Other...
  2. 选择 UIMA -> Type System Descriptor File 并输入 VowelCountTypeSystem.xml 作为文件名。
  3. 在编辑器的底部找到 Type System 选项卡。
  4. 单击 Add Type 并输入 com.ibm.developerworks.VowelCountAnnotation 作为类型名。这个类型继承自 UIMA Annotation 类型。
  5. 选择 VowelCountAnnotation 类型并单击 Add ... 为元音数目添加特征。输入 numberVowels 作为特征名。
  6. 单击 Browse 按钮并选择 uima.cas.Integer 作为该特征的范围类型。图 3 显示了完整的类型系统。
    图 3. 类型系统
    Types(或 Classes)部分的屏幕截图,其中的树结构显示了 VowelCountAnnotation 类型的 numberVowels 特征
    Types(或 Classes)部分的屏幕截图,其中的树结构显示了 VowelCountAnnotation 类型的 numberVowels 特征
  7. 保存类型系统。注意,UIMA 框架已经在源文件夹的 com.ibm.developerworks 包中生成 Java 类 VowelCountAnnotation_Type.javaVowelCountAnnotation.java。您将在下一个步骤的注释器类中使用这些类。如果没有生成 Java 类,请在类型系统编辑器中单击 JCasGen 按钮。

实现 Java 注释器类

注释器的实现位于扩展 UIMA 框架提供的基础注释器实现 JCasAnnotator_ImplBase 的 Java 类中。

  1. 右键单击 com.ibm.developerworks 包并选择 New -> Class
  2. 选择 VowelCounter 作为类名,并选择 org.apache.uima.analysis_component.JCasAnnotator_ImplBase 作为超类。
  3. 对于这个简单的解释器,您仅需要重写 process 方法,该方法获取 JCAS — 针对 Common Analysis Structure 的 Java 类。这个对象包含文档文本和关于文本的元数据信息,比如文档语言。它还包含在分析运行期间创建的注释。例如,如果您在一个行中运行多个注释器,那么其中一个注释器能够访问之前运行的注释器创建的注释。本例中的注释器没有读取任何注释;它仅创建 VowelCountAnnotation 注释。

清单 1 包含 VowelCounter 类的完整代码。查看 process 方法。首先,它通过 getDocumentText() 方法读取文档的文本。然后,它使用空格替换换行、下划线和连字符。这是因为以下循环通过空格将文本分隔成单词。现实中的语言分析要复杂得多,但作为演示,这种简单的方法已经足够。

getNumberVowels() 方法计算每个单词包含的元音数。如果单词包含 4 个以上的元音,将为其创建一个注释。该代码仅使用类型系统自动创建的 VowelCountAnnotation 类、numberVowels 特征的 getter 和 setter 方法,以及注释的 BeginEnd 的默认特征。最后,annotation.addToIndexes() 将注释添加到 CAS 注释索引。

清单 1. VowelCounter.java
package com.ibm.developerworks;

import java.util.ArrayList;
import java.util.Collections;

import org.apache.uima.analysis_component.JCasAnnotator_ImplBase;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.jcas.JCas;

public class VowelCounter extends JCasAnnotator_ImplBase {

   // the vowels threshold. Words that have more vowels than this will be annotated
   int vowelThreshold = 4;

   @Override
   public void process(JCas cas) throws AnalysisEngineProcessException {
      // get document text
      String doc = cas.getDocumentText();

      // replace line breaks, underscores and hyphens by blanks
      doc = doc.replaceAll("\n", " ");
      doc = doc.replaceAll("_", " ");
      doc = doc.replaceAll("-", " ");
		
      // iterate over the words and count vowels
      int currentPos = 0;
      while (currentPos < doc.length()) {
         int posNextDelimiter = doc.indexOf(' ', currentPos);
         int end = posNextDelimiter;
         if (posNextDelimiter == -1) {
            end = doc.length();
         }

         int numberVowels = getNumberVowels(doc.substring(currentPos, end));
         if (numberVowels > vowelThreshold) {
            this.addAnnotation(currentPos, end, numberVowels, cas);
         }
         currentPos = end + 1;
      }
   }

   protected void addAnnotation(int begin, int end, int numberVowels, JCas cas) {
      VowelCountAnnotation annotation = new VowelCountAnnotation(cas);
      annotation.setBegin(begin);
      annotation.setEnd(end);
      annotation.setNumberVowels(numberVowels);
      annotation.addToIndexes();
   }

   /**
    * Returns the number of vowels a, e, i, o, u, A, E, I, O, U in the word
    * 
    * @param word
    *           the input word
    * @return the number of vowels in the word
    */
   protected int getNumberVowels(String word) {
      if ((word == null) || (word.length() == 0))
         return 0;

      // initialize the list of vowels
      // (this can also be moved to the initialize()-method of the annotator
      // for performance optimization)
      ArrayList<Character> vowels = new ArrayList<Character>();
      Collections.addAll(vowels, 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U');

      int numberOfVowels = 0;
      for (int i = 0; i < word.length(); i++) {
         if (vowels.contains(word.charAt(i))) {
            numberOfVowels++;
         }
      }
      return numberOfVowels;
   }
}

创建描述符文件

要完成分析引擎,您需要创建一个描述符文件,用于连接 Java 类和类型系统和包含其他配置选项。遵循以下步骤创建描述符:

  1. 右键单击项目的 desc 文件夹并选择 New -> Other...
  2. 选择 UIMA -> Analysis Engine Descriptor File 并输入 VowelCounter.xml 作为文件名。
  3. 转到编辑器的 Overview 选项卡,然后选择 VowelCounter 类作为 Java 类文件。
  4. 在 Imported Type Systems 部分的 Type System 选项卡上,单击 Add 通过位置导入类型系统 VowelCountTypeSystem.xml
  5. 要定义使用哪种类型的注释作为注释器的输出,转到 Capabilities 选项卡并单击 Add Type
  6. 在针对 VowelCountAnnotation 的行上,单击 Output 列将 Annotation 类型声明为注释器的输出类型,如图 4 所示。
    图 4. Capabilities 选项卡
    Component Capabilities 部分的屏幕截图,选择 VowelCountAnnotation 类型作为输出
    Component Capabilities 部分的屏幕截图,选择 VowelCountAnnotation 类型作为输出
  7. 保存描述符文件。

测试注释器

在开发注释器期间,您可能想在一些样例文本上测试它。您可以使用 UIMA JDK 提供的 Document Analyzer 轻松实现这个目的。遵循以下步骤运行分析器:

  1. 右键单击 Java 项目并选择 Run As -> Java Application
  2. 选择 org.apache.uima.tools.docanalyzer.DocumentAnalyzer 作为应用程序。
  3. 在对话框中,将 Location of the Analysis Engine XML Descriptor 指向您的 VowelCounter.xml 描述符文件,然后单击 Interactive 按钮。
  4. 向文本字段输入一些样例文本,并单击 Analyze。图 5 中的例子展示注释如何出现在文档分析器中。
    图 5. 文档分析器中的注释
    文档分析器中的样例文本。样例文本中的单词 warehouse 被高亮显示为 VowelCountAnnotation
    文档分析器中的样例文本。样例文本中的单词 warehouse 被高亮显示为 VowelCountAnnotation

导出分析引擎

要在 InfoSphere Warehouse Design Studio 中使用分析引擎,请遵循以下步骤将它打包成 PEAR 文件:

  1. 右键单击 Java 项目并选择 Generate PEAR file
  2. 在出现的向导中,将 Component Descriptor 指向您的 VowelCounter.xml 描述符文件,然后单击 Next 两次。
  3. 在 PEAR 文件页面,输入用于保存 PEAR 文件的路径。例如,c:\VowelCounter.pear
  4. 单击 Finish。现在,您可以导入分析引擎并在 Design Studio 中使用它。

在 InfoSphere Warehouse Design Studio 中导入和使用分析引擎

您可以将 PEAR 文件格式的分析引擎导入到 Data Warehousing 项目,并通过 Text Analyzer 操作器在分析流中使用它。

在 Design Studio 中创建 Data Warehousing 项目

  1. 从 Design Studio 菜单选择 File -> New -> Data Warehouse Project
  2. 在向导中输入项目名。
  3. 单击 Finish

导入分析引擎

  1. 在项目中右键单击 Analysis Engines 文件夹(在 Text Analysis 之下),然后选择 New -> Analysis Engine
  2. 将 Analysis Engine 指向先前导出到文件系统的 PEAR 文件。
  3. 单击 Finish

创建数据库流

  1. 在 Data Warehousing 项目中右键单击 Data Flows 文件夹,然后选择 New -> Data Flow
  2. 在向导中,为数据流输入一个名称。例如,Count Vowels
  3. 指定您需要用到一个数据,并单击 Next
  4. 选择 DWESAMP 数据库并单击 Finish

定义数据流

以下步骤定义如何定义数据流,以让它从 DWESAMP 样例数据库的 CIA.FACTBOOK 表读取文本并对文本运行分析引擎,然后将注释写到新的数据库表中。

通过 Table Source 读取源表。使用 Text Analyzer 操作器运行分析引擎。数据流中的最后一个操作器是指向您希望写入注释的表的 Table Target 操作器。

  1. 从选项板的 Sources and Targets 部分,选择一个 Table Source 操作器,并将其拖放到编辑器画布中。
  2. 在 Source 数据库表浏览对话框中,展开 CIA 模式并选择 FACTBOOK 表。
  3. 单击 OK
  4. 单击 Finish
  5. 从 Text Operators 部分将一个 Text Analyzer 操作器拖放到画布上。该操作器的 Properties 视图在画布下面打开。
  6. 在画布上,通过一个拖操作将 Source Table 操作器的输出端口和 Text Analyzer 操作器的输入端口连接起来。
  7. 在画布上选择 Text Analyzer 操作器,并按照以下方式在 Properties 视图中定义属性:
    1. 在 Analysis Engine 页面,选择 TEXT input-text 列,并将分析引擎设置为导入的名为 VowelCounter 的引擎。
    2. 在 Analysis Results 页面,选择 VowelCountAnnotation 作为注释类型。您可以看到 numberVowelsBeginEnd 特征已经选择为结果列。Design Studio 自动地为 Covered Text 添加一个列。该列包含注释器指定的从 BeginEnd 的文本。这正是在文本分析器中为注释标记的文本。
    3. 在 Output 列页面,从可用列列表中选择 COUNTRY 列,并将其移动到右侧的输出列列表中。现在,您可以将注释与文本文档的键 COUNTRY 关联起来。
  8. 要创建包含注释的表,右键单击 Text Analyzer 操作器的输出端口,然后选择 Create suitable table...
  9. 输入 VOWELCOUNTS 作为表名,并输入 CIA 作为模式名。
  10. 单击 Finish
  11. 最后,保存数据流。例如,您可以在编辑器区域内按下组合键 Ctrl+S 进行保存。

图 6 显示了完整的数据流。您可以通过选择 DB2 UDB Data Flow -> Execute 运行数据流。

图 6. 数据流
InfoSphere Warehouse Design Studio 中的数据流。Table Source 连接到与 Table Target 相关联的 Text Analyzer
InfoSphere Warehouse Design Studio 中的数据流。Table Source 连接到与 Table Target 相关联的 Text Analyzer

要查看样例注释,请右键单击目标操作器并选择 Sample Contents of the Database Table。图 7 显示了为 Afghanistan 找到的第一个注释。

图 7. 样例注释
样例注释。所有样例都来自 COUNTRY Afghanistan,并显示具有 5 个元音以上的单词
样例注释。所有样例都来自 COUNTRY Afghanistan,并显示具有 5 个元音以上的单词

结束语

在这篇文章中,您学习了如何开发自己的 UIMA 分析引擎并在 InfoSphere Warehouse 中使用它。UIMA 是一个支持开发和部署分析应用程序的开源软件框架。本文描述了开发定制分析引擎所需的 UIMA 概念。您了解了如何设置 UIMA 开发环境,如何创建自己的注释器,以及在 InfoSphere Warehouse 中使用定制注释器从文本输入提取结构化信息。使用 UIMA 兼容分析引擎的能力大大扩展了 InfoSphere Warehouse 的分析功能。这使得为具有特定分析类型需求的项目开发分析引擎成为可能。此外,这也使得使用免费或商业的第三方资产进行高级分析成为可能,比如对 Warehouse 数据执行情感探测。

本文是关于使用 InfoSphere Warehouse 进行文本分析的系列文章的第 3 部分,也是最后部分。第 1 部分解释了InfoSphere Warehouse 文本分析的架构,以及如何对正则表达式使用集成工具,以从文本数据提取信息。第 2 部分概述了对基于词典的分析的支持,它教您如何构建自己的词典并在分析中使用它们。此外,还展示了使用 IBM Cognos 报告工具在企业范围内分发提取到的信息有多么容易。第 3 部分描述了如何编写定制的 UIMA 注释器,以及如何在 InfoSphere Warehouse 中使用它们。

如第 1 部分所述,在大部分公司中,非结构化信息是可用业务信息的主体,并且增长速度也是最快的。InfoSphere Warehouse 文本分析构建在 UIMA 等开放标准之上,并且提供强大、丰富的工具,您可以使用它们从非结构化数据获取信息。然后,您可以使用 Cognos 等 BI 报告工具在企业范围内分发提取到的信息。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=450747
ArticleTitle=InfoSphere Warehouse 中的文本分析,第 3 部分: 开发和集成定制的 UIMA 文本分析引擎
publish-date=11292009