• No se han encontrado resultados

2 Estado de la Cuestión

2.6 Minería de Datos e Interpretación de Resultados

3.2.2 Inconsistencias de Instancias: Ontología de Preprocesamiento

3.2.2.2 Transformación de Datos mediante Ontologías de Preprocesamiento

3.2.2.2.5 Transformación por Patrones

Las transformaciones por patrones son una generalización de la sustitución de sinónimos. Frente al esquema (cadena de caracteres – término preferido), en el que por cada instancia de la ontología de preprocesamiento representa un solo valor; en este caso la sustitución se realiza basándose en expresiones que describen un conjunto de valores pertenecientes al Campo Objetivo, siempre que verifiquen cierto patrón.

A cada modelo de valor se le puede asociar uno de los tres tipos de transformaciones existentes. La clase Patrones de la ontología de preprocesamiento consta de cuatro propiedades. La propiedad Reemplazo almacena la descripción del proceso de sustitución de valores en función de las otras tres propiedades, Cadena de Caracteres, Expresión Regular o Regla de Ajuste. La utilización de una u otra propiedad es excluyente e implica un procesamiento distinto de la propiedad Reemplazo. A continuación se describen los distintos tipos de transformación por patrones en orden ascendente de potencia y complejidad: (i) Sustitución de cadenas de caracteres, (ii) sustitución de expresiones regulares y (iii) transformación por reglas de ajuste.

3.2.2.2.5.1 Sustitución de cadenas de caracteres

Esta opción es similar a la sustitución de sinónimos mediante Pares de Términos. La diferencia reside en que la sustitución se realiza en las apariciones de la cadena de caracteres dentro del valor objetivo, en vez de sustituir valores completos. El valor que se desea sustituir se incluye en la propiedad Cadena de Caracteres, y el término por el que se desea sustituir en la propiedad Reemplazo. Por ejemplo, En el caso de necesitar transformar fechas en distinto formato, “24/06/2007” y “24-06-2007”, sería necesaria una sola instancia de Patrones que incluya “/” en Cadena de Caracteres y “-” en Reemplazo.

1. ∀ pi∈ P = {<p1.1, p1.2>, <p2.1, p2.2>, ... , <pn.1, pn.2>}

81 3. Si pi.1⊆ rj

4. Hacer A = A – {rj}

5. Hacer A = A + {sustituir(rj, pi.1, pi.2)}

Donde P es el conjunto de patrones formado por pares <cadena de caracteres, reemplazo> y función sustituir(X, Y, Z) sustituye toda ocurrencia Y por Z en la cadena de caracteres X.

3.2.2.2.5.2 Sustitución de expresiones regulares

Para aumentar la capacidad de transformaciones, en vez de una cadena de caracteres, los valores son representados por un patrón mediante la propiedad Expresión Regular. La sustitución se realiza por una cadena de caracteres fija almacenada en Reemplazo. Por ejemplo, Supongamos otro formato de fecha que sólo incluye el mes y el año, “JUN 2007” y “24-06-2007”. La fórmula almacenada en Expresión Regular sería “*-06-”, y la cadena fija de Reemplazo sería “JUN ”; con lo que serían necesarias 12 instancias de Patrones. Abajo se muestra el algoritmo utilizado para llevar a cabo este tipo de transformación de patrones.

1. ∀ pi∈ P = {<p1.1, p1.2>, <p2.1, p2.2>, ... , <pn.1, pn.2>}

2. ∀ rj A

3. Si pi.1⊆ rj

4. Hacer A = A – {rj}

5. Hacer A = A + {sustituir’(rj, pi.1, pi.2)}

Donde P es el conjunto de patrones formado por pares <expresión regular, reemplazo> y la función sustituir’(X, Y, Z) devuelve la cadena de caracteres X tras reemplazar toda ocurrencia de la expresión regular Y por la cadena de caracteres Z.

3.2.2.2.5.3 Transformación por reglas de ajuste

Esta es la opción que permite incluir, mediante la propiedad de Regla de Ajuste, tanto constantes como variables. Los elementos aquí definidos, así como nuevas variables referentes a otros campos de la fuente de datos, se pueden utilizar posteriormente en la propiedad Reemplazo para definir la transformación. Esta última propiedad no se analiza como una cadena de caracteres fija, sino como una regla de transformación de datos. Siguiendo el ejemplo de formatos de fechas, la transformación por reglas de

82

ajuste es necesaria al traducir una fecha de formato americano 06/24/2007 a europeo 24/06/2007. En este caso, la Regla de Ajuste sería “{M}/{D}/{A}” y el Reemplazo “{D}/{M}/{A}”. Donde al igual que en las transformaciones de escala, las variables se identifican entre “{” y “}”. Para convertir una cadena por medio de reglas de ajuste, en primer lugar se dividen ambas reglas (Regla de Ajuste y Reemplazo) en unidades básicas denominadas “tokens” que pueden ser constantes o variables. Las variables contenidas en el Campo objetivo toman los valores adecuados para permitir el ajuste de las reglas al registro recuperado. Los valores que tomen las variables se utilizan posteriormente como sustitución de las variables al generar la cadena resultante. Si no es posible un ajuste positivo de la regla con ninguna combinación de valores, la cadena no se modifica. El algoritmo encargado de realizar esta tarea se describe a continuación.

1. ∀ pi∈ P = {<p1.1, p1.2>, <p2.1, p2.2>, ... , <pn.1, pn.2>}

2. Hacer TRegla de Ajuste = tokens(pi.1)

3. Hacer TReemplazo = tokens(pi.2)

4. ∀ rj ∈ A

5. Si ajuste(rj, TRegla de Ajuste)

6. Hacer TRegistro = tokens’(rj, TRegla de Ajuste)

7. Hacer A = A – {rj} 8. ∀ tkTReemplazo 9. Si es_variable(tk) 10. Si variable_externa(tk, A) 11. Hacer A = A + {rj + obtener_valor_externo(A, j, tk)} 12. Si no

13. Hacer pos_token_reg = obtener_pos(tk, TRegla de Ajuste)

14. Hacer tr = obtener_token(pos_token_reg, TRegistro)

15. Hacer A = A + {rj + tr}

16. Si no // tk constante

17. Hacer A = A + {rj + tk}

Donde P es el conjunto de pares de patrones <regla de ajuste, reemplazo>, el método tokens(X) divide la cadena de caracteres X en sus unidades básicas y devuelve una lista de “tokens”, T = {t1, t2, … , tn}. El método tokens’(X, Y) es similar, pero en

83

este caso se divide la cadena de caracteres X en sus unidades básicas en función de una lista de “tokens” Y a la cual se ha de ajustar. Esta comprobación se lleva a cabo con la función ajuste(X, Y), que devuelve un valor booleano tras verificar que se pueden encajar todos los “tokens” de la lista Y en la cadena de caracteres X. Para comprobar si el “token” que se está tratando en ese momento es una variable, se emplea el método es_variable(X). Y variable_externa(X, Y) para comprobar si el “token” X es otro campo del conjunto de datos Y. En ese caso se utiliza el método obtener_valor_externo(X, Y, Z) para extraer el valor de la instancia Y del conjunto de datos X en su columna Z. Si no es una variable externa, sino una ajustada al valor del registro que se está transformando, en primer lugar se obtiene la posición correspondiente del “token” de la Regla de Ajuste mediante la función obtener_pos(X, Y), que devuelve la posición correspondiente al “token” X en la lista de “tokens” Y. A continuación se obtiene el “token” de registro correspondiente a esa posición con el método obtener_token(X, Y) que devuelve el “token” correspondiente a la posición X en la lista de “tokens” Y.