🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP HANA La búsqueda de textos y el análisis de datos no estructurados

ABAP HANA La búsqueda de textos y el análisis de datos no estructurados

ABAP HANA La búsqueda de textos y el análisis de datos no estructurados

1 Introducción a la búsqueda de textos y análisis de datos no estructurados

SAP HANA ofrece una función para analizar datos no estructurados y al aprovechar esta capacidad podemos mejorar la facilidad de uso de los escenarios de búsqueda dentro de las aplicaciones ABAP. Además, podemos obtener información al reconocer patrones en los conjuntos de datos existentes. Cabe señalar que en los últimos años, casi ninguna otra funcionalidad ha experimentado un impulso tangrande como la búsqueda en grandes conjuntos de datos.

Las opciones en SAP HANA para buscar y analizar textos abren nuevas formas de emplear la plataforma.

1.1 Las ayudas de búsqueda y la búsqueda de textos

Las ayudas de búsqueda son un excelente escenario de uso para las búsquedas de texto en SAP HANA. Esto debido a que SAP contiene ayudas de búsqueda en muchos lugares diferentes y en ocasiones los usuarios buscan una entrada en un conjunto de datos grande sin conocer muchos detalles.

Por ejemplo, podemos estar buscando un cliente con sede en Baja California y que trabaje en telecomunicaciones y al no recordar el id de cliente pues ingresamos nombre de empresa, país, industria en una plantilla de entrada compleja y en muchas ocasiones la información debe ir usando comodines como el *. Además, si escribimos mal alguna de las partes pues no recibiremos ningun resultado.

1.2 Las ayudas de búsqueda y la búsqueda de textos en SAP HANA

La función de búsquedas de texto de SAP HANA nos permite desarrollar ayudas de búsqueda que funcionan de forma similar a la forma en que lo buscamos en Internet. Proporcionan cierta tolerancia a errores y pueden procesar términos y sinónimos en varias lenguas.

Siguiendo con el ejemplo anterior, la búsqueda podría venir de un campo que interpreta correctamente una solicitud del tipo "baje california tele", a pesar de la ortografía incorrecta y búsqueda en varias columnas. Este tipo de búsquedas tolerantes a errores son llamadas difusas o Fuzzy Search. ¿Sabes cual es la razón de obtener resultados inesperados al realizar una búsqueda en Internet?

1.3 Reconocimiento de patrones

El reconocimiento de patrones en textos y documentos representa un tipo completamente distinto de función de análisis de texto. Esto es aplicable en varios escenarios, por ejemplo: evitar tener socios duplicados en datos maestros al verificar antes del registro. Sin embargo, a menudo, nombres y direcciones en particular se ingresan con distintos tipos de ortografía, una simple comprobación de entradas idénticas rara vez arroja resultados satisfactorios.

1.4 Reconocimiento de patrones en SAP HANA

La función de análisis de texto en SAP HANA permite realizar búsquedas dentro de los textos e incluso extraer información adicional de los textos. Un ejemplo de esto último es reconocer las relaciones e incluso intenciones o emociones dentro de los textos.

Supongamos que ejecutamos una tienda web que permite ordenar productos y publicar comentarios sobre los productos y proveedor. Aquí es obvio que el análisis de sentimientos es parte de la funcionalidad necesaria en el motor de búsqueda para reconocer esos patrones en este tipo de datos no estructurados. De esa forma, podríamos saber si un producto provoca comentarios positivos o negativos.

2. Principios básicos de la búsqueda de textos en SAP HANA

El objeto principal de esta función es proporcionar a los usuarios una usabilidad optimizada de las interfaces de búsqueda. Además de varias características comunes en los motores de búsqueda, se incluyen funciones con un significado especial para aplicaciones empresariales como listas de sinónimos específicos en la industria.

