Como se describe en los artículos anteriores de esta serie, InfoSphere Warehouse brinda herramientas para el análisis de texto basado en expresiones comunes y diccionarios. Probablemente, éstos sean los dos enfoques más comunes para extraer información a partir de texto, pero en muchos casos estos dos enfoques no alcanzan.
El análisis de texto de InfoSphere Warehouse se genera en el marco UIMA, un marco abierto que permite el desarrollo de aplicaciones analíticas extensibles. UIMA soporta el desarrollo de aplicaciones analíticas de diversos módulos. Por ejemplo, un módulo podría extraer o anotar una persona a partir de texto, en tanto otro trata de encontrar relaciones entre tales anotaciones. La conexión, los datos de entrada y de salida los define UIMA mediante un sistema de tipo jerárquico. El marco UIMA está disponible en diferentes lenguajes de programación, dentro de los cuales Java®es el más usado comúnmente. Con InfoSphere Warehouse, usted puede importar Java Analysis Engines (motores de análisis) basados en UIMA para ampliar considerablemente sus capacidades de análisis de texto. Estos anotadores personalizados se pueden usar en flujos analíticos con el operador TextAnalyzer. Al igual que los operadores Dictionary y Regular Expression, las entidades encontradas se mapean con columnas de tablas de bases de datos y luego se pueden procesar y usar como cualquier otra información estructurada.
Este artículo describe los conceptos básicos del marco UIMA y le brinda la información teórica y práctica necesaria para crear su propio motor de análisis UIMA y usarlo en InfoSphere Warehouse. Ello incluye una explicación de cómo configurar el entorno de desarrollo del marco UIMA basado en Eclipse y de cómo escribir su propio sistema de tipo simple y descripción de anotador como interfaces del motor de análisis. Por lo tanto, este artículo muestra cómo escribir el código Java que realiza el análisis real de los documentos. Una vez finalizado el desarrollo, conocerá cómo exportar su código como archivo Processing Engine ARchive (PEAR), un estándar UIMA para empaquetar e implementar anotadores. Por último, el artículo explica cómo importar el archivo PEAR a InfoSphere Warehouse y usarlo en un flujo analítico para extraer información a partir de texto. Este ciclo completo se explica mediante un simple ejemplo que analiza texto y devuelve todas las palabras que contienen cinco vocales o más.
Escribir anotadores personalizados es una manera útil de resolver un problema de negocios específico. Asimismo, la página principal de Apache UIMA y algunas universidades tienen repositorios de motores de análisis disponibles en forma gratuita que ofrecen soluciones existentes que se pueden usar en InfoSphere Warehouse. También hay muchas compañías que venden soluciones existentes. De manera que al usar el enfoque estándar abierto de UIMA, usted tiene la ventaja de poder potenciar el trabajo que otros hayan hecho para resolver problemas similares.
Algunas de las áreas activas y más interesantes en relación con el análisis de texto son la investigación científica y la detección de emociones. En materia de detección de emociones, el motor de análisis trata de determinar qué tan positivo o negativo se siente alguien acerca de algún producto o servicio determinado. Un ejemplo práctico de detección de emociones sería monitorear foros, blogs y revisar sitios Web después del lanzamiento de un producto para determinar la reacción del público. También se pueden monitorear recursos similares para medir de qué manera una nueva campaña de marketing cambió la opinión de la gente acerca de un producto. Si bien estos tipos de aplicaciones son muy interesantes, representan sólo un subconjunto de los motores de análisis disponibles que pueden usarse en InfoSphere Warehouse para extraer información a partir de datos no estructurados de su almacén de datos.
Como se describe en la sección anterior, InfoSphere Warehousing ofrece características de análisis de texto basadas en Unstructured Information Management Architecture (UIMA). Se pueden usar funciones de análisis de texto incorporadas, principalmente extracción de entidades nombradas basadas en expresiones comunes y diccionarios, según se explicó en los artículos anteriores de esta serie. También se pueden usar componentes de análisis de texto compatibles con Apache UIMA personalizados para implementar soluciones de análisis de texto más avanzadas. Los componentes están disponibles a través de IBM service engagements (contratos de servicios), IBM Research, otras compañías y universidades. También los puede crear usted mismo usando UIMA SDK.
UIMA es una arquitectura de componentes y una implementación de marco de software para el análisis de contenido no estructurado, como texto, video y audio. El objetivo de este marco es tener una plataforma común para análisis no estructurado que pueda proporcionar componentes de análisis reutilizables que reduzcan la duplicación de los esfuerzos de desarrollo.
La arquitectura de UIMA le permite conectar componentes de análisis personalizados y combinarlos con otros. Sus aplicaciones UIMA no necesitan conocer los detalles de cómo trabajan los componentes de análisis en forma conjunta para crear los resultados. Las tareas de integrar e instrumentar los diversos componentes de análisis las administra el marco UIMA.
Una aplicación UIMA puede analizar texto plano e identificar entidades, como personas, lugares y organizaciones, o puede identificar relaciones, como “trabaja para” o “ubicado en”. Las aplicaciones, por lo general, se descomponen en componentes. Por ejemplo "language identification" => "language specific segmentation" => "sentence boundary detection" => "entity detection (nombres de personas/lugares, etc.)".
Tal vez haya dependencias entre componentes. Por ejemplo, se debe realizar una “language specific segmentation” (segmentación específica de lenguaje) antes de iniciar la “sentence boundary detection” (detección de límites de oración) para este lenguaje. Cada componente es independiente y se puede combinar con otros componentes. Cada componente, escrito en Java o C++, implementa interfaces definidas por el marco y brinda metadatos autodescriptivos a través de archivos descriptores XML. El marco UIMA administra los componentes y el flujo de datos entre ellos.
Motores de análisis, anotadores y Estructura de Análisis Común (CAS)
Motores de análisis son los bloques de creación centrales en UIMA. Un motor de análisis contiene uno o más anotadores u otros motores de análisis. Cada anotador implementa una función de análisis de texto específica. Este empaquetamiento recurrente le permite construir motores de análisis complejos a partir de motores simples. Cada anotador almacena sus resultados en estructuras de características tipificadas, que son sencillamente estructuras de datos que tienen un tipo y un conjunto de pares (atributo, valor).
Unaanotaciónes un tipo particular de estructura de característica que se
adjunta a una región del artefacto que se analiza. Por ejemplo, las anotaciones
pueden adjuntarse a un tramo de texto en un documento. En este caso, las anotaciones
contienen una posición inicial y una posición final específicas dentro del
documento. Esto significa que se prestan con facilidad a la especificación de los
resultados de extracción de información. Por ejemplo, en el siguiente texto una
anotación Company abarcaría las posiciones 19 a
21:UIMA comenzó como una iniciativa de IBM, pero
pasó a ser de código abierto en 2008
Todas las estructuras de
características, entre ellas, las anotaciones, se representan en la Estructura de
Análisis Común (CAS) de UIMA, que es la estructura de datos principal a
través de la cual se comunican todos los componentes UIMA.
La figura 1 muestra un motor de análisis que contiene anotadores para reconocimiento de entidades nombradas, análisis gramatical y detección de relaciones. Observe que el Relationship Annotator puede detectar relaciones sin considerar el texto del documento real, pero analizando conceptos y anotaciones gramaticales existentes en la Estructura de Análisis Común.
Figura 1. Motor de análisis de texto que contiene anotadores para análisis gramatical, detección de entidades nombradas y detección de relaciones.
El sistema de tipo UIMA define los diversos tipos de objetos que pueden
encontrarse en los documentos y que pueden extraerse mediante motores de análisis.
Por ejemplo, Person podría ser un tipo.
Entre los tipos se encuentran las características. Por ejemplo, Age y Occupation podrían definirse
como características del tipo de Person. Otros ejemplos de
tipos podrían ser Organization, Company, Money, Product o NounPhrase.
Los sistemas de tipos son específicos de cada dominio y de cada aplicación. Los tipos
se pueden organizar en taxonomías. Por ejemplo, Company podría definirse como un subtipo de Organization, o NounPhrase podría ser un
subtipo de ParseNode.
Un tipo general y común que se usa generalmente en el análisis de texto para deducir
tipos adicionales es el tipo Annotation, suministrado por
el marco UIMA. Se puede usar el tipo Annotation para
etiquetar regiones en los documentos. El tipo Annotation abarca las características Begin y End. Los valores de estas características delimitan un
tramo. Por ejemplo, en la siguiente cadena de texto (la misma cadena que se analiza
en la figura 1), la anotación Person comienza en la
posición 0 y finaliza en la posición 10:Fred Center es
el CEO de Center Micros
El primer paso para desarrollar un anotador es definir los tipos de CAS Feature
Structure (estructura de características CAS) sobre los que trabaja. Esto se realiza
en un archivo XML llamado Type System Descriptor. UIMA define los tipos
incorporadosTOP, que son la raíz del sistema de tipos
(análogo a Object en Java),Annotation, que se describe
precedentemente y otros. UIMA también define tipos de rango básicos para
características comoBoolean,IntegeryDouble, al igual que matrices de
estos tipos primitivos.
Archivos Processing Engine ARchives (PEAR)
Una vez que haya desarrollado y probado con éxito un motor de análisis, podrá empaquetarlo para su implantación en otra aplicación como componente de análisis (de texto) preconfigurado. El formato de empaquetamiento de anotador en UIMA se denomina PEAR, que significa Processing Engine Archive (archivo de motor de procesamiento). El formato PEAR contiene toda la información necesaria para ejecutar el componente de anotador ajustado. Para conocer más detalles acerca del formato de empaquetamiento PEAR, consulte el Capítulo PEAR Reference de la documentación de referencia de UIMA.
Usando el operador Text Analyzer en InfoSphere Warehouse Design Studio, podrá importar cualquier motor de análisis de texto compatible con Apache UIMA para anotar conceptos en un texto no estructurado. Use el asistente Analysis Engine Import (Importar motor de análisis) para importar estos archivos PEAR preconfigurados. Si se creó un motor de análisis usando una versión UIMA anterior, como IBM UIMA, deberá migrarse primero tal motor. El proceso de migración se describe en la próxima sección.
Como se mencionó en las secciones anteriores, pueden importarse motores de análisis UIMA preconfigurados (archivos PEAR) a InfoSphere Warehouse. Esto le permite ampliar las capacidades de análisis de texto de InfoSphere Warehouse para satisfacer sus requisitos específicos.
Esta sección presenta información general sobre cómo se representan en la base de datos los resultados del análisis de texto generados por los motores de análisis. También explica de qué manera puede usarse InfoSphere Warehouse para importar y ejecutar motores de análisis de texto creados con versiones anteriores de UIMA.
Mapeo de los resultados del análisis con columnas en la base de datos
En InfoSphere Warehouse, el análisis de datos no estructurados exige que los datos
existan en la base de datos como una columna con un tipo de dato de carácter (CHAR, VARCHAR o CLOB). UIMA administra el contenido de columna de texto determinado de
cada fila de tabla como un documento de texto.
Los resultados de análisis generados, derivados del tipo de Annotation, se almacenan en la CAS. Se usa un CAS Consumer para escribir
los contenidos de los resultados seleccionados en la base de datos usando JDBC. Cada
característica seleccionada genera una nueva columna.
A fin de especificar cuáles son los resultados de análisis que deben escribirse en la
base de datos, se configuran las propiedades del operador Text Analyzer, o más
precisamente, la pestaña Analysis Results (Resultados de análisis). Use esta pestaña
para especificar qué tipo de anotación contiene el resultado del análisis (por
ejemplo, el tipo Company).
Como se describió anteriormente, cada anotación comprende características
incorporadas, como Begin y End, y
también puede tener características personalizadas, como Full_Legal_Name o CEOpara el tipo Company. El tipo de anotación seleccionado especifica los
resultados que son de su interés, y las características seleccionadas de este tipo
de anotación especifican la parte detallada de interés. Cada característica genera
una columna en la base de datos.
La tabla de base de datos resultante no necesita contener columnas creadas sólo a partir del análisis, también puede contener columnas de las tablas de datos de entrada. Esto le permitiría, por ejemplo, relacionar posteriormente los resultados con el texto original.
Este proceso se resume en la figura 2. Como se describe en la figura, el CAS Consumer
se configura en la pestaña Analysis Result del operador Text Analyzer para escribir
el contenido de Begin, End, y
características Full_Legal_Name en la tabla
resultante.
Figura 2. Flujo UIMA para analizar una columna de texto y escribir los resultados del análisis en una tabla
Pueden ocurrir posibles problemas que no son fáciles de identificar si los resultados
del anotador UIMA son mayores que la columna de resultado con la cual se mapean. Por
ejemplo, si la columna tiene un tipo de VARCHAR(256), los
resultados que superan los 256 caracteres generan un flujo erróneo y un error SQL.
Un modo sencillo de identificar este problema es usar provisoriamente tipos CLOB, que no tienen restricciones de tamaño, como las
columnas de destino. Si esto resuelve el problema, su anotador tal vez devuelva
valores inesperadamente extensos. Quizá sea útil determinar en el código de anotador
que no podrá excederse una longitud específica en las anotaciones creadas. Ocurrirá
otro problema si no hay un espacio de tabla DB2 de determinada longitud
disponible.
Migración de motores de análisis basados en IBM UIMA a Apache
La versión InfoSphere Warehouse V9.5.1 y las posteriores no soportan componentes de análisis de texto empaquetados basados en IBM UIMA. Sin embargo, podrán usarse tales componentes en esas versiones siguiendo uno de los procedimientos descriptos a continuación:
- Use la herramienta de conversión IBM UIMA a Apache UIMA para migrar el código fuente de los archivos PEAR. Para más información, vea la sección Migración de IBM UIMA a Apache UIMA en el sitio Web de UIMA.
- Use el IBM UIMA Adapter Wrapper para Apache UIMA para ejecutar su archivo PEAR basado en IBM UIMA en un entorno de tiempo de ejecución basado en Apache UIMA. Puede usar el paquete IBM UIMA Adapter para anotadores basados en IBM UIMA cuando no esté disponible el código fuente que pueda transformar con la herramienta de conversión IBM UIMA a Apache UIMA. Para procesar estos anotadores IBM UIMA, use el paquete IBM UIMA Adapter en el nuevo tiempo de ejecución Apache UIMA. Para más información, visite la Página de UIMA en alphaWorks.
InfoSphere Warehouse reenvía mensajes de error que ocurren en su código de anotador hacia el seguimiento del flujo analítico. Si se activa el seguimiento de contenidos para un proceso, un flujo de datos o un flujo de minería, los registros de nivel CONFIG de UIMA y superiores se rutean hacia el registro de InfoSphere Warehousing.
En algunas ocasiones tal vez sea necesario depurar los problemas de su anotador recuperando los mensajes de registro UIMA de un nivel más preciso. Esto comprende todos los problemas que ocurren en el código UIMA de su anotador y los problemas que ocurren en el código de anotador de un anotador personalizado. Vea la documentación InfoSphereWarehouse para conocer instrucciones sobre cómo ver los registros UIMA de un flujo de datos o minería y cómo cambiar el nivel de seguimiento UIMA para obtener mayor información.
Este ejemplo muestra de qué manera escribir un simple motor de análisis UIMA usando el SDK UIMA y luego integrarlo en un flujo de análisis de texto en InfoSphere Warehouse Design Studio. El motor de análisis separa el texto del documento en palabras (previendo texto separado por espacios en blanco) y crea una anotación para todas las palabras que contengan más de cuatro vocales. Si bien no hay casos de uso de negocios para semejante motor de análisis, ofrece una manera sencilla de demostrar lo fácil que resulta crear un motor de análisis UIMA.
El ejemplo usa las Eclipse Tooling para UIMA, suministradas en Apache.org, para crear el motor de análisis. Se optó por esta opción porque brinda herramientas y editores de fácil utilización para el desarrollo de motores de análisis.
Una vez que está listo el motor de análisis, se lo empaqueta como archivo PEAR, que es el formato que InfoSphere Warehouse espera para la importación del motor de análisis. Luego se importa el motor de análisis en Design Studio y se crea un flujo usándolo en documentos de texto de muestra ubicados en la tabla de la base de datos. Para estos documentos de texto de muestra, se usa la tabla CIA.FACTBOOKS de la base de datos DWESAMP que se envía con InfoSphere Warehouse.
Para instalar UIMA, descargue el UIMA Java Framework & SDK (versión 2.2.2) de la página de descarga UIMA y descárguelo a su sistema de archivos. También deberá instalar los complementos UIMA Eclipse que se describen en estas instrucciones paso a paso en la documentación de configuración Apache UIMA y SDK.
Creación y prueba del motor de análisis UIMA
Un motor de análisis UIMA está compuesto por una clase Java para los anotadores contenidos y los archivos XML adicionales. La clase Java amplía una implementación de anotadores básicos provistos por el UIMA SDK. Los archivos XML adicionales describen los tipos de anotaciones que se crean (o consumen) mediante el anotador junto con otra información adicional. Los complementos UIMA Eclipse simplifican la creación de los archivos XML. Aplique los siguientes pasos para crear un motor de análisis en su entorno Eclipse.
Crear un proyecto Java de naturaleza UIMA
- En su entorno Eclipse, seleccione File (Archivo) -> New (Nuevo) -> JavaProject.
- Ingrese un nombre de proyecto. Por ejemplo,
com.ibm.developerworks.textanalysis.partIII. - A continuación, agregue la naturaleza UIMA al proyecto. Esto genera una estructura de carpeta específica para el proyecto y permite realizar otras acciones sobre ella. Para agregar la naturaleza, haga clic sobre el proyecto con el botón derecho y seleccione Add UIMA Nature (Agregar naturaleza UIMA). En los siguientes pasos, sólo se utilizará la carpeta de descripción (desc) que se cree.
- Por último, debe agregar las bibliotecas UIMA Java a la ruta de acceso del proyecto. Para hacerlo, haga clic sobre el proyecto con el botón derecho y seleccione Build Path (Ruta de acceso) -> Add External Archives (Agregar archivos externos). Incluya todos los archivos jar de la carpeta lib de su paquete UIMA extraído.
Creación del sistema de tipos
El sistema de tipos contiene información sobre tipos de anotaciones y sus
características. El anotador de muestra que usted está construyendo, crea
anotaciones para palabras con una cantidad mínima de vocales, por lo tanto el
sistema de tipos debería contener un tipo VowelCountAnnotation. Una característica de este tipo debería ser la
cantidad de vocales que contiene la palabra.
Para crear el sistema de tipos, siga estos pasos:
- Haga clic con el botón derecho en la carpeta de descripción (desc) de su proyecto y seleccione New -> Other (Otro)....
- Seleccione UIMA -> Type System Descriptor File (Archivo descriptor
del sistema de tipos) e ingrese
VowelCountTypeSystem.xmlcomo nombre de archivo. - Vaya a la pestaña Type System (Sistema de tipos) en el extremo inferior del editor.
- Haga clic en Add Type (Agregar tipo) e ingrese
com.ibm.developerworks.VowelCountAnnotationcomo nombre del tipo. Este tipo se hereda del tipo deAnnotation. - Seleccione el tipo
VowelCountAnnotationy haga clic en Add (Agregar)... para agregar la característica correspondiente a la cantidad de vocales. IngresenumberVowelscomo nombre de la característica. - Haga clic en Browse (Navegar) y seleccione
uima.cas.Integercomo el tipo de rango para la característica. La Figura 3 muestra el sistema de tipos completo.
Figura 3. Sistema de tipos
- Guarde el sistema de tipos. Observe que el marco UIMA ya ha generado las clases
Java
VowelCountAnnotation_Type.javayVowelCountAnnotation.javaen el paquetecom.ibm.developerworksde su carpeta de origen. Usted usará estas clases, en el código de anotador, en el paso siguiente. Si las clases Java no están generadas, haga clic en JCasGen en el editor de sistema de tipos.
Implantación de clase Java para el anotador
La implantación del anotador radica en una clase Java que amplía la implantación
básica para anotador denominada JCasAnnotator_ImplBase que
es suministrada por el marco UIMA.
- Haga clic con el botón derecho en el paquete com.ibm.developerworks y seleccione New-> Class (Clase).
- Seleccione
VowelCountercomo nombre de clase yorg.apache.uima.analysis_component.JCasAnnotator_ImplBasecomo superclase. - Para este anotador simple, usted sólo necesita sobrescribir el método de
process, el cual recibe una clase Java JCAS— para la Estructura de Análisis Común. Este objeto contiene el texto del documento junto con meta información sobre el texto, como lenguaje del documento. También contiene las anotaciones que se crean durante la ejecución del análisis. Por ejemplo, si usted está ejecutando múltiples anotadores en una fila, el anotador puede acceder a las anotaciones que se crearon mediante la ejecución previa de los anotadores. El anotador usado para este ejercicio no lee anotación alguna; sólo crea las anotacionesVowelCountAnnotation.
El Listado 1 contiene el conjunto de códigos completo para la clase VowelCounter. Observe el método de process. Primero lee el texto del documento con getDocumentText(). Luego reemplaza cortes de línea, subrayado y guiones
por espacios en blanco. Esto se debe a que el bucle siguiente separa el texto en
palabras por espacios en blanco. Un verdadero análisis lingüístico obviamente será
más sofisticado, pero a los fines demostrativos este enfoque simple es
suficiente.
El método getNumberVowels() cuenta la cantidad de vocales
que hay en cada palabra. Si la palabra contiene más de cuatro vocales, se crea una
anotación. El código simplemente usa la clase VowelCountAnnotation que se creó automáticamente con el sistema de tipos
junto a captadores y establecedores para la característica numberVowels y las características predeterminadas para el Begin y End de la anotación. Por
último, annotation.addToIndexes() agrega la anotación
al índice de anotaciones de Estructura de Análisis Común.
Listado 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;
}
} |
Creación del archivo descriptor
Para completar el motor de análisis, se necesita crear un archivo descriptor que vincule la clase Java y el sistema de tipos y que contenga otras opciones de configuración. Para crear el descriptor, siga estos pasos:
- Haga clic con el botón derecho en la carpeta de descripción (desc) de su proyecto y seleccione New-> Other (Otro)....
- Seleccione UIMA-> Analysis Engine Descriptor File (Archivo
descriptor de motor de análisis) e ingrese
VowelCounter.xmlcomo nombre de archivo. - Vaya a la pestaña Overview (General) del editor y seleccione al archivo de clase
Java
VowelCounter. - En la pestaña Type System (Sistema de tipos) en la sección Imported Type Systems
(Sistemas de tipo importado), haga clic en Add para importar su sistema de
tipos
VowelCountTypeSystem.xmlpor ubicación. - Para definir qué clase de anotaciones son de salida del anotador, vaya a la pestaña Capabilities (Capacidades) y haga clic en Add Type (Agregar tipo).
- En la fila para
VowelCountAnnotation, haga clic en la columna Output (Salida) para declarar este tipo deAnnotationcomo el tipo de salida del anotador, según se muestra en la Figura 4.
Figura 4. La pestaña Capabilities
- Guarde el archivo descriptor.
Pruebas del anotador
Durante el desarrollo del anotador, quizás usted desee probarlo con algún texto de muestra, puede hacerlo fácilmente con el Document Analyzer (Analizador de documentos) que es suministrado por UIMA JDK. Para ejecutar el analizador, siga estos pasos:
- Haga clic con el botón derecho en el proyecto Java y seleccione Run As (Ejecutar como)-> Java Application (Aplicación Java).
- Seleccione
org.apache.uima.tools.docanalyzer.DocumentAnalyzercomo aplicación. - En el diálogo, una Location (Ubicación) del Descriptor XML de motor de análisis
con su archivo descriptor
VowelCounter.xmly haga clic en Interactive (Interactivo). - Escriba algún texto de muestra en el campo de texto y haga clic en Analyze
(Analizar). La Figura 5 muestra un ejemplo de cómo aparecen las
anotaciones en el analizador de documentos.
Figura 5. Anotaciones en el analizador de documentos
Exportación del motor de análisis
Para usar el motor de análisis en InfoSphere Warehouse Design Studio, siga estos pasos para agruparlo como un archivo PEAR:
- Haga clic con el botón derecho en el proyecto Java y seleccione Generate PEAR file (Generar archivo PEAR).
- En el asistente, una Component Descriptor (Descriptor de componente) con su
archivo descriptor
VowelCounter.xmly haga clic en Next (Siguiente) dos veces. - En la página del archivo PEAR, ingrese la ruta en donde debería guardarse el
archivo PEAR. Por ejemplo,
c:\VowelCounter.pear. - Haga clic en Finish (Finalizar). Ahora el motor de análisis ya está listo para ser importado y usado en Design Studio.
Importación y uso del motor de análisis en InfoSphere Warehouse Design Studio
Usted puede importar motores de análisis que estén en el formato de archivo PEAR a un proyecto de Data Warehousing y usarlo en un flujo de análisis con el operador Text Analyzer (Analizador de textos).
Creación de un proyecto de Data Warehousing en Design Studio
- Del menú de Design Studio, seleccione File -> New -> Data Warehouse Project (Proyecto de almacenamiento de datos).
- Ingrese un nombre de proyecto en el asistente.
- Haga clic en Finish.
Importación del motor de análisis
- Haga clic con el botón derecho en la carpeta Analysis Engines (Motores de análisis) (debajo de Text Analysis [Análisis de textos]) en su proyecto y seleccione New -> Analysis Engine.
- Una Analysis Engine con el archivo PEAR que exportó previamente al sistema de archivos.
- Haga clic en Finish.
Creación del flujo de datos
- Haga clic con el botón derecho en la carpeta Data Flows (Flujos de datos) en su proyecto de almacenamiento de datos y seleccione New -> Data Flow.
- En el asistente, ingrese un nombre para el flujo de datos. Por ejemplo,
Count Vowels. - Especifique que desea trabajar contra una base de datos y haga clic en Next.
- Seleccione la base de datos DWESAMP y haga clic en Finish.
Definición del flujo de datos
Los siguientes pasos describen cómo definir el flujo de datos de manera que lea el texto de la tabla CIA.FACTBOOK en la base de datos de muestra DWESAMP, ejecute el motor de análisis en el texto y escriba las anotaciones en una nueva tabla de base de datos.
La tabla de origen es leída por un operador de Table Source (Origen de tabla). El motor de análisis se ejecuta con un operador de Text Analyzer (Analizador de textos). El último operador en el flujo es un operador de Table Target (Destino de tabla) en donde usted desea escribir las anotaciones.
- Desde la sección Sources (Origen) y Targets (Destinos) de la paleta, seleccione un operador de Table Source y arrástrelo al lienzo del editor.
- En el diálogo de búsqueda de la tabla de base de datos de origen, expanda el esquema CIA y seleccione la tabla FACTBOOK.
- Haga clic en OK (Aceptar).
- Haga clic en Finish.
- Desde la sección Text Operators (Operadores de textos), arrastre un operador Text Analyzer al lienzo. Debajo del lienzo se abre la pantalla Properties (Propiedades) del operador.
- En el lienzo, use una operación de arrastre para conectar el puerto de salida del operador Source Table con el puerto de entrada del operador Text Analyzer.
- Seleccione el operador Text Analyzer en el lienzo y defina las propiedades en la
pantalla Properties de la siguiente manera:
- En la página Analysis Engine, seleccione la columna de texto de ingreso
TEXT y configure el motor de análisis del motor importado
denominado
VowelCounter. - En la página Analysis Results, seleccione
VowelCountAnnotationcomo tipo de anotación. Usted podrá ver las característicasnumberVowels,Begin, yEndque ya están seleccionadas como columnas de resultado. Design Studio automáticamente agrega una columna para Covered text (Texto cubierto). La columna contiene el texto que cubren las anotaciones desdeBeginaEnd. Esto es simplemente el texto que fue marcado por las anotaciones en el analizador de textos. - En la página de las columnas de Output (Salida), seleccione la columna
COUNTRY (PAÍS) de la lista de columnas disponibles y muévala a la lista
de columnas de salida que aparece a la derecha. Ahora puede relacionar
la anotación con la palabra clave
COUNTRYdel documento de texto en la que se encuentre.
- En la página Analysis Engine, seleccione la columna de texto de ingreso
TEXT y configure el motor de análisis del motor importado
denominado
- Para crear la tabla que contenga las anotaciones, haga clic con el botón derecho en el puerto de salida del operador Text Analyzer y seleccione Create suitable table (Crear tabla apropiada)....
- Ingrese
VOWELCOUNTSpara el nombre de tabla yCIApara el esquema. - Haga clic en Finish.
- Por último, guarde el flujo de datos. Por ejemplo, puede guardar haciendo clic en el área del editor y presionando las teclas Ctrl+S.
El flujo de datos completo se muestra a continuación, en la Figura 6. Usted puede ejecutar el flujo de datos seleccionando DB2 UDB Data Flow (Flujo de datos DB2 UDB) -> Execute (Ejecutar).
Figura 6. Flujo de datos
Usted puede visualizar las anotaciones de muestra haciendo clic con el botón derecho en el operador Table target (Destino de tabla) y seleccionando Sample Contents of the Database Table (Contenidos de muestra de la tabla de base de datos). La Figura 7 muestra las primeras anotaciones que se encontraron para Afganistán.
Figura 7. Anotaciones de muestra
En este artículo ha aprendido cómo desarrollar su motor de análisis UIMA y usarlo en InfoSphere Warehouse. Unstructured Information Management Architecture (UIMA) es una plataforma de software abierta que soporta el desarrollo y la implementación de aplicaciones analíticas. Este artículo describió los conceptos UIMA necesarios para desarrollar un motor de análisis personalizado. Usted ha aprendido cómo configurar el entorno de desarrollo UIMA y cómo crear su propio anotador y usarlo en InfoSphere Warehouse para extraer información estructurada del ingreso de texto. La posibilidad de usar motores de análisis compatibles con UIMA expande enormemente las capacidades analíticas de InfoSphere Warehouse, permite desarrollar motores de análisis personalizados para proyectos que requieren tipos de análisis específicos. También permite usar activos de terceros, gratuitos o comercializados, para realizar análisis sofisticados como, por ejemplo, detección de emociones en sus datos de Warehouse.
Este artículo es el tercero y último de la serie sobre el uso de InfoSphere Warehouse para análisis de textos. El primer artículo explicó la arquitectura del análisis de textos de InfoSphere Warehouse y cómo usar las herramientas integradas para expresiones comunes para extraer información de datos de texto. El segundo artículo ofreció una descripción general del soporte para análisis basado en diccionarios, que le permite construir sus propios diccionarios y usarlos para análisis. El segundo artículo también mostró cómo distribuir fácilmente la información extraída en toda su empresa con las herramientas para creación de informes IBM Cognos. Este último artículo cierra la serie, describiendo cómo escribir sus propios anotadores UIMA personalizados y cómo usarlos en InfoSphere Warehouse.
Como se describió en el primer artículo, la información no estructurada representa una gran parte de la información disponible del negocio en la mayoría de las empresas, información que crece cada vez más rápido. El análisis de texto de InfoSphere Warehouse está construido en base a estándares abiertos como UIMA y brinda herramientas poderosas y enriquecidas que usted puede usar para desbloquear la información contenida en estos datos no estructurados. Esto le permite usar herramientas para la creación de informes de inteligencia empresarial, como Cognos, y así poder distribuir fácilmente la información extraída en toda su empresa.
Aprender
- Para obtener documentación y detalles de producto,
consulte el IBM InfoSphere Warehouse Information Center.
- Aprenda más sobre IBM
Cognos.
Obtener los productos y tecnologías
- Conozca más acerca de UIMA
en el sitio Web de UIMA.
- Encuentre vínculos a
componentes UIMA y motores de análisis a disposición del público en el sitio Apache
UIMA.
- Encuentre componentes UIMA a
disposición del público en el repositorio de componentes
de UIMA de la Universidad de Carnegie Mellon.
- Descargue Text Analysis Perspective for
InfoSphere Warehouse Design Studio para configurar rápida y fácilmente los motores
de análisis que se pueden usar en los operadores de texto.

Stefan Abraham es Software Engineer en el IBM Research & Development Lab en Boeblingen, Alemania. Trabaja en componentes de análisis de textos y en componentes de interfaz de usuario relacionados con minería de datos en InfoSphere Warehouse.


