利用 IBM Watson Explorer 分析分层数据的上下文内容

609 阅读20分钟
原文链接: www.ibm.com

利用 IBM Watson Explorer 分析分层数据的上下文内容

维度模型通常基于数据真实性、颗粒、维度和事实或度量等参数。但是,在有些业务场景中,围绕着数据模型中的颗粒或在不同层次结构级别上存储着宝贵的非结构化信息。

IBM Watson Explorer 利用自然语言处理 (NLP) 的语言学算法,不仅可以理解问题中的关键词,还可以理解其中的所有词汇。事实上,它可以分析语法、上下文、术语、习语,甚至还有思维方式。然后,它可以进行统计推理,在给定置信度级别内提出相应的建议或意见。

本教程介绍如何在内容分析的上下文中使用 IBM Watson Explorer 来分析分层数据结构,同时保留底层数据模型的层次结构或粒度。这种策略支持同步灵活分析非结构化内容和结构化维度两个方面。我会分步演示如何利用 IBM Watson Explorer 和 IBM Watson Content Analytics Miner 克服多重性问题,同时执行内容分析。

在本教程的准备工作中,我使用了下列软件组件:

  • IBM Watson Explorer Content Analytics V11.0.2
  • IBM Content Analytics Studio V11
  • Eclipse Java EE IDE for Web Developers
  • IBM dashDB
  • JDBC Driver for DB2
  • Windows Server 2012 R2

问题描述

我使用事件管理系统这个简单示例编写了本教程。尽管这是个非常简单的示例,但它可以从事件管理或其他系统(如质量管理,案例管理,工作流程管理或内容管理)轻松扩展到更复杂的用例场景。

图 1 到图 3 显示了示例的实体关系图、事实表以及层次表示方式。思考在图 1 中显示的事件报告所使用的数据结构。

图 1. 实体关系图:事件管理系统
entity relation diagram

点击查看大图

这里举例说明的系统是一个“运营源系统”示例。(有关“运营源系统”的更多信息,请参阅数据仓库工具包。)该系统由一个事务标头行构成,该标头行与多个事务行关联。使用标头/行模式(也称为父子模式),所有标头级别的维度外键和“退化维度”都应包含在行级别的事实表中,每个级别呈现不同的粒度。对于本教程,我在图 2 中使用了 INCIDENT_CODE、INCIDENT_LINE_ITEM、INVESTIGATION_CODE、RESOLUTION_CODE 以及 CLOSURE_CODE 来创建事实表,这是通过图 1 中显示的数据模型生成的。我在事实表中添加了几行示例数据,用来构建和演示解决方案。

图 2. 事实表结构和示例数据
fact table structure

点击查看大图

由于派生的事实表是非规范化的结构,所以很显然:只有叶级别是唯一的。

正如图 3 中所示,对称的分层数据结构有 5 个级别,每个级别有 3 个子级别,针对根级别共生成 81 行。字段的每个非结构化/结构化内容将从 1 级到 5 级、从 3 个到 81 个重复增加。(备注: 图 3 显示了分层结构表示方式的片段。有关更多详细信息,请参阅 GitHub 中的样本数据文件。)

图 3. 示例数据的分层视图
Hierarchical view of example data

点击查看大图

由 IBM Watson Explorer 抓取的所有内容都被视为一个文档或单个实体(也就是说,数据库表的每一行都被视为一个单独的文档)。该文档是其内部的唯一可用颗粒。遗憾的是,利用 IBM Watson 进行分析时,这些非结构化内容多次出现,会产生误导性的统计数据。例如,针对一个 INVESTIGATION_CODE 字段,第 2 级的 INCIDENT_DESCRIPTION 字段中的给定文本(如图 1 到图 3 中所示)被统计了九次。

本教程为您提供克服这种多重性问题的策略。我会演示如何创建自定义的数据库搜寻器插件,以特定方式抓取派生的事实表,从而涵盖层次结构所有级别的维度,但消除了多重性。