Veamos las características:

  • Búsqueda de estilo libre: El usuario no necesita saber las columnas exactas en las que se supone que se realizará la búsqueda.
  • Búsqueda tolerante a errores: El usuario puede varia la ortografía ligeramente sin que ello provoque resultados inesperados.
  • Búsqueda linguistica y de sinónimos: Se incluyen variantes linguisticas y términos sinónimos.
  • Sugerencias de valor: El sistema identifica de manera eficiente los resultados probables mientras el usuario escribe y los presenta en tiempo real.
  • Ranking de resultados: La secuencia de resultados de búsqueda se optimiza para que los resultados con la tasa de probabilidad mas alta se presenten en la parte superior.
  • Facetas de búsqueda: Los resultados se cuentan y agrupan según criterios específicos. Por ejemplo al buscar aerolíneas podemos ver la distribución por país.
  • Análisis de texto (particularmente de sentimiento): Se extrae información adicional de los textos, lo que nos permite obtener información sobre aspectos semánticos.

2.1 Búsqueda tolerante a errores

La búsqueda difusa o tolerante a errores implica la búsqueda de cadenas de caracteres (solicitud de búsqueda) en datos basados en texto, donde los datos no tienen que corresponder exactamente con lo buscado. De esta forma se incluyen entradas similares en el conjunto de resultados.

La base de esto son algoritmos matemáticos cuyo resultados es a menudo un valor numérico que se utiliza para decidir si un registro es suficientemente similar a la solicitud de búsqueda. Desde luego, en la práctica es complicado determinar el grado de similitud entre los textos.

SAP HANA determina un valor entre 0 y 1 que marca el grado de similitud y como programadores, debemos definir un valor de umbral (por ejemplo 0.8) a partir del cual un valor del conjunto de datos que se ha buscado se clasifica de acuerdo con la solicitud.

Además, estas búsquedas se pueden adaptar en base a semántica. Por ejemplo, en una búsqueda de fechas se pueden incluir cuantos días antes o después es válido. En este caso el criterio de similitud es un período en lugar del número de grado de similitud de las cadenas de caracteres.

Expresiones utilizadas en las búsquedas

Cuando ejecutamos una búsqueda difusa, podemos usar un conjunto de expresiones simples que permiten a un experto formular solicitudes mas precisas. Por ejemplo, se tiene la opción de imponer una búsqueda exacta o usar expresiones lógicas. Veamos algunos ejemplos.

Solicitud de búsqueda Explicación
lufthansa o united Los resultados similares a "Lufthansa" o "United"
airline-united Los resultados similares a "airline" pero no "united"
"south air" Los resultados similares a la expresión exacta "south air"

Búsqueda linguistica

Para determinar el grado de similitud también es útil incluir aspectos gramaticales y otros aspectos linguisticos. En este contexto, los términos vuelven a su origen para reconocer variantes de palabras como casa, casas, vivienda, etc.

Este tipo de búsqueda ofrece oportunidades para el manejo de textos multilingues y solicitudes de búsqueda.

Listas de sinónimos

La búsqueda difusa también puede extenderse por listas de sinónimos. Para ello, es posible almacenar una lista de términos equivalentes a un término específico y que la búsqueda posterior se base en dicha lista. Esto es particularmente útil para abreviaturas y conceptos específicos de la industria.

Por ejemplo, "notebook" puede considerarse sinonimo de "laptop" o "monitor" como sinónimo de "pantalla".

Stop words

Otra opción para una búsqueda mas inteligente es familiarizar el sistema con características semánticas de términos específicos. En este contexto, es importante saber que no todos los términos de una solicitud tienen la misma selectividad. Por ejemplo, términos como "S.A." o "Inc." no son tan selectivos como el nombre de la empresa cuando buscamos una compañía específica.

Del mismo modo, en textos mas largos, como descripciones de productos, ciertas partes del discurso como pronombres son menos importantes que los nombres de las marcas dentro del texto. Cuando ejecutamos una búsqueda en SAP HANA, podemos ingresar una lista de stop words (noise words) que se consideran menos importantes que otras palabras.

3 Tipos de datos de texto y índices de texto completo en SAP HANA

