http://summit.solidq.com
Tratamiento de textos en SQL Server, un repaso a todo lo que se puede hacer con la plataforma de datos de MS con textos, y su aplicación a diferentes escenarios (y sus combinaciones)
- FullText
- FullText Semantics (a partir de 2012)
- DQS
- Fuzzy Lookup y Fuzzy Grouping en SSIS
- Funciones de búsqueda difusa en MDS
- Q&A en Power BI
- Otras opciones de tratamiento de textos (¿minería?, sistemas basados en metadatos, Big Data, …)
SQL Server y Textos - del char al análisis semántico
1. #SQSummit
@pausempere
SQL Server y Textos
Del char(1) al análisis semántico
DPS – Business Intelligence
psempere@solidq.com
MAP 2012
Pau Sempere Sánchez
18. Análisis Semántico
FileTable
• Carpeta/tabla
• FileStream
• Versionado de
ficheros
• Indexable
FullText FILESTREAM
FILETABLE
ACCESO
TRANSACCIONAL
ACCESO WINDOWS
BD
Carpetas y
ficheros
Acceso
FileStream BLOBS
F
U
L
L
T
E
X
T
S
E
M
A
N
T
I
C
S
20. Análisis Semántico
FULL-TEXT
Semantics
• Semántica y
contexto
• Instalación
adicional
• BD propia
• Filter packs FILESTREAM
FILETABLE
ACCESO
TRANSACCIONAL
ACCESO WINDOWS
BD
Carpetas y
ficheros
Acceso
FileStream BLOBS
F
U
L
L
T
E
X
T
S
E
M
A
N
T
I
C
S
22. Conclusiones
• La fonética no es suficiente
• Gestión avanzada de similitud
• Fuzzy Lookup
• Similarity MDS
• Queries full-text para búsqueda avanzada
• Gestión documental con FileTables y Semantics
23. 2525
Power BI para usuarios de negocio
25
Curso online
Clases virtuales presenciales
14, 15, 16, 21, 22 y 23 de Julio
De 16 a 20 h
Máster en BI 4ª Edición (Inicio Octubre 2014)
- Clases presenciales virtuales
- 450 horas (60 ECTS)
- SolidQ – UPM
- Clases + trabajo práctico + proyecto
- Beca de hasta 1.300 € para los primeros inscritos.
Máster en Big Data & Analytics
1ª Edición (Inicio Octubre 2014)
- Clases presenciales virtuales
- 1 año (60 ECTS) UMA
- Clases + trabajo práctico + proyecto
Información e inscripción:
http://university.solidq.com / ibinfo@solidq.com
24. Si quieres disfrutar de las mejores sesiones de nuestros mentores
de España y Latino América, ésta es tu oportunidad.
http://summit.solidq.com
Síguenos:
26
@pausempere
DPS – Business Intelligence
Pau Sempere Sánchez
Notas del editor
Algoritmo diseñado para el idioma inglés a principios del siglo XX
Podríamos pensar que es débil para otros idiomas porque no ajusta los fonemas, pero tiene fallos también para el inglés
DIFFERENCE devuelve un valor de 0 a 4, siendo 0 una diferencia total y 4 una diferencia mínima
Son procesos batch, para limpiar / clasificar / deduplicar registros de texto.
Los tres primeros son muy útiles para grandes cargas de datos, se embeben en SSIS (flexibilidad, escalabilidad, potencia, versatilidad en la transformación…)
DQS tiene la ventaja de que podemos centralizar las bases de conocimiento en el servidor, trabajar por separado en los dominios y luego consultarlos en un mismo paquete SSIS, aplicar reglas complejas, expresiones regulares, wildcards, etc.
Pero, ¿y si queremos hacerlo online? Al estilo de lo que hacen Google y Bing, estaremos preguntando por una cadena de texto concreta sobre un conjunto de referencia, un conjunto maestro… estos procesos acaban volcando en un destino de datos, con lo que el proceso sería invocar al paquete parametrizado, que limpie el dato que le hemos introducido y leer de los resultados de una tabla temporal… muchos cuellos de botella potenciales. Podemos usar DataStream Destination con FuzzyLookup en el paquete para limpiezas bajo demanda (DQS es lento para una búsqueda online), pero requiere algo más de trabajo y es un componente que no es parte del RTM aunque lo publique MS. Queda fuera del ámbito de esta charla.
Para hacerlo online tenemos que recurrir a embeberlo por ejemplo, en un procedimiento almacenado que consulte contra el conjunto de referencia. ¿Pero como lo compara? ¿Cómo construimos esa consulta personalizada?
La fonética no es suficiente, hay que independizarse de como se pronuncia (cacofonías, diferencias culturales e idiomáticas, etc.)
Hay que irse al dato, basarse en conceptos matemáticos. La diferencia entre dos números es su resta (el número que falta en una para llegar al otro), en las cadenas de texto es también, como punto de partida, el mínimo número de cambios que faltan en una para llegar a la otra: la distancia de edición (originalmente, Levenshtein).
Hay varios algoritmos basados en el mismo concepto:
Levenshtein Distancia de edición, asigna pesos por tipo de modificación. Se puede implementar por programación dinámica.
Jaro-Winkler Todos los caracteres contra todos, si encuentra coincidencias en posiciones cercanas entran al cálculo de similitud. El sumatorio de cada comparación / 3
Jaccard Compara los sets de caracteres con unión e intersección. dj = 1 - J(A,B) = 𝐀∪𝐁 − |𝐀∩𝐁| |𝐀∪𝐁| Se puede implementar por programación dinámica.
CommonSubstring Encuentra la subcadena común más larga entre las dos cadenas a comparar. Puede implementarse de manera parecida a levenshtein (prog dinámica) incrementando la puntuación por cada carácter igual en la subcadena que vayamos encontrando en vez de pesos por la modificación necesaria.
Suelen funcionar mejor cuanto más cortos son los strings. El ruido funciona como un outlier en la distribución de caracteres, aleja los puntos comunes y por tanto las puntuaciones de similitud.
Hay ruido que no es fácil de quitar (conjugaciones de verbos, necesitaríamos un stemmer para sacar la raíz y poder asociar conjugaciones diferentes), pero otro es bastante fácil. Artículos y preposiciones, por ejemplo, son conocidos y tenemos un conjunto finito de ellos, podemos usar un filtro tan sencillo como un replace.
Las palabras comunes dentro del dominio también funcionan como outliers. Si trabajamos con talleres de reparación y chapa y pintura, por ejemplo, las palabras “automoción”, “taller”, “talleres”, “autos”, “automóviles”, “reparaciones”, etc… son palabras propias del dominio que no aportan información adicional y significativa. Sin embargo, el nombre del taller en si sí aporta info clave para establecer similitud.
containmentBias
Specifies how exact the fuzzy index is when it is comparing strings of different lengths. Values must be in the range 0.0 to 1.0 inclusive. A value of 0.0 implies that the index will reduce the score of matches that have different string lengths. A value of 1.0 implies that the index is less exact. containmentBias is an expression of type float with no default. containmentBias is used only for the Jaccard similarity coefficient and longest common subsequence algorithms.
La importancia de mantener un conjunto de referencia consistente, rico y fiable MDS + DQS
Para establecer qué listas de ruido necesitamos usar para estandarizar las búsquedas (o añadir a nuestras stoplists en fulltext) podemos usar Term Extraction para ver las palabras más repetidas y volcarlas a una tabla aparte. De ahí las analizamos y las incluimos en las listas de ruido.
Útil para preguntas concretas, si se ajustan tesauros y stoplists se puede focalizar mucho las búsquedas. Importante el idioma para las funciones avanzadas (formsof depende directamente del stemmer).
CONTAINS -> Busqueda fuzzy de términos. Si usamos la versión de tabla, devuelve un objeto tabla y podemos usar el metadato que añade (RANK e ID)
FREETEXT -> Búsqueda sobre el significado. Por defecto usa los stemmers y tesauros para sacar las formas y los sinónimos y llegar a ese “significado”
NEAR -> Las relaciones entre palabras a ciertas distancias pueden sugerir que están relacionadas, con NEAR podemos tener esta medida de manera personalizada
Necesidad de contexto para empezar a hablar de semántica – con el ISABOUT se puede empezar a acercar, pero hay que hacer preguntas concretas. Nos quedamos cortos a la hora de sacar significado, ver si una palabra es positiva o negativa (porque nos falta contexto). Tendríamos que desarrollar nuestra propia política para decidir qué implicación tiene que una palabra esté cerca de otra o que ISABOUT de ciertas puntuaciones para extraer conclusiones acerca de la semántica del texto.
Útil para preguntas concretas, si se ajustan tesauros y stoplists se puede focalizar mucho las búsquedas. Importante el idioma para las funciones avanzadas (formsof depende directamente del stemmer y puede usar el tesauro).
ISABOUT -> Para preguntar por el significado de un texto podemos darle pesos a las palabras que usamos para la query, de tal manera que si hablamos de medicina de rodilla, la palabra ‘RODILLA’ tendrá más peso que ‘LIGAMENTO’, pero ‘LIGAMENTO’ también es importante
FORMSOF -> Aplicación directa de los stemmers y los tesauros. Especificamos que queremos las formas que derivan de ciertas palabras, y esto puede ser sacando la raíz de la palabra y derivándola y también usando los sinónimos que especifiquemos en el tesauro.
Necesidad de contexto para empezar a hablar de semántica – con el ISABOUT se puede empezar a acercar, pero hay que hacer preguntas concretas. Nos quedamos cortos a la hora de sacar significado, por ejemplo para ver si una palabra es positiva o negativa (porque nos falta contexto). Tendríamos que desarrollar nuestra propia política para decidir qué implicación tiene que una palabra esté cerca de otra o que ISABOUT de ciertas puntuaciones para extraer conclusiones acerca de la semántica del texto.
Las FileTables tienen dos “aspectos”, como carpeta del sistema de ficheros y como tabla interna de SQL Server. El usuario solo tiene que copiar los documentos a la carpeta, sea con una aplicación (API de gestión de ficheros de Windows) o manualmente.
Los permisos se establecen en SQL Server, no aplican los de sistema de ficheros de Windows. Aunque sea acceso no transaccional, SQL Server acaba manejando las modificaciones, escrituras y borrados y para ello asume la gestión de permisos.
Se indexa el binario, usa los mecanismos de Full-Text (stemmers, wordbreakers, stoplists y tesauros) para construir índices más complejos, en los que además se relacionan documentos entre ellos, con lo que podemos establecer taxonomías en nuestras bibliotecas de documentos.
Every FileTable implements a logical folder structure using the path_locator column. This is a hierarchyid value that denotes the location of each file and folder (row) within the logical file system (table).
Así, tendremos una FileTable para cada conjunto de documentos que queramos relacionar. Cada uno está localizado dentro del árbol de directorios con su path_locator, y es indexable y relacionable con el resto, a efectos de la table es una columna de tipo BLOB (varbinary(max)).
Cada documento tiene enlazados una serie de metadatos que lo definen y un direccionamiento a una ruta (por ejemplo). Necesidad de rellenar los metadatos para cada documento, estandarización de conceptos como "temática", fechas, etc. Si faltan metadatos, reducimos el universo de búsqueda, porque los parámetros son limitados (fecha entre X e Y, temática in (tema1, tema2, etc.). Desde la tabla de metadatos al final se remite a la ruta donde se encuentra la documentación.
Ampliar el sistema supone añadir columnas nuevas al sistema de metadatos y actualizar TODAS las filas con datos que puede ser que sean imposibles de obtener para documentación antigua, por ejemplo.
*CONSULTAR BUSQUEDA EN SHAREPOINT – DOCUMENTACIÓN Y DANI -*
Ejemplo de sistema híbrido: Usa metadata y almacenamiento en la BD de contenido de SQL Server que subyace pero tiene el sistema de indexación independiente, con implementación propia.
Se basa en full-text y expande su funcionalidad, ahora apuntando más allá, a la semántica y a la relación entre documentos por su contenido.
Requieren de una BD propia que se instala y añade a la instancia de SQL Server.
Tienen un proceso crawler que indexa los documentos usando iFilters que le instalemos. Los IFilters indican a SQL Server como analizar el binario según el tipo de documento del que se trate.