构建您的应用程序所需的准备工作

要构建自己的应用程序,您将需要具备下列技能和工具:

  • IBM Watson Explorer (Advanced Edition) 的应用知识
  • Content Analytics Studio 的应用知识以及对 Apache UMIA 内容分析概念的理解
  • IBM Watson Explorer Content Analytics V11.0.2
  • IBM Watson Explorer Content Analytics Studio V11
  • IBM Cloud 帐户(可选)
  • IBM dashDB(或者任何标准 DBMS)
  • 理解 DBMS 概念
  • Java 开发技能
1

设置内容分析集合

要创建内容分析集合,请执行以下操作:

  1. 记录以下设置和选项以供集合使用。
    选项名称 选项值
    General options
    Collection name ATutorialCollection
    Collection type Content analytics collection
    Solution package Do not apply a solution package
    Document cache Enable the document cache
    Thumbnail generation(在搜索结果中显示缩略图时需要) Do not enable thumbnail generation
    Advanced options
    Description Collection for demonstrating the concept of Contextual Content Analytics of Hierarchical Data - 02/04/2018
    Collection security
    Do not enable security for the collection
    Overlay index
    Do not enable overlay index
    N-gram segmentation
    Do not enable N-gram segmentation

    备注:有关更多信息,请参阅 IBM Knowledge Center 中的“Administering Watson Explorer Content Analytics”。

  2. 创建事实表。

    图 2 中所示的样本事实表是在 IBM dashDB 中创建的,其中包含样本数据。 图 4 显示了 dashDB 控制台中的样本数据。创建表的详细步骤不在本教程讨论的范围之内。但是,您可以使用任何标准的关系数据库。

    图 4. dashDB 中的样本数据
    sample data in dashDB

    点击查看大图

  3. 创建 JDBC 搜寻器。

    遵照 JDBC 搜寻器的标准创建过程进行操作,如 IBM Knowledge Center 中的“Crawler administration”所述。

    下表列出了 JDBC 连接的详细信息以供参考。

    参数
    JDBC driver name com.ibm.db2.jcc.DB2Driver
    JDBC driver class path F:\DevWTutorial\jars
    Database URL jdbc:db2://awh-yp-small02.services.dal.bluemix.net:50000/BLUDB

    用于连接 dashDB 的 JDBC 驱动程序和 DB2 一样,可以从 IBM Support 站点下载。

  4. 填充索引字段和构面映射。

    在创建搜寻器时,会根据下表填充索引字段映射和构面树。索引字段名称非常重要,因为这些字段会在自定义的搜寻器插件中使用,以便在自定义抓取流程中删除重复数据。

    字段名称 可返回 分面搜索 自由文本搜索 在摘要中 字段搜索 Parametric search Analyzable
    ID
    INCIDENT_CODE Yes Yes Yes Yes Yes No No
    INCIDENT_TYPE_CODE Yes Yes Yes Yes Yes No No
    REQUESTED_BY Yes Yes Yes Yes Yes No No
    AFFECTED_ITEM Yes Yes Yes Yes Yes No No
    HELP_DESK_ID Yes Yes Yes Yes Yes No No
    INCIDENT_LINE_ITEM Yes Yes Yes Yes Yes No No
    ASSIGNED_DEPT Yes Yes Yes Yes Yes No No
    INCIDENT_PART_NO Yes Yes Yes Yes Yes No No
    INCIDENT_DESCRIPTION Yes No Yes Yes No No Yes
    INVESTIGATION_CODE Yes Yes Yes Yes Yes No No
    DIAGNOSIS_CODE Yes Yes Yes Yes Yes No No
    DEFECTIVE_PARTS Yes Yes Yes Yes Yes No No
    DIAGNOSIS_DESCRIPTION Yes No Yes Yes No No Yes
    RESOLUTION_CODE Yes Yes Yes Yes Yes No No
    R_DEPT_CODE Yes Yes Yes Yes Yes No No
    R_WORK_CENTER Yes Yes Yes Yes Yes No No
    RESOLUTION_DESC Yes No Yes Yes No No Yes
    CLOSURE_CODE Yes Yes Yes Yes Yes No No
    CLOSING_COMMENT Yes No Yes Yes No No Yes

    图 5 显示了 IBM Watson Explorer Content Analytics Miner 中呈现的构面树层次结构。创建构面树之后,会抓取该表,初始采用以上配置。

    图 5. 构面树结构
    Facet tree structure

    点击查看大图

  5. 创建缺陷字典,并将其部署到内容分析服务器中。

    下表列出了缺陷字典的关键字及其词类和词形变化。

    缺陷
    (关键字)
    词类 词形变化
    damage Noun damages
    damage Verb damaged damages damaging
    foul Verb fouled fouling fouls
    foul Noun fouls
    crack Noun cracks
    crack Verb cracked cracking cracks
    clip Verb clipped clipping clips
    clip Noun clips
    break Noun breaks
    break Verb breaking breaks broke broken
    rip Verb ripped ripping rips
    rip Noun rips
    abrasion Noun abrasions
    mark Noun marks
    mark Verb marked marking marks
    seal Verb sealed sealing seals
    seal Noun seals
    scrap Noun scraps
    scrap Verb scrapped scrapping scraps

    使用关键字生成缺陷字典,用于分析事实表中的指示性文本内容。要了解更详细的信息,请参阅 GitHub 中的样本数据文件

    图 6 显示了该字典在 IBM Watson Content Analytics Studio 中的组织方式。有关更多信息,请参阅 IBM Knowledge Center 中的“Content Analytics Studio for advance text analytics”。

    图 6. Content Analytics Studio 中的缺陷字典
    Defect dictionary

    点击查看大图

    创建缺陷字典之后,会将配置的 UIMA 管道导出到内容分析服务器中。

    (创建该字典和导出 UIMA 管道的详细步骤不在本教程讨论的范围之内。此部分仅供参考,以便保持本教程的连贯性。)