La búsqueda difusa se basa en los tipos de datos del almacén de columnas. Aquí, TEXT y SHORTTEXT representan dos tipos de datos que se dedican a búsquedas y análisis de texto.

El tipo SHORTTEXT se usa para cadenas con longitud determinada y TEXT para un objeto grande (algo así como un CLOB). En este contexto, los textos se fragmentan internamente en tokens que forman la base para búsquedas y análisis.

Si bien la búsqueda difusa es compatible con VARCHAR y NVARCHAR, esta compatibilidad no es tan extensa.

Soporte en ABAP

Desafortunadamente, actualmente no hay soporte en ABAP para tipos de datos TEXT y SHORTEXT, lo que hace imposible utilizar estos tipos de datos en la creación de una tabla a través del DDIC. Sin la capacidad de dividir el texto en tokens, el sistema no puede reconocer una permutación de palabras, que es una necesidad para esto.

Índice de texto completo (Full Text Index)

Lo que si puede hacerse es agregar la funcionalidad ofrecida por los tipos de datos de texto a una columna mediante la creación de un índice de texto completo. Así, podemos habilitar las funciones de búsqueda y análsis para la mayoría de los tipos de caracter en el DDIC (CHAR, STRING, DATS, etc).

Cuando creamos un índice de este tipo para una columna, el sistema crea una columna interna invisible del tipo TEXT que contiene los mismos datos pero es una presentación optimizada para solicitudes de búsqueda. Ahí si es posible fragmentar el texto en tokens y generar un diccionario adicional.

Usando SQL para la creación

Podemos crear el índice utilizando la sentencia SQL CREATE FULL TEXT INDEX:

CREATE FULL TEXT index_name
ON table_name ( column_name )
[parameter_list]

La siguiente instrucción SQL define un índice completo:

CREATE FULLTEXT INDEX scarr~name ON scarr(carrname);

Creación en el DDIC

A partir de la versión 7.4 de ABAP, también es posible crear un índice de texto completo en el DDIC utilizando parámetros cómunes. Para esto, debemos definir en la SE11 un índice de extensión (para una extensión sin modificación de una tabla estándar de SAP). Este contiene solo la columna requerida como un campo y se crea exclusivamente en la base de datos SAP HANA.

Después, a través de Goto / Full Text Index podemos activar el índice de texto completo y configurar parámetros adicionales. La configuración estandar y configuración de idioma suelen ser suficientes para una búsqueda difusa.

4. Uso de la búsqueda de textos a través de SQL

La palabra clave CONTAINS

Al igual que con la mayoría de las funciones en SAP HANA, podemos invocar la búsqueda de texto a través de SQL. Para ello, debemos usar una sentencia SELECT con la palabra clave CONTAINS, que permite llamar a las múltiples variables de la búsqueda de texto. La síntaxis estándar es la siguiente:

SELECT field_list
FROM table_or_view
WHERE CONTAINS (columns, search_request, parameter);

Ejemplo:

SELECT *
FROM scarr
WHERE CONTAINS( carrname, 'lusthansa', FUZZY(0.8) );

En el ejemplo vemos que se tienen dos errores, se inicia con minúscula y se usa una letra incorrecta,pero aun así el sistema regresaría el registro de datos esperado: "Lufthansa".

El parámetro FUZZY

Nos permite definir el valor de umbral, donde un valor entre 0.7 y 0.8 suele ser un buen estándar para obtener resultados relativamente similares a la solicitud de búsqueda. Además del umbral, FUZZY proporciona mas parámetros para indicar.

Búsqueda exacta / Búsqueda linguistica

Además de utilizarla con el parámetro FUZZY, podemos usar la sentencia CONTAINS en otras dos variantes: EXACT y LINGUISTIC. Veamos la primera mas a detalle.

El sistema buscará coincidencias exactas para la solicitud con palabras completas (recordemos que el sistema tokeniza el texto). Este es el valor predeterminado si no indicamos ningún parámetro. Cabe indicar que es posible utilizar comodines como '*'. A diferencia de un LIKE en SQL estándar, CONTAINS nos permite buscar en varias columnas. Veamos un ejemplo:

