16/10/2012 Organización Registros (término, refLista) en un archivo B# (archivo de vocabulario) y las listas invertidas en un archivo secuencial indexado por el B# (archivo de listas), con dos opciones para efectuar las búsquedas: Construcción de Índices • Accediendo al archivo B# para la búsqueda de términos • Cargando los registros (término, refLista) en un arreglo al abrir Organización Compresión de Términos Construcción de Listas Invertidas Compresión de Listas Invertidas Índices Secundarios Índices de Porciones de Firmas 1 Recuperación de Textos el índice para búsqueda binaria de términos en RAM Registros (término, refLista) en un diccionario (estructura en RAM de lenguajes OO) y las listas invertidas en un archivo secuencial indexado por el diccionario (archivo de listas). Los índices se pueden construir y usar con esta organización, persistir por serialización y cargar por hidratación. ODD - Curso Servetto 2 Recuperación de Textos ODD - Curso Servetto Organización Políticas de actualización de índices (se adoptan según la Vocabulario frecuencia con que se requiera actualizar el índice) • Por reconstrucción total (para actualizaciones poco frecuentes). • Incremental (para actualizaciones frecuentes). Compresión frontal (front coding) Compresión frontal parcial o por secciones La organización de las listas en el archivo secuencial depende de la política de actualización que se tenga para el índice • Para actualizaciones por reconstrucción total se organizan como registros de longitud variable y se refieren por su offset de comienzo en el archivo. • Para actualizaciones incrementales, se organizan como registros de longitud variable en bloques y se refieren por el número relativo de bloque donde se encuentran; deben contener como información de control la identificación del término a la que pertenecen para poder identificarlas dentro del bloque. 3 Recuperación de Textos ODD - Curso Servetto 4 ODD - Curso Servetto Compresión de Términos 1 Compresión de Términos 2 Ejemplo de Vocabulario codazo, codearse, codera, codicia, codiciar, codiciosa, codicioso, codificar, codigo Compresión Frontal (front coding) 61codazo#23351earse#24321ra#23341icia#27211r#26331osa#28311o #24351ficar#24321go#2 (en hoja de B# o en arreglo de bytes en RAM) Campos de control Ejemplo de Vocabulario codazo, codearse, codera, codicia, codiciar, codiciosa, codicioso, codificar, codigo Compresión Frontal Parcial o por Secciones El tamaño de las secciones usualmente es 2T, donde T es la cantidad de términos 61codazo#23351earse#24321ra#271codicia#27311r#26331osa#2 91codicioso#24351ficar#24321go#20424446435 Campos de control 1 Prefijo de longitud de referencia a la lista (en el ejemplo de 2 bytes), que puede ser un offset o un número de bloque, según la organización 3 Cantidad de caracteres coincidentes con el término previo 4 Posición relativa de términos sin comprimir: al final de nodos B# o en un arreglo de índices al arreglo de bytes para el vocabulario en RAM. 5 Cantidad de secciones de compresión Búsquedas: ¡permite la búsqueda binaria de términos por secciones! 1 Prefijo de longitud de referencia a la lista, que puede ser un offset o un número de bloque, según la organización 3 Cantidad de caracteres coincidentes con el término previo 2 Número 2 Número Búsquedas: sólo permite búsquedas secuenciales (muy costosas en nodos grandes) 5 Recuperación de Textos Recuperación de Textos ODD - Curso Servetto 6 Recuperación de Textos ODD - Curso Servetto 1 16/10/2012 Modelo Booleano Documentos Listas Invertidas Las Cosas de laVida LaVida es Bella 3. Las Cosas del Querer 4. LaVida después de laVida Vocabulario (bella, 3, 0), (cosas, 1, 0), (querer, 4, 0), (vida, 2, 0) 1. 2. Archivos de control y temporales para su construcción Técnicas de compresión Para cada término indexable encontrado secuencialmente en el recorrido de un documento idDoc se hace: • Si el término no está en el índice se lo agrega al archivo de términos por orden de aparición para determinar su idT en base a la posición en que quede, y se lo agrega al índice junto con su id y una referencia nula a la lista invertida • Se registra en el archivo de ocurrencia de términos el par (idT, idDoc) Archivo de términos por orden de aparición Se conserva como archivo de control si el índice se actualiza incrementalmente o si hay índice de n-gramas 1cosas 2vida 3bella 4querer Archivo de ocurrencia de términos en documentos (idT, idDoc) (archivo temporal) (1, 1), (2, 1), (2, 2), (3, 2), (1, 3), (4, 3), (2, 4), (2, 4) Finalmente se ordena (sort externo) el archivo de ocurrencia de términos por idT+idDoc (en otro archivo temporal) para, recorriéndolo secuencialmente una única vez, armar las listas invertidas de cada término (1, 1), (1, 3), (2, 1), (2, 2), (2, 4), (2, 4), (3, 2), (4, 3) Recuperación de Textos 7 ODD - Curso Servetto 1. 2. 3. 4. Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida Después de la Vida Se ordena el archivo de ocurrencia de términos en documentos por idDoc+idT y recorriéndolo secuencialmente una vez, se genera el archivo de frecuencia de términos en documentos (idT, idDoc, ft) y, llevando cuenta de la máxima frecuencia en cada documento, el archivo secuencial de normas infinito de documentos. Archivo de términos por orden de aparición 1cosas 2vida 3bella 4querer ODD - Curso Servetto Modelo Booleano con Búsquedas de Frases o Términos Próximos Modelo Vectorial Documentos Recuperación de Textos 8 Vocabulario (bella, 3, 0), (cosas, 1, 0), (querer, 4, 0), (vida, 2, 0) Documentos 1. 2. 3. 4. Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida Después de la Vida Se ordena el archivo de posiciones de términos en documentos por idT+idDoc+posT y recorriéndolo secuencialmente una vez, se genera una lista de posiciones de cada término en cada documento (posT) y la lista invertida de documentos por término (idDoc, refLPP), que se persisten en dos archivos de control. Archivo de términos por orden de aparición Vocabulario Archivo de ocurrencia de términos en documentos (idT, idDoc) (temporal) cosas vida bella querer (1, 1), (2, 1), (2, 2), (3, 2), (1, 3), (4, 3), (2, 4), (2, 4) Archivo de posiciones de términos en documentos (idT, idDoc, posT) (1, 1, 1), (2, 1, 2), (2, 2, 1), (3, 2, 2), (1, 3, 1), (4, 3, 2), (2, 4, 1), (2, 4, 2) Archivo de posiciones de términos en documentos ordenado por idT+idDoc+posT (se obtiene del anterior, por sort externo) (1, 1, 1), (1, 3, 1), (2, 1, 2), (2, 2, 1), (2, 4, 1), (2, 4, 2), (3, 2, 2), (4, 3, 2) Archivo de frecuencia de términos en documentos (idT, idDoc, ft) (se obtiene a partir del de ocurrencias) (1, 1, 1), (2, 1, 1), (2, 2, 1), (3, 2, 1), (1, 3, 1), (4, 3, 1), (2, 4, 2) Archivo de normas infinito de documentos (de control – se obtiene a partir del de ocurrencias) (no se calcula la norma euclídea porque por la cantidad de términos que suele haber, la suma de cuadrados de las frecuencias puede resultar inmanejable) 1 1 1 2 Se ordena (sort externo) el archivo de frecuencia de términos en documentos (en otro archivo temporal) por idT+idDoc para, recorriéndolo una única vez, armar las listas invertidas en RAM y luego persistirlas indexadas por el vocabulario (1, 1, 1), (1, 3, 1), (2, 1, 1), (2, 2, 1), (2, 4, 2), (3, 2, 1), (4, 3, 1) 9 Recuperación de Textos Recorriendo secuencialmente este archivo una vez, se arman las listas de documentos por término y de posiciones de términos en documentos (dos archivos de control) También se puede construir un índice para el modelo vectorial con búsqueda de frases o términos próximos si se calcula la frecuencia de los términos y la norma de los documentos como se vio previamente 10 Recuperación de Textos ODD - Curso Servetto Compresión de Listas Invertidas 1 Compresión de Listas Invertidas 2 Reducción de cantidad de bits para representar números de documento Codificación Alineada a Bytes 1. 2. Representa números naturales con la mínima cantidades de bytes, usando los dos bits más significativos del código para indicar la cantidad de bytes empleados Reducción de magnitud → Se ordenan los números de documento de menor a mayor y se representan como distancias al número previo Puede haber números grandes Hay pocos números grandes y muchos chicos 0..26-1 26..214-1 214..222-1 222..230-1 Codificar con cantidades de bits proporcionales a la magnitud 11 ODD - Curso Servetto (bella, 3, 0), (cosas, 1, 0), (querer, 4, 0), (vida, 2, 0) Los números chicos se representan con pocos bits Los números grandes se representan con muchos bits Recuperación de Textos ODD - Curso Servetto 12 → → → → Recuperación de Textos 00xxxxxx 01xxxxxx xxxxxxxx 10xxxxxx xxxxxxxx xxxxxxxx 11xxxxxx xxxxxxxx xxxxxxxx xxxxxxxx ODD - Curso Servetto 2 16/10/2012 Compresión de Listas Invertidas 3 Compresión de Listas Invertidas 3 Códigos de Elias Códigos de Elias – Gamma • log2(n) unos seguidos de un cero (log2(n) +1 en unario) • n - 2log2(n) en log2(n) bits Fragmentan la representación de un número n en 2 partes, la primera de las cuales debe constituir un prefijo (debe distinguirse de la segunda por su representación), y la segunda en notación binaria 1. Exponente de la máxima potencia de 2 que no exceda a n: log2(n) 2. n - 2 log2(n) El número se reconstruye sumando 2 log2(n) a la segunda parte. Ejemplo 723 → log2(723) | 723 - 2 log2(723) → 9|723 – 29 → 9|211 9|211 → 29 + 211 = 512 + 211 = 723 13 Recuperación de Textos ODD - Curso Servetto 723 → 10|211 → 1111111110011010011 – Delta • log2(n)+1 en código Gamma • n - 2log2(n) en log2(n) bits 723 → 3|2|211 → 1110010011010011 14 ODD - Curso Servetto Compresión de Listas Invertidas 4 Compresión de Listas Invertidas 5 Codificación de Golomb Codificación de Golomb con g Óptimo Fragmenta la representación de un número n en 2 partes, la primera de las cuales debe constituir un prefijo, en función de un parámetro ajustable g 1. q = n/g con q unos seguidos de un 0 (q+1 en unario) 2. r = n mod g en log2(g) bits Se puede demostrar que la compresión es óptima cuando g se relaciona con la probabilidad p de que un término se encuentre en un documento de la siguiente manera: (1-p)^g+(1-p)^(g+1) ≤ 1 < (1-p)^(g-1)+(1-p)^g g se obtiene redondeando al entero más próximo el valor: log2(2-p)/(-log2(1-p)), P = nt/N (N cant. de documentos, nt documentos en los que aparece un término t) b = ┌log2(g)┐ Si r < 2^b-g se representa r en b-1 bits Si r ≥ 2^b-g se representa 2^b-g+r en b bits Ejemplo 723 con g = 512 → 723/512 +1|723 mod 512 → 10011010011 ← log2(512)=9 15 Recuperación de Textos Recuperación de Textos ODD - Curso Servetto 16 Recuperación de Textos ODD - Curso Servetto Ejemplos de Golomb con g Óptimo Índices Secundarios p = 8/500 = 0.016 g = Round(log2(2-0.016) / (-log2(1-0.016))) = = Round(log2(1.984) / (-log2(0.984))) = = Round(42.47) = 42 b = Techo(log2(42)) = Techo(5.39) = 6 2^b-g = 2^6-42 = 22 … … 21 → 0 10101 41 → 0 111111 22 → 0 101100 42 → 10 00000 23 → 0 101101 43 → 10 00001 Decodificación Si el número representado en los b-1 bits después del prefijo es menor a 22 entonces es el resto, si no se toma un bit más (los b siguientes al prefijo) y se obtiene el resto restándole 22 17 Recuperación de Textos ODD - Curso Servetto De N-gramas y de Léxico Rotado De Espacios Métricos 18 Recuperación de Textos ODD - Curso Servetto 3 16/10/2012 Índices de N-gramas Índices de N-gramas Se pueden construir en paralelo o a partir del índice primario Cada vez que se agrega un término nuevo al índice primario La estructura de sus registros es (n-grama, (idT)+) – no hace falta (construcción en paralelo con el índice primario) o por cada término del archivo de términos por orden de aparición (construcción a partir del índice primario) a partir de su recorrido secuencial, se registran los n-gramas del término en un archivo de trabajo con registros (n-grama, idT) Luego se ordena por sort externo el archivo de n-gramas por término por n-grama+idT Se recorre secuencialmente el archivo ordenado, y por cortes de control por n-grama usar el archivo de n-gramas por orden de aparición ni identificadores de n-gramas porque éstos son de longitud fija Su organización es similar a la de los índices primarios: registros (n-grama, refLTT) organizados en un árbol B#, con refLTT referencia a la lista de identificadores de términos que contienen el n-grama, y las listas de identificadores de términos en un archivo secuencial, indexado por el árbol B# Los resultados de consultas son listas de identificadores de términos, cuyas formas alfabéticas se obtienen accediendo al archivo de términos por orden de aparición del índice primario 19 Recuperación de Textos ODD - Curso Servetto Se arma la lista de idT por n-grama y se la almacena en un archivo secuencial Se carga (n-grama, refLTT) al árbol B# 20 Índices de Léxico Rotado Ejemplo con Digramas Se pueden construir en paralelo o a partir del índice primario Archivo de términos por orden de aparición: 1cosas 2vida 3bella 4querer Archivo de digramas por término (digrama, idT): La estructura de sus registros es (rotación) –un solo campo Su organización es similar a la de los índices primarios: registros (rotación) organizados en un árbol B# (el término al que refiere la rotación se obtiene rotando la rotación hasta que el carácter „|‟ se ubique en un extremo para luego quitarlo) Los resultados de consultas son secuencias de rotaciones que se obtienen a partir de una búsqueda aproximada en el árbol B# Por cada término del vocabulario se agregan por alta normal todas sus rotaciones al árbol B# secundario Ordenamiento por digrama+idT: („as‟, 1), (‘a|’, 2), (‘a|’, 3), („be‟, 3), („co‟, 1), („da‟, 2), („el‟, 3), („er‟, 4), („er‟, 4), („id‟, 2), („la‟, 3), („ll‟, 3), („os‟, 1), („qu‟, 4), („re‟, 4), („r|‟, 4), („sa‟, 1), („s|‟, 1), („ue‟, 4), („vi‟, 2), („|b‟, 3), („|c‟, 1), („|q‟, 4), („|v‟, 2) Términos que cumplan el patrón *a: 2, 3 (contienen el digrama „a|‟) Recuperación de Textos ODD - Curso Servetto 22 Recuperación de Textos ODD - Curso Servetto Índices de Léxico Rotado Índices de Espacios Métricos Ejemplo con Digramas Llamamos Espacio Métrico al universo de elementos U, con Archivo de términos por orden de aparición: 1cosas 2vida 3bella 4querer Rotaciones a agregar al árbol B# por cada término: |cosas, s|cosa, as|cos, sas|co, osas|c, cosas|, |vida, a|vid, da|vi, ida|v, vida|, |bella, a|bell, la|bel, lla|be, ella|b, bella|, |querer, r|quere, er|quer, rer|que, erer|qu, uerer|q, querer| Orden en árbol B#: |bella, |cosas, |querer, |vida, a|bell, a|vid, as|cos, bella|, cosas|, da|vi, ella|b, er|quer, erer|qu, ida|v, la|bel, lla|be, osas|c, querer|, r|quere, rer|que, s|cosa, sas|co, uerer|q, vida| Términos que cumplan el patrón *a: bella, vida (rotaciones de a|bell y a|vid –se inicia búsqueda secuencial de todas las rotaciones que comiencen con „a|‟) 23 ODD - Curso Servetto Índices de N-gramas („|c‟, 1), („co‟, 1), („os‟, 1), („sa‟, 1), („as‟, 1), („s|‟, 1), („|v‟, 2), („vi‟, 2), („id‟, 2), („da‟, 2), („a|‟, 2), („|b‟, 3), („be‟, 3), („el‟, 3), („ll‟, 3), („la‟, 3), („a|‟, 3), („|q‟, 4), („qu‟, 4), („ue‟, 4), („er‟, 4), („re‟, 4), („er‟, 4), („r|‟, 4) 21 Recuperación de Textos Recuperación de Textos ODD - Curso Servetto una función distancia d: UUR+ asociada, también denominada función métrica (para términos parecidos, U es el vocabulario y d la distancia de edición o de Levenshtein) Propiedades Positividad: d(a, b) > 0 (la distancia entre dos elementos cualesquiera de U es un numero real y mayor a cero) Reflexividad: d(a, a) = 0 (la distancia de un elemento a sí mismo es igual a cero) Simetría: d(a, b) = d(b, a) Desigualdad triangular: d(a, b) d(a, c) + d(c, b) 24 Recuperación de Textos ODD - Curso Servetto 4 16/10/2012 Índices de Espacios Métricos Índices de Espacios Métricos Para evitar el cálculo de muchas distancias en la evaluación de Pivotes consultas, se construyen índices con distancias precalculadas de manera que, aplicando la desigualdad triangular, se reduzca la cantidad de términos para el cálculo de distancias Se debe seleccionar un conjunto de términos pivote cuyas distancias entre sí superen determinada proporción de la distancia máxima entre dos términos cualesquiera del vocabulario Para la construcción del índice se calculan distancias de todos los términos del vocabulario a todos los pivotes 25 Recuperación de Textos ODD - Curso Servetto M = máx{ d(x, y) : x, y V}, V vocabulario, d distancia de edición (M coincide con la longitud máxima de términos) Pivotes {t1} (t1 primer término del archivo de términos por orden de aparición) For all t V do if p Pivotes, d(t, p) coef * M (coef [0.4, 0.6]) then Pivotes Pivotes {t} Índice SSS (Sparse Spatial Selection) SSS(d(t, p1), … d(t, pn)) (c/reg se llama “firma” de t) Clusters: Cluster(p, r, (t, d(t, p))+), r radio del cluster Recuperación de Textos 26 ODD - Curso Servetto SSS Índices de Espacios Métricos Ejemplo Vocabulario (preposiciones del castellano) a, ante, bajo, cabe, con, contra, de, desde, durante, en, entre, hacia, hasta, mediante, para, por, segun, sin, so, sobre, tras, versus, via Pivotes (M=8, coef=0.6) a, contra, desde, durante 27 Recuperación de Textos ODD - Curso Servetto SSS Búsqueda de términos cercanos a “cave” con radio de tolerancia menor o igual a 1: t a ante bajo cabe con contra de desde durante en entre hacia hasta mediante para por segun sin so sobre tras versus via 29 d(t, 'a') d(t, 'contra') 0 3 3 3 3 5 2 5 6 2 5 4 4 7 3 3 5 3 2 5 3 6 2 Recuperación de Textos d(t, 'desde') 5 4 6 5 3 0 6 6 6 5 3 5 4 7 4 4 6 5 5 4 4 6 5 d(t, 'durante') 5 4 5 4 5 6 3 0 5 4 4 5 4 6 5 5 4 4 4 4 5 4 5 6 3 6 5 6 6 5 5 0 6 5 6 5 4 5 6 6 6 4 6 5 6 6 • Firma de “cave” (d(„cave‟, „a‟), d(„cave‟, „contra‟), d(„cave‟, „desde‟), d(„cave‟, „durante‟)) = (3, 5, 4, 5) • Comparaciones „a‟: |3-0|>1 descartado „ante‟: |3-3| 1, |5-4| 1, |44| 1, |5-3|> 1 descartado „bajo‟: |3-3| 1, |5-6| 1, |45| 1, |5-6| 1 dist(„cave‟, „bajo‟) = 3 fallo „cabe‟: |3-3| 1, |5-5| 1, |44| 1, |5-5| 1 dist(„cave‟, „cabe‟) = 1 éxito … ODD - Curso Servetto t a ante bajo cabe con contra de desde durante en entre hacia hasta mediante para por segun sin so sobre tras versus via 28 d(t, 'a') d(t, 'contra') 0 3 3 3 3 5 2 5 6 2 5 4 4 7 3 3 5 3 2 5 3 6 2 d(t, 'desde') 5 4 6 5 3 0 6 6 6 5 3 5 4 7 4 4 6 5 5 4 4 6 5 d(t, 'durante') 5 4 5 4 5 6 3 0 5 4 4 5 4 6 5 5 4 4 4 4 5 4 5 Recuperación de Textos 6 3 6 5 6 6 5 5 0 6 5 6 5 4 5 6 6 6 4 6 5 6 6 Cada registro contiene las distancias de un término t a todos los pivotes, y se denomina la “firma” de t. Para obtener los términos t con distancia menor o igual a r (radio de tolerancia) de uno en particular q, se calcula la distancia de q a todos los pivotes, y si para algún pivote p se cumple |d( q, p) – d(t, p)|> r no es necesario calcular d(q, t). Se calcula la distancia de todo término no descartado con q, y si es mayor que 0 y menor o igual que r se muestra como resultado. ODD - Curso Servetto Clusters p radio (t, d(t, p))+ Para obtener los términos t con distancia menor o igual a r de uno en particular q, se calcula la distancia de q a todos los pivotes, y si para algún pivote p se cumple a 4 (a, 0), (bajo, 3), (cabe, 3), (de, 2), (en, 2), (hacia, 4), (para, 3), (por, 3), (sin, 3), (so, 2), (tras, 3), (via, 2) contra 3 (con, 3), (contra, 0), (entre, 3) se descarta el cluster de p. desde 4 (desde, 0), (hasta, 4), (segun, 4), (sobre, 4), (versus 4) durante 4 (ante, 3), (durante, 0), (mediante, 4) Dentro del cluster no descartado de un pivote p, se descartan los términos t tales que 30 Recuperación de Textos d( q, p) > r + radio |d( q, p) – d(t, p)|> r ODD - Curso Servetto 5 16/10/2012 Búsqueda de términos cercanos a “cave” con radio de tolerancia menor o igual a 1: Clusters p d(„cave‟, „a‟) = 3 1+4 se explora el cluster con centro en „a‟ radio (t, d(t, p))+ a 4 contra 3 (con, 3), (contra, 0), (entre, 3) desde 4 (desde, 0), (hasta, 4), (segun, 4), (sobre, 4), (versus 4) durante 4 (ante, 3), (durante, 0), (mediante, 4) d(„cave‟, „contra‟) = 5 > 1+3 se descarta el cluster con centro en „contra‟ d(„cave‟, „desde‟) = 4 1+4 se explora el cluster con centro en „desde‟ Tamaño de Firmas Construcción de Porciones … d(„cave‟, „durante‟) = 5 1+4 se explora el cluster con centro en „durante‟ … Recuperación de Textos 31 Índices de Porciones de Firmas |3-0|>1, |3-3| 1 d(„cave‟, „bajo‟)=3 (fallo), |3-3| 1 d(„cave‟, „cabe‟)=1 (éxito), |2-1| 1 d(„cave‟, „de‟)=3 (fallo), … (a, 0), (bajo, 3), (cabe, 3), (de, 2), (en, 2), (hacia, 4), (para, 3), (por, 3), (sin, 3), (so, 2), (tras, 3), (via, 2) ODD - Curso Servetto 32 Recuperación de Textos Tamaño de Firmas Construcción de porciones Para la determinación del tamaño de las firmas se debe tener Firmas con funciones de dispersión una idea aproximada del tamaño del vocabulario Para una única función de dispersión, se debería prever al menos tantos bits cuantos términos tenga el vocabulario Para minimizar las colisiones, se puede ampliar la cantidad de bits, con lo cual no se evitarían totalmente, o duplicar la cantidad de bits y agregar una segunda función de dispersión para resolver las colisiones También se puede pensar firmas en las que cada término tenga asociado un bit exclusivo: mapas de términos (representación vectorial de documentos) Recuperación de Textos 33 Ejemplo 1. 2. 3. 4. Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida después de laVida ODD - Curso Servetto f1(„cosas‟)=2 f1(„vida‟)=3 f1(„bella‟)=4 f1(„querer‟)=2 (1, 2), (1, 6), (1, 3), (1, 8), (2, 3), (2, 8), (2, 4), (2, 5), (3, 2), (3, 6), (3, 2), (3, 5), (4, 3), (4, 8), (4, 3), (4, 8) Archivo de unos en porciones: (1, 2), (3, 2), (3, 2), (1, 3), (2, 3), (4, 3), (4, 3), (2, 4), (2, 5), (3, 5), (1, 6), (3, 6), (1, 8), (2, 8), (4, 8), (4, 8) Recuperación de Textos Para cada término relevante t Se ordena el archivo temporal de unos en firmas por nb+idDoc obteniéndose un archivo de unos en porciones 3. Se recorre secuencialmente el archivo de unos en porciones y para cada nb (número de porción), se ponen en uno los bits en las posiciones idDoc de la porción (previamente se debe haber inicializado la porción con todos sus bits en cero) Recuperación de Textos 34 ODD - Curso Servetto Ejemplo 1. 2. 3. 4. Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida después de laVida f1(„cosas‟)=2 f1(„vida‟)=3 f1(„bella‟)=4 f1(„querer‟)=2 f2(„cosas‟)=6 f2(„vida‟)=8 f2(„bella‟)=5 f2(„querer‟)=5 Consulta: cosas querer Firma Consulta: 01001100 unos en porciones 2, 5 y 6 Firmas (no se construyen) 1: 01100101 Porciones 2: 00111001 1: 0000 3: 01001100 2: 1010 4: 00100001 3: 1101 Porciones: 1: 0000 2: 1010 3: 1101 4: 0100 5: 0110 6: 1010 7: 0000 8: 1101 4: 0100 5: 0110 6: 1010 7: 0000 8: 1101 ODD - Curso Servetto Para cada función de dispersión f, se registra (idDoc, nb) en un archivo temporal de unos en firmas, donde nb=f(t) (número de bit) 2. f2(„cosas‟)=6 f2(„vida‟)=8 f2(„bella‟)=5 f2(„querer‟)=5 colisión Para cada documento idDoc 1. Como el vocabulario es de tamaño 4, se considera una firma de tamaño 8 con dos funciones de dispersión, f1 con imagen en 1..4, y f2 con imagen en 5..8: Archivo de unos en firmas (idDoc, nb): 35 ODD - Curso Servetto 36 Recuperación de Textos colisión Resolución: 2: 1010 and 5: 0110 0010 and 6: 1010 0010 Las posiciones de los unos en el resultado de la conjunción de porciones implican los idDoc que potencialmente responden a la consulta ODD - Curso Servetto 6 16/10/2012 Ejemplo Mapas de Términos Recuperación de Textos 37 1. 2. 3. 4. Dados el conjunto de documentos D = { d1, d2, ... dN } y el de todos los términos relevantes en documentos de D, T = { t1, t2, ... tH }, la firma de cada documento dj es una secuencia de bits p(t1, dj), p(t2, dj), ... p(tH, dj) donde p(ti, dj) es la presencia del término i en el documento j (1 si está, 0 si no) El índice se almacena por porciones de firmas, es decir, cada registro i es una secuencia de bits p(ti, d1), p(ti, d2), ... p(ti, dN) Las porciones se construyen de igual forma que las listas invertidas del modelo booleano, es decir, se requiere un árbol o diccionario para el vocabulario con registros ((t)i, idT), el archivo de términos por orden de aparición para determinar idT, y el archivo de ocurrencia de términos en documentos para construir las porciones ODD - Curso Servetto Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida después de laVida 39 Resolución: 1: 1010 and 4: 0010 0010 Recuperación de Textos (bella, 3), (cosas, 1), (querer, 4), (vida, 2) 1cosas 2vida 3bella 4querer Archivo de ocurrencia de términos en documentos (idDoc, idT): (1, 1), (1, 2), (2, 2), (2, 3), (3, 1), (3, 4), (4, 2), (4, 2) Ordenamiento por idT+idDoc: Porciones 1: 1010 2: 1101 3: 0100 4: 0010 (1, 1), (3, 1), (1, 2), (2, 2), (4, 2), (4, 2), (2, 3), (3, 4) 38 Recuperación de Textos ODD - Curso Servetto Ventajas de los Mapas de Términos Vocabulario: (bella, 3), (cosas, 1), (querer, 4), (vida, 2) No produce “falsos positivos” como las firmas con funciones de dispersión Consulta: cosas querer Al mantener el índice de vocabulario y el archivo de Archivo de términos por orden de aparición: 1cosas 2vida 3bella 4querer Porciones: 1: 1010 2: 1101 3: 0100 4: 0010 Vocabulario: Archivo de términos por orden de aparición: Ejemplo 1. 2. 3. 4. Las Cosas de laVida LaVida es Bella Las Cosas del Querer LaVida después de laVida términos por orden de aparición, admite índices secundarios La resolución de consultas es menos costosa que en índices Firma Consulta: 1001 unos en porciones 1 y 4 booleanos Las posiciones de los unos en el resultado de la conjunción de porciones implican los idDoc que potencialmente responden a la consulta ODD - Curso Servetto 40 Recuperación de Textos ODD - Curso Servetto 7