2

在不使用自定义搜寻器插件的情况下生成初始输出结果

  1. 获取 IBM Watson Explorer Content Analytics Miner 中的初始统计数据。

    在已抓取集合、建立索引并做好分析准备之后,使用 IBM Watson Explorer Content Analytics 来验证初始统计数据。请注意,在图 7 的表中可以发现,关键字“fouling”出现 57 次、“scrap”出现 50 次,随后还有其他关键字的出现次数。

    图 7. IBM Watson Explorer Content Analytics Miner 中的初始统计数据
    Initial statistics in Watson Explorer

    点击查看大图

  2. 现在,通过在以下查询中选择关键字 fouling,查询 IBM Watson Explorer Content Miner 中的文档(表的单独一行):
    [Query Text : (*:*)AND (keyword::/"Explore"/"Defect Type(s)"/"fouling")]

    如果查看样本事实表,就会看到在与 INVESTIGATION_DETAILS 表连接时, INCIDENT_DESCRIPTION 字段包含重复了 20 次的同一值。这是误导性数据,是关系连接本质中固有的多重性问题的一个示例。在下一个部分,我会展示如何创建自定义的插件来克服这个问题。

    INCIDENT_HDR INCIDENT_DETAILS
    ID INCIDENT_CODE INCIDENT_LINE_ITEM INCIDENT_DESCRIPTION
    1 D1 D1.1 PART-01 is fouling and cracked or clipped
    2 D1 D1.1 PART-01 is fouling and cracked or clipped
    3 D1 D1.1 PART-01 is fouling and cracked or clipped
    4 D1 D1.1 PART-01 is fouling and cracked or clipped
    5 D1 D1.1 PART-01 is fouling and cracked or clipped
    6 D1 D1.1 PART-01 is fouling and cracked or clipped
    7 D1 D1.1 PART-01 is fouling and cracked or clipped
    8 D1 D1.1 PART-01 is fouling and cracked or clipped
    9 D1 D1.1 PART-01 is fouling and cracked or clipped
    10 D1 D1.1 PART-01 is fouling and cracked or clipped
    11 D1 D1.1 PART-01 is fouling and cracked or clipped
    12 D1 D1.1 PART-01 is fouling and cracked or clipped
    13 D1 D1.1 PART-01 is fouling and cracked or clipped
    14 D1 D1.1 PART-01 is fouling and cracked or clipped
    15 D1 D1.1 PART-01 is fouling and cracked or clipped
    16 D1 D1.1 PART-01 is fouling and cracked or clipped
    17 D1 D1.1 PART-01 is fouling and cracked or clipped
    18 D1 D1.1 PART-01 is fouling and cracked or clipped
    19 D1 D1.1 PART-01 is fouling and cracked or clipped
    20 D1 D1.1 PART-01 is fouling and cracked or clipped
    21 D1 D1.2 PART-02 is broken or damaged