SELECT * FROM scarr
WHERE CONTAINS ((carrname, url), 'Airlines OR Airways OR *.com', EXACT)

Si no existiera un índice completo para la columna carrname, los nombres no se dividirán en palabras (tokens); en consecuencia, no habrá una coincidencia exacta entre la solicitud de búsqueda 'Airlines' y una entrada como 'United Airlines' ya que la frase no esta partida en 'United' y 'Airlines'.

Por lo tanto, es IMPORTANTE que se definan índices de texto completo para todas las columnas que se vayan a utilizar con CONTAINS y búsquedas difusas.

5. Uso de la búsqueda de textos en ABAP

Las ayudas de búsqueda son una excelente opción para utilizar la búsqueda de textos en SAP HANA, para ello ocupamos crear la ayuda de búsqueda en el DDIC ABAP.

Como desarrolladores, podemos definir una ayuda de búsqueda declarativamente de manera que especifique el nombre de una tabla o vista y seleccione los campos para el cuadro de diálogo y desde ABAP 7.4 SP06 es posible especificar también los parámetros así.

El procedimiento sería algo similar al siguiente:

  1. Utilizaremos la transacción SE11 o SE80 para crear una nueva ayuda de búsqueda y seleccionar una tabla o vista como fuente de datos.
  2. En las opciones avanzadas (Enhanced Options) de la ayuda de búsqueda, podemos seleccionar: si los valores se muestran directamente, si se ejecuta una búsqueda de texto completo en varias columnas y qué nivel de detalle se aplica.
  3. No es necesario crear un Full Text Index para este propósito. Después de la activación, podemos integrar la ayuda de búsqueda con un programa de prueba y ver en pantalla la nueva potencionalidad de las ayudas de búsqueda en donde los valores se muestran a medida que el usuario escribe en la pantalla.

TIPS:

  • Podemos obtener documentación completa sobre los full text index en help.sap.com/hana.
  • El nombre del índice debe ser único dentro del esquema por lo que tiene sentido agregar como prefijo el nombre de la tabla.
  • Podemos utilizar SQL para buscar texto en SAP HANA pero hay un par de limitaciones: solo podemos utilizar CONTAINS para tablas columnares y no podemos utilizar CONTAINS para los atributos calculados de una vista.
  • Existen funciones escalares especiales para recuperar información adicional para registros individuales en el conjunto de resultados: SCORE por ejemplo nos da el grado de similitud entre lo encontrado y la solicitud de búsqueda por lo que su valor oscila entre 0 y 1 donde 1 es la mayor similitud y generalmente se utiliza para ordenar los resultados de forma descendente en base a su grado de similitud. Otra función útil en textos largos es HIGHLIGHTED que regresa todo el texto completo con la ubicación encontrada resaltada y SNIPPET para regresar solo el extracto del texto alrededor de la ubicación encontrada.
  • Para poder hacer uso de las nuevas funciones en ayudas de búsqueda es necesario contar con ABAP 7.4 SP06 o superior y tener al menos SAPGUI 7.3.

 

 

 

Agradecimiento:

Ha agradecido este aporte: Jesús Quiñonez López


Sobre el autor

Publicación académica de Abraham Humberto Noriega Cabrera, en su ámbito de estudios para el Máster ABAP for HANA.

SAP SemiSenior

Abraham Humberto Noriega Cabrera

Profesión: Ingeniero Sistemas Computacionales - Mexico - Legajo: WO62V

✒️Autor de: 14 Publicaciones Académicas

🎓Egresado del módulo:

Disponibilidad Laboral: FullTime

Presentación:

Ingeniero en sistemas computacionales con experiencia en análisis, desarrollo e implementación de sistemas. he tenido el gusto de participar en implementaciones tanto locales como a nivel estatal.

Certificación Académica de Abraham Noriega