3

创建自定义的 Java 搜寻器插件

本部分介绍自定义搜寻器插件,以及使用 IBM Watson Explorer Content Analytics Miner 概念视图,获取统计上正确的洞察。

IBM Watson Explorer Content Analytics 的搜寻器插件可根据数据源分为两类:

A 类数据源 B 类数据源
Content Integrator
  • Windows 文件系统代理 搜寻器
Content Manager
  • BoardReader 搜寻器
DB2
  • Case Manager 搜寻器
JDBC 数据库
  • Exchange Server 搜寻器
Notes
  • FileNet P8 搜寻器
Quickr for Domino SharePoint 搜寻器
种子列表
文件系统

在这一过程中,我使用 JDBC 数据库,它属于 A 类数据源。我可以创建 Java 类,以编程方式更新安全令牌的值、元数据以及 A 类数据源的文档内容。

下列代码用于 Java 插件。在这之后,即是部署流程的描述和代码逻辑的分析。PluginLogger 记录了与搜寻器相关的问题。

自定义 Java 搜寻器插件

package com.ibm.es.crawler.dbplugins; 
import java.util.List; 
import java.util.Map; 
import java.util.stream.Collectors; 
import com.ibm.es.crawler.plugin.AbstractCrawlerPlugin; 
import com.ibm.es.crawler.plugin.CrawledData; 
import com.ibm.es.crawler.plugin.CrawlerPluginException; 
import com.ibm.es.crawler.plugin.FieldMetadata; 
import com.ibm.es.crawler.plugin.logging.PluginLogger; 
public class TutorialDBCrawlerPlugin extends AbstractCrawlerPlugin { 
   /** Logger */ 
   private static final PluginLogger logger; 
   static { 
   PluginLogger.init(PluginLogger.LOGTYPE_OSS,PluginLogger.LOGLEVEL_INFO); 
   logger = PluginLogger.getInstance(); 
   } 
   /** End Logger **/ 
   private static final String INCIDENT_DESCRIPTION = "INCIDENT_DESCRIPTION"; 
   private static final String DIAGNOSIS_DESCRIPTION = "DIAGNOSIS_DESCRIPTION"; 
   private static final String RESOLUTION_DESC = "RESOLUTION_DESC"; 
   private static final String INVESTIGATION_CODE = "INVESTIGATION_CODE"; 
   private static final String RESOLUTION_CODE = "RESOLUTION_CODE"; 
   private static final String CLOSURE_CODE = "CLOSURE_CODE"; 
   public TutorialDBCrawlerPlugin() { 
      super(); 
   } 
   public void init() throws CrawlerPluginException { 
   } 
   public boolean isMetadataUsed() { 
      return true; 
   } 
   public void term() throws CrawlerPluginException { 
      return; 
   } 
   public CrawledData updateDocument(CrawledData crawledData)  
         throws CrawlerPluginException { 
   // print metadata 
      List<FieldMetadata> metadataList = crawledData.getMetadataList(); 
      if (!(metadataList == null)) { 
          /*for (int i = 0; i < metadataList.size(); i++) {             
              //logger.warn(metadataList.get(i).getFieldName() +  
           //         ": " + metadataList.get(i).getValue()); 
          }*/ 
      } else 
          logger.error("metadatalist is empty"); 
      crawledData.setMetadataList(setIndexContext(metadata List)); 
      return crawledData; 
   } 
   public boolean isContentUsed() { 
      return true; >
   } 
   public  List<FieldMetadata> setIndexContext(List<FieldMetadata> metaList){ 
      Map<String, String> OneRow = metaList.stream().collect( 
               Collectors.toMap(FieldMetadata::getFieldName,  
                      FieldMetadata::getValue));       
      String closureCode =  
              getLeafValue(OneRow.get(CLOSURE_CODE)); 
      String resolutionCode =  
              getLeafValue(OneRow.get(RESOLUTION_CODE)); 
      String investigationCode =  
              getLeafValue(OneRow.get(INVESTIGATION_CODE)); 
      logger.warn("Modified Map Details :"+ OneRow.toString()); 
      List<FieldMetadata> returnMetaList = metaList;  
      for (int i = 0; i < returnMetaList.size(); i++) { 
          if (returnMetaList.get(i).getFieldName(). 
                  contentEquals(INCIDENT_DESCRIPTION)) { 
              if(closureCode.equals("1") &&  
                      resolutionCode.equals("1") &&  
                      investigationCode.equals("1")){ 
              } 
              else 
                  returnMetaList.get(i).setValue(""); 
          } 
          if (returnMetaList.get(i).getFieldName(). 
                  contentEquals(DIAGNOSIS_DESCRIPTION)) { 
              if(closureCode.equals("1") &&  
                      resolutionCode.equals("1")){ 
              } 
              else 
                  returnMetaList.get(i).setValue("");    
          } 
          if (returnMetaList.get(i).getFieldName(). 
                  contentEquals(RESOLUTION_DESC)) { 
              if(closureCode.equals("1")){ 
              } 
              else 
                  returnMetaList.get(i).setValue("");   
          }           
      }    
      return returnMetaList; 
   } 
   public String getLeafValue(String keyField){ 
       String hierarchy[] =  keyField.split("\\."); 
   return hierarchy[hierarchy.length-1]; 
   } 
}

自定义搜寻器插件方法描述

要为 A 类数据源创建 Java 类,以作为搜寻器插件与内容相关函数一起使用,请扩展 com.ibm.es.crawler.plugin.AbstractCrawlerPlugin 并实现下列方法:

  • init()
  • isMetadataUsed()
  • isContentUsed()
  • activate()
  • deactivate()
  • term()
  • updateDocument()

AbstractCrawlerPlugin 类是一个抽象类。实现 initactivatedeactivateterm 方法不会执行任何操作。实现 isMetadataUsed 方法和 isContentUsed 方法在缺省情况下会返回 false。updateDocument 方法是一种抽象方法,所以必须实现。

对于名称解析,请使用 ES_INSTALL_ROOT/lib/dscrawler.jar 文件。

在搜寻器会话开始时,插件流程会出现分支。使用缺省构造函数实例化 AbstractCrawlerPlugin 对象,并且调用 initisMetadataUsedisContentUsed 方法一次。在搜寻器会话期间,搜寻器开始抓取时会调用 activate 方法,而在搜寻器完成抓取时则会调用 deactivate 方法。在搜寻器会话结束时,会调用 term 方法并销毁对象。如果启用搜寻器调度程序,那么在安排开始抓取时就会调用 activate 方法,而在安排结束抓取时则会调用 deactivate 方法。因为在启用搜寻器调度程序时,单个搜寻器会话将持续运行,所以不会调用 term 方法来销毁对象。

自定义搜寻器插件的编译和部署

  1. 编译已实现的代码,并为其创建 JAR 文件。在编译时,将 ES_INSTALL_ROOT/lib/dscrawler.jar 文件添加到类路径中。
  2. 在管理控制台中,执行以下步骤:
    1. 编辑适当的集合。
    2. 选择 Crawl 页面,编辑使用自定义 Java 类的搜寻器的属性。
    3. 指定下列项:
      • 实现的 Java 类的标准类名:例如,com.ibm.es.crawler.dbplugins.TutorialDBCrawlerPlugin
      • 将 JAR 文件名称包含在路径声明中:例如,F:\DevWTutorial\Plugins\DBCrawlerPlugin\TutorialDBCrawlerPlugin.jar。
    4. 在 Crawl 页面上,单击 Monitor。然后单击 StopStart,重新启动编辑过的搜寻器的会话。
    5. 单击 Details,开始完整的抓取。

除了从 AbstractCrawlerPlugin 抽象类扩展的方法,还实现了以下两种关键方法:getLeafValue()setIndexContext()。这些方法可以消除集合索引中的重复。

  • 使用关键字段值从 setIndexContext 调用 getLeafValue () 方法,该方法会返回叶级别的值,采用“.”作为分隔符。例如,如果将 D1.1.1.1.1 作为参数传递,那么会返回 1
  • 使用 FieldMetadata (com.ibm.es.crawler.plugin.FieldMetadata) 列表中的参数从 updateDocument() 方法调用 setIndexContext() 方法。这种方法基于给定逻辑处理 FieldMetadata 列表,返回去重的 FieldMetadata,最后将其嵌入到抓取数据中,并供搜寻器流程使用。

在代码准备就绪之后,就可以按照本部分过程所述进行部署(子步骤 1 到 3)。有关更多信息,请参阅 IBM Knowledge Center 中的“Creating a crawler plug-in for Type A data sources”。

上下文视图

上下文视图是 IBM Watson Explorer 特有的功能。您可以通过对可分析的字段进行分组,在特定上下文中探索数据的内容。例如,如果将数据配置为分析组合在一起或使用单独上下文视图的“事件描述和解决描述”,用户可以将结果限制为文档中与这些上下文匹配的某些部分。

创建上下文视图

  1. 可通过首先选择 Configure parse and index setting,在管理控制台中创建上下文视图。
    图 8. Configure parse and index setting 上下文视图选项
    Configure parse and index setting
  2. 选择 Contextual views,然后根据业务要求创建文本内容的上下文视图。下表中列出了为此示例创建的上下文视图。
    上下文字段 上下文视图名称
    INCIDENT_DESCRIPTION Incident Details
    DIAGNOSIS_DESCRIPTION
    Investigation
    INCIDENT_DESCRIPTION & DIAGNOSIS_DESCRIPTION Incident & Investigation
    RESOLUTION_DESC
    Resolution
    CLOSING_COMMENT
    Final Disposition
    RESOLUTION_DESC & CLOSING_COMMENT Resolution & Final Disposition

    图 9 显示了为此教程创建的上下文视图列表,如上表所示。

    图 9. 上下文视图详细信息
    Contextual view details

    点击查看大图

现在,业务用户能够根据分层数据和构面层次结构上下文得出洞察,以下部分将会对此进行说明。

使用 IBM Watson Explorer Content Analytics Miner 进行上下文分析

IBM Watson Explorer Content Analytics Miner 中的下列输出结果是根据用户选择的上下文,给出的缺陷类型出现次数的指示性样本。它们显示了确切的出现频率。

Incident Details

图 10 显示了选中 Incident Details 上下文视图时,IBM Content Analytics Miner 的输出结果。该图显示关键字 fouling 在非结构化字段 INCIDENT_DESCRIPTION 中出现两次,还显示了其他关键字的出现频率。也可以查看配置的其他上下文视图的输出结果。

图 10. IBM Content Analytics Miner 中的 Incident Details 上下文视图
Incident details

点击查看大图

Resolution & Final Disposition

在图 11 中,您会看到 fouling 关键字出现在 24 个字段中,其中包括 RESOLUTION_DESC 和 CLOSING_COMMENT 字段。因为 CLOSING_COMMENT 是层次结构中的叶级别,所以它是唯一的,而且出现频率很高。

图 11. IBM Content Analytics Miner 中的 Resolution & Final Disposition 上下文视图
Final disposition

点击查看大图

用例分析

现在,我们考虑一种用例场景:业务用户希望分析关键字的出现频率,希望找出与从不同层级维度得出的构面之间的关系。

假设您看到在 Resolution & Final Disposition 上下文视图的上下文中,与其他缺陷类型相比,fouling 关键字的出现频率不正常。您希望更详细地调查这个问题,分析在这些事件中引用到的“reworking”和“fouling”组件的关系。您将执行以下步骤。

  1. fouling 关键字添加到查询中,从而在 Resolution & Final Disposition 上下文中,将分析范围精简为 150 个结果中的 24 个结果。
    ((*:*)AND (keyword::/"Explore"/"Defect Type(s)"/"fouling")) IN resolution_final_disposition
  2. 在所有事件中,D2 和 D1 事件在 Resolution and Closing Comment 中出现 fouling 关键字的频率最高。用户将这两个事件代码添加到查询中,从而将结果范围进一步缩小到 16 个。
    图 12. 基于条件的事件频率
    Frequency of Incident based on the criteria
    (((*:*)AND (keyword::/"Explore"/"Defect Type(s)"/"fouling")) IN resolution_final_disposition) AND (keyword::/"Facet Hierarchy"/"Incident Header"/"Incident Code"/"D2" OR keyword::/"Facet Hierarchy"/"Incident Header"/"Incident Code"/"D1")
  3. 现在,将自由格式的文本“rework and use”添加到查询中,进一步优化搜索范围,检索五个特定的记录。(除了自由格式文本,还可以使用 annotation 一词来检索不同的书写方式:例如,“rework and reinspect”、“rwrk & use”和“rework & re-use”。)以下是最终的查询语法:
    ((("rework and use") AND (keyword::/"Explore"/"Defect Type(s)"/"fouling")) IN resolution_final_disposition) AND (keyword::/"Facet Hierarchy"/"Incident Header"/"Incident Code"/"D2" OR keyword::/"Facet Hierarchy"/"Incident Header"/"Incident Code"/"D1")

现在,您可以发现从构面树中选择不同构面时的趋势。图 13 显示了根据以上得出的文本分析查询,IBM Watson Explorer Content Analytics Miner 仪表板中有关 Affected Product 与 Affected Part(s) 的趋势图。

图 13. IBM Watson Content Analytics Miner 仪表板中的最终输出结果

您可以看到在 D1 和 D2 事件中受影响的六个不同部件中,part-04、part-13 和 part-01 在此用例场景中受到影响。

结束语

本教程介绍了一种策略,用于在内容分析上下文中分析 IBM Watson Explorer 中的分层数据结构,同时保留维度模型的层次结构或粒度。本教程中使用的数据集是现实场景的典型示例,但不是非常大,也不是很复杂。在真实的业务场景中,这种分析可将内容分析与维度分析合而为一,帮助实现机器协助的决策制定、自动化以及业务优化。

此类场景常见于下列领域:

  • 事件管理
  • 案例管理
  • 内容管理
  • 质量管理系统
  • 企业信息管理

此处介绍的概念可用于分析数据不一致性,主要用于源系统、自动化数据概要分析、大数据分析、数据治理以及数据本体创建这些方面。

利用这些概念,您就可以克服数据重复问题,(单独或合并)分析每个层级的非结构化文本内容。由此,就可以为业务用户提供相关洞察。