Recuperación de información
Information Retrieval
Raquel Trillo Lado ([email protected])
Sistemas de Información Distribuido(http://sid.cps.unizar.es)
Raquel Trillo, 13 de marzo
Guión: Recuperación de Información
Recuperación de información en grandes corpus documentales

Introducción

Arquitectura genérica de un sistema de Recuperación de
información

El modelo booleano

El modelo vectorial

El modelo probabilístico

Los índices invertidos

Técnicas de compresión
Recuperación de información en la web

Introducción: directorios y buscadores

Funcionamiento de los buscadores web

Las bibliotecas digitales
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
RI trata el problema de recuperar los documentos relevantes a
una necesidad de información expresada en forma de consulta
(query) dada una colección de documentos (texto no
estructurado).

Ejemplo 1:
 Corpus: Noticias publicadas en un determinado periódico
 Consulta (query): Las noticias acerca de los partidos Barcelona-Madrid

Ejemplo 2:
 Corpus: Historial médico de todos los aragoneses
 Consulta (query): Área donde viven los enfermos afectados por legionela
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
En la mayoría de los casos no basta un simple emparejamiento
de patrones (pattern matching).

Ejemplo 1:
 Un documento en el que aparezcan las palabras Barcelona, Madrid y
partido de futbol no tiene porque ser relevante a la consulta.

Ejemplo 2:
 Un documento en el que no aparezcan las palabras legionela enfermo
puede ser relevante para la consulta.
 Un documento en el que se hable de síntomas de neumonía en un paciente
puede ser relevante
 Un documento donde se denomine a la enfermedad con el nombre
científico Legionella pneumophila.
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
Es un problema distinto al abordado en el campo de las BDs:

Se trata con objetos (datos) que tienen una estructura y semántica bien
definida a través del modelo relacional o modelo entidad-relación

Existe un lenguaje de consulta definido para recuperar los datos: el
álgebra relacional o el sql.

Ejemplo 1:
 Una base de datos donde se almacenaran los partidos de futbol de los
últimos años.
 Select * from partido where local=‘Barcelona’ and visitante=‘Madrid’;
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
Un modelo de RI se compone de:

Un formalismo para representar documentos y consultas (queries)

Una medida de similaridad entre un documento y una consulta.
Existen diferentes modelos:

Modelo Booleano.
 El primero por lo tanto el más antiguo

Modelos vectoriales

Modelos probabilísticos
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
Para evaluar la efectividad de los modelos y técnicas de RI:

Precision: nº de doc. relevantes recuperados/ nº total de doc. recuperados

Recall: nº de doc. relevantes recuperados/ nº total de doc. Relevantes
Corpus documental
Doc. Recuperados
Documentos relevantes

Curva precision/recall: Calcular la precisión para distintos niveles de recall

Corpus TREC y la competición
Raquel Trillo, 13 de marzo
RI en corpus documentales
Introducción
Además de ser efectivo un sistema de RI debe ser:

Eficiente (rápido, bajo coste en espacio, ...)
RI no sólo trata modelos para representar documentos y
consultas (queries) sino también:

Métodos de almacenamiento de documentos
 Métodos de compresión.
 Métodos de indexación de documentos

Métodos de organización de documentos
 Almacenamiento de metadatos y búsquedas de metadatos
 Clasificación automática de documentos (text classification)
 Agrupamiento de documentos similares (clustering)
Raquel Trillo, 13 de marzo
Arquitectura genérica de un sistema
de Recuperación de información
Interfaz de
Usuario
Texto
documentos
Texto
Interfaz de usuario
consulta
Módulo de operaciones
Representación
Módulo de operaciones
de texto
Representación
de documentos
de queries
Buscador
Módulo de gestión
Indexador
Ficheros de
Ranking
índices invertidos
Índices sobre
los documentos
Raquel Trillo, 13 de marzo
Colección de
documentos
Arquitectura genérica de un sistema
de Recuperación de información
Módulo de gestión de documentos

Parsear los documentos que forman la colección para extraer
información de ellos (autor, título, palabras clave, extraer metadatos,
clasificar los documentos...)

Acceder a los documentos o a la información asociada a estos
Módulo de operaciones de texto

Transformar el documento original en una representación del mismo
(vista lógica):
 En general la vista lógica consiste en una secuencia de términos (terms).
Técnicas tradicionalmente empleadas son las stoplist y los stemmers
 Otras técnicas empleadas: Procesamiento de lenguaje natural (NLP),
obtención de estadísticas por ejemplo para obtener el sentido de una
determinada palabra o para obtener representaciones basadas en pares de
términos como ‘data bases’.
Raquel Trillo, 13 de marzo
Arquitectura genérica de un sistema
de Recuperación de información
Módulo de operaciones de texto

Transformar la consulta (query) original en una representación de la
misma (vista lógica). Esto no se aplica en todos los modelos.
Módulo de indexación

Construir índices sobre los documentos.
 Los más conocidos y probados son los ficheros invertidos o índices
invertidos.
 La unidad de indexación es el término (term): una palabra, una frase,
conjunto de palabras o frases o una raíz (stem)

Los recursos de tiempo y espacio que conllevan la creación de índices se
amortizan en la recuperación.
Raquel Trillo, 13 de marzo
Arquitectura genérica de un sistema
de Recuperación de información
Módulo de operaciones de queries:

Expansión de términos de la representación (vista lógica) de la query.
 Ejemplo: ‘coche’ pasa a ser ‘coche o auto o carro’
 Pueden obtenerse mediante:


Recursos lingüísticos como Thesaurus Léxicos (WordNet)

Otros recursos como ontologías

Mediante un proceso de relevance feedback por parte del usuario
Eliminación de términos
Módulo de búsqueda

Busca en los índices para lograr matchings entre las representaciones de
los documentos y la query.
Raquel Trillo, 13 de marzo
Arquitectura genérica de un sistema
de Recuperación de información
Módulo de ranking:

Ordena los documentos recuperados de acuerdo con la relevancia
respecto a la query

A veces también se cierra el ciclo aquí con relevance feedback.
Otros módulos: Compresores

Para reducir el espacio que ocupa el almacenamiento de los documentos
y los índices

Fundamentalmente se distingue entre técnicas de compresión que
permiten la búsqueda sobre texto comprimido y entre las que no. (Las
primeras son más eficientes)
Raquel Trillo, 13 de marzo
Modelo Booleano
1º modelo de recuperación de información
Se utilizó en:

Bibliotecas: Buscar información en los resúmenes (abstracts) de los
libros.

Documentos legales en E.E.U.U., el sistema Lexis Nexis.

Documentos médicos.
Cada documento se representa por una lista de bits (0 o 1) que
indican si en ese documento aparece determinado término o no.

Ejemplo 1:
 Lista de términos: CASA, ES, VERDE, AZUL, AMARILLA, CARA,
BARATA.
 Documento: “Mi casa es amarilla y barata” -> vista lógica (1,1,0,0,1,0,1)
 Consulta 1 (query): Casa and barata -> (1,0,0,0,0,0,1)
Raquel Trillo, 13 de marzo
Modelo Booleano
 Consulta 2 (query): Casa and (amarilla or azul) -> (1,0,0,1,0,0,0) or
(1,0,0,0,1,0,0)

Ejemplo 2:
 Consulta (query): (coste OR precio) AND papel
 Documento 1: “El coste del papel aumentó un 5%” (Documento relevante)
 Documento 2: “El precio de los alimentos aumentó” (Documento no relevante)
Ventajas:

Existen implementaciones eficientes mediante operaciones con bits
e índices invertidos
Problemas:

Dificultad de los usuarios para expresar queries booleanas

Recupera muy pocos documentos o demasiados
Raquel Trillo, 13 de marzo
Modelo Booleano Extendido
En lugar de considerar sólo 0 y 1 en los vectores considera la
frecuencia con que aparece un término en un documento.
Ventajas:

Se puede hacer un ranking de los documentos recuperados: los que tienen
frecuencias más altas en los términos indicados por el usuario/a van antes
que los documentos con menos apariciones en dichos términos.

Dio lugar al Modelo Vectorial (Vector Space Model)
Raquel Trillo, 13 de marzo
Modelo Vectorial
Marcó el inicio de la investigación en el campo de la RI.
Ofrece altas prestaciones y permite ranking.
Las queries y los documentos se representan mediante vectores.

Dimensión del espacio vectorial es la cardinalidad del conjunto de
términos

En modelos avanzados se usan técnicas de reducción de las dimensiones

Cada dimensión representa la frecuencia para cada término (El nº de
veces que aparece un término en un documento)

Ejemplo:
 Considerar un vocabulario de 3 términos A, B y C
 Sean Di documentos tales que: - D1 contiene los términos A, B y C una vez
- D2 contiene el término A una vez
- D3 contiene los términos A y B una vez
Raquel Trillo, 13 de marzo
Modelo Vectorial
B
D1
D3
D2
A
C
Para obtener el ranking se considera la similaridad a través del
coseno del ángulo que forman la query y los documentos.
Raquel Trillo, 13 de marzo
Modelo Vectorial
Si X e Y son dos vectores y alfa el ángulo que forman:

X Y = |X| |Y| cos (alfa)

Cos (alfa) = X Y / |X| |Y|

Cos (alfa) € [0-1]
 Cuanto más parecidos sean X e Y más próximo a 1 será el cos (alfa)
 Cuanto más diferentes sean X e Y más próximo a 0 estará el cos(alfa)
Ejemplo:

Consulta (query) q: documentos con A y B

q = <1,1,0>

D1 = <1,1,1>

D2 = <1,0,0>

D3 = <1,1,0>
Raquel Trillo, 13 de marzo
Modelo Vectorial

q D1 = 1 1 + 1 1 + 0 1 = 2

|q| = sqrt(1^2 + 1^2 + 0^2) = sqrt(2)

|D1| = sqrt(1^2 + 1^2 + 1^2) = sqrt(3)

Cos(q y D1) = 2/(sqrt(2) sqrt(3)) = 2 / (1.414 )(1.732) = 2 / 2.449 = 0,81

q D2 = 1 1 + 1 0 + 0 0 = 1

|D2| = sqrt(1^2 + 0^2 + 0^2) = sqrt(1)=1

Cos(q y D2) = 1/(sqrt(2) 1)= 1/sqrt(2)= 1 / 1.414 = 0.707

q D3 = 1 1 + 1 1 + 0 0 = 2

|D3| = sqrt(1^2 + 1^2 + 0^2) = sqrt(2)

Cos(q y D3) = 2/(sqrt(2) sqrt(2))= 2 / 2 = 1
Raquel Trillo, 13 de marzo
Modelo Vectorial
Existen muchas variantes considerando otras medidas de
similitud:

Dice: similaridad (X, Y) = (2 X Y )/ (X^2 Y^2)

Jaccard: similaridad (X, Y) = (X Y) / (X^2 + Y^2 - |X||Y|)
Otras variantes:

En lugar de considerar la frecuencia de los términos (tf: term frequency)
consideran la frecuencia inversa de los términos (idf).
 Las palabras de menor frecuencia en un documento son más informativas

Utilizar log(idf) en lugar de valores absolutos
 Con frecuencias bajas las considera muy similares, sin embargo las
frecuencias altas las considera muy distantes (No es lo mismo cambiar de 1 a
2 que de 25 a 26, le da más importancia al cambio de 25 a 26)
Raquel Trillo, 13 de marzo
Modelo Vectorial
Ventajas:

Poco coste computacional

Muy popular: SMART (Sistema libre)

Alto rendimiento
Inconvenientes:

Asume independencia de términos (cada dimensión se trata de forma
independiente de las otras)

No tiene en cuenta el tamaño de los documentos (en documentos más
grandes es más probable encontrar más términos)
Raquel Trillo, 13 de marzo
Modelo probabilístico
Estrategia adaptativa, las anteriores eran representativas y tiene
un mayor fundamento lógico-matemático (las anteriores se
basaban en heurísticas).
Estudia la probabilidad de relevancia dada una query q y un
documento Di:

Probabilidad (Di sea relevante a q/ Di tiene las características X) =
= p(rel/x)
Hace el ranking de los documentos recuperados ordenándolos
según la probabilidad de relevancia.
Raquel Trillo, 13 de marzo
Índices invertidos
Son una estructura eficiente para almacenar datos a los que se
necesita acceder.
Son independientes del modelo de RI que se use
A cada término relevante de los documentos (del vocabulario) se
le asocian los documentos en los que aparece y el offset dentro
de estos donde está.
Compromiso entre coste de construir el índice y aumento de la
velocidad de acceso a la información

Corpus de más de 200 Mb compensa.
Raquel Trillo, 13 de marzo
Técnicas de compresión
En la última década la cantidad de colecciones de texto ha
crecido exponencialmente


La web ha explotado llegando a ser una gran base de datos de texto.
Hay numerosas bases de datos documentales específicas (linguisticas,
jurisprudencia, datos coorporativos, bibliotecas digitales, etc.)
Las técnicas de compresión ahorran espacio y tiempo de
transmisión.
Las técnicas de compresión clásicas como Ziv-Lempel no son
adecuadas para bases de datos de textos porque en general no
permiten búsquedas en texto comprimido.
Las nuevas técnicas si permiten buscar en texto comprimido.
Raquel Trillo, 13 de marzo
Técnicas de compresión
Diferentes tipos de códigos:

Códigos orientados a carácter (Huffman)
 En primer lugar se calcula la frecuencia de cada símbolo del vocabulario
 Los símbolos más frecuentes se codifican con palabras más cortas
 Es un código de lóngitud variable y de prefijo libre

Códigos orientados a palabras (Plain Huffman)
 Similar al anterior pero considera como vocabulario las palabras en lugar de
los símbolos.
 Cada código es una secuencia de bytes en lugar de bits
 En general se obtiene un ratio de compresión mayor que codificando
símbolos.

Tagged Huffman y End Tagged Dense Code.
 Nuevas técnicas Laboratorio Bases de Datos Universidad de A Coruña
Raquel Trillo, 13 de marzo
RI en corpus documentales
Bibliografía:

Information Retrieval, Ricardo Baeza-Yates
 2 volúmenes. Cubre algoritmos de stemming y búsqueda de cadenas

Managing Gigabytes, Moffat and Zobel
 Cubre detalles de implementación de RI y Recuperación de imágenes.

Information Retrieval, Gerard Salton
 Es un libro clásico, la última versión es de 1989

Information Retrieval, Jerry Kowalski
 Un buen resumen de las arquitecturas de los sistemas de RI.
Raquel Trillo, 13 de marzo
RI en corpus documentales
Otras fuentes: Conferencias:

SIGIR (Conference on Research & Development on Information
Retrieval)

SIGMOG (International Conference Management of Data)

CIKM (Conference on Information and Knowledge and Management)
Otras fuentes: Revistas:

Journal of the American Society of Information Science (JASIS)

ACM Transactions on Information Systems
Raquel Trillo, 13 de marzo
Guión: Recuperación de Información
Recuperación de información en grandes corpus documentales

Introducción

Arquitectura genérica de un sistema de Recuperación de información

El modelo booleano

El modelo vectorial

El modelo probabilístico

Los índices invertidos

Técnicas de compresión
Recuperación de información en la web

Introducción: directorios, buscadores, metabuscadores, buscadores
semánticos

Funcionamiento de los buscadores web

La web oculta
Raquel Trillo, 13 de marzo
Arquitectura genérica de un sistema
de Recuperación de información
Crawlers o
arañas
Usuario
Texto
Texto
Interfaz de usuario
consulta
Módulo de operaciones
Representación
Módulo de operaciones
de texto
Representación
de documentos
de queries
Buscador
Módulo de gestión
Indexador
Ficheros de
Ranking
índices invertidos
Índices sobre
los documentos
Raquel Trillo, 13 de marzo
Colección de
documentos
Recuperación de información en
la web: Introducción
Directorios de búsqueda:

Organización manual de las páginas en unas categorías.

Ejemplos:
 Yahoo empezó siendo un directorio de búsqueda
 Hoy en día la mayoría de los buscadores mantienen también un directorio.

Inconvenientes: Organización manual y cubren una parte muy pequeña
de la web
Motores de búsqueda o buscadores:

Los motores de búsqueda son sistemas que buscan en Internet cuando
les pedimos información sobre algún tema. Normalmente por palabras
clave.

Ejemplos:
 Altavista, Google, Alltheweb....
Raquel Trillo, 13 de marzo
Recuperación de información en
la web: Introducción
Metabuscadores:

Definición: Buscadores que buscan en buscadores y luego integran sus
resultados en tiempo real.

Se han utilizado para mejorar la relevancia en buscadores en Internet.
Mediante algoritmos de ponderación: MetaCrawler, SavvySearch,
Multibuscador,...

En entorno corporativo surgen como soluciones de ‘búsqueda federada’

Dificultades:
 Traducción de consultas del formato general al de la fuente: Traducción de
sintaxis y postprocesados
 Construcción de ‘envoltorios’ sobre los buscadores origen.
 Relevancia ponderada de resultados: relevancia del origen, de la fuente...
 Eficiencia en las consultas
Raquel Trillo, 13 de marzo
Recuperación de información en
la web: Introducción
Buscadores semánticos:

Son buscadores que tienen en cuenta los distintos significados
semánticos de las palabras.

Ejemplo:
 Java puede referirse a la ciudad, al lenguaje de programación o incluso al
café...

Ejemplos:
 Vivísimo, SemSearch,...
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Motores de Recuperación de información web:

Construcción de un gran índice de palabras sobre todos los documentos
del web estático.

Búsquedas por palabras clave o keywords sobre el índice, obteniendo
granularidad de documento.
Problemas adicionales de investigación:

Construcción del índice (arañas o crawling)

Distribución del índice (gran volumen de información)

Algoritmo de ejecución distribuida de consultas.

Algoritmos de relevancia mucho más críticos. Hay que sacar partido de
la estructura proporcionada por los hiperenlaces

Problema de la web oculta (todavía sin resolver)
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Motores de Recuperación de información web:

Ejemplo clásico: Altavista.
 Arquitectura basada en grandes servidores -> No escala
 Algoritmos de relevancia de las páginas basados en los tradicionales de
bases de datos documentales -> Se inundaron por la cantidad de
información. Además contar los hiperenlaces no resuelve el problema
porque algunas páginas son muy comunes en cualquier contexto.
 Sólo tratan la web estática

Ejemplo avanzado: Google
 Arquitectura distribuida basada en miles de estaciones de bajo precio
 Algoritmos de relevancia que sacan partido de la estructura basada en
hiperenlaces de formas más sofisticadas.
 Siguen limitándose a la web estática aunque investigan en la línea de la
web oculta.
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Google debe su éxito al pagerank:

Los enlaces son considerados como ‘citas’ de otros documentos.

Se asumen como más relevantes lo documentos más citados.

También importa quién es el que te cita.

Una página tiene un pagerank alto si tiene muchas páginas que la
apuntan o la apuntan páginas con un PageRank alto (“Hubs”).

El texto en los enlaces se asocia también a la página destino.
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Relevancia basada en hiperenlaces fue: HITS

Búsqueda previa sobre un índice pre-construido.

Algorimo iterativo sobre los enlaces entre documentos.
 Hubs son páginas que enlazan muchas ‘páginas buenas’ (autoridades)
 Autoridades son páginas enlazadas desde muchos ‘referentes buenos’.
(hubs).

Si buscamos autoridades relacionadas con un cierto tema, no llega con que
sean páginas apuntadas desde muchas otras: debe existir cierto solape entre las
páginas que las apuntan (hubs).
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Procedimiento básico HITS:






Se realiza la búsqueda en un motor tradicional
Se expanden sus resultados con páginas que ‘son apuntadas’ por
páginas de los resultados y con páginas que ‘apuntan’ a páginas
resultados, hasta un cierto nivel de profundidad.
Cada página (nodo del grafo) comienza con un ‘peso de hub’ y un ‘peso
de autoridad’
En cada iteración, el peso de’autoridad’ de un nodo se calcula como la
suma del ‘peso de hub’ de la iteración anterior de los nodos que lo
apuntan.
El ‘peso de hub’ se calcula como la suma del ‘peso de autoridad’ de los
nodos a los que apunta.
Se demuestra que el algoritmo converge
Raquel Trillo, 13 de marzo
RI en web: Funcionamiento de
los buscadores web
Relevancia basada en hiperenlaces: PageRank

Idea similar a HITS

PR(A) = (1-d) + d(PR(t1)/C(t1)+...... (PR(tn)/C(tn))

T1,Tn son las páginas que apuntan a A

C(Ti) número de enlaces salientes de Ti.

D. ‘damping factor’ es 0.85.

Una página tiene un PageRank alto si la apuntan muchas páginas, o la
apuntan menos páginas pero con un PageRank muy alto.

Eficiente y no dependiente de búsqueda inicial como HITS.
Raquel Trillo, 13 de marzo
RI en web: La web oculta
Hace referencia a las páginas generadas dinámicamente:

Cliente: Javascript, HTML dinámico, applets, etc

Servidor: CGIs, Servlets, JSPs, ASPs, PHPs,..

Los crawlers tradicionales no pueden acceder a esta información:
 Dificil implementar soporte para JavaScript

Objetos del browser (navegador)

Frames

Etc
 ¿Cómo entender formularios, aprender a consultarlos y saber consultar en
ellos? ¿Problemas de acceso mediante claves?
Raquel Trillo, 13 de marzo
RI en web: La web oculta
Caracterización de la web oculta:

Entre 400 y 500 veces mayor que la web estática

Unos 300.000 sitios web

Sitios de la web oculta reciben en torno al 65% más de tráfico que los
sitios de la web estática.

Crece mucho más rápido que la web estática.

Más del 60% de los sitos son bases de datos de temas específicos que
proporcionan información de alta calidad.

Más del 80% de los datos están accesibles públicamente.
Raquel Trillo, 13 de marzo
RI en web: La web oculta
Avances en la web oculta cliente:

Aparecen primeros sistemas capaces de tratar JavaScript real.

El proceso de crawling pierde eficiencia (crawler es casi un browser),
con lo que su utilidad se restringe a problemas específicos.
Avances en la web oculta servidor:


Actualmente sólo mediante ‘wrappers’ o envoltorios ad-hoc para cada
fuente, o mediante acuerdos particulares.
Se parte de una especificación de dominio (por ejemplo: tiendas
electrónicas de libros)
 Se estudian los atributos: tipos de datos y nombres posibles
 Se dan ejemplos de datos reales
 Se configura especificamente el dominio
Raquel Trillo, 13 de marzo
RI en web: La web oculta
Avances en la web oculta servidor:

Se parte de una especificación de dominio (por ejemplo: tiendas
electrónicas de libros)
 Se estudian los atributos: tipos de datos y nombres posibles.
 Se dan ejemplos de datos reales.
 Se configura especificamente el dominio.

Tareas:
 Identificar automáticamente formularios relevantes.
 Aprender a realizar consultas sobre el formulario.
 Generar consultas relevantes partiendo de los ejemplos del dominio y de
los obtenidos de consultas previas.
Raquel Trillo, 13 de marzo
RI en web
Bibliografía:

Information Retrieval, Ricardo Baeza-Yates
 2 volúmenes. Cubre algoritmos de stemming y búsqueda de cadenas

Managing Gigabytes, Moffat and Zobel
 Cubre detalles de implementación de RI y Recuperación de imágenes.
Raquel Trillo, 13 de marzo
RI en web
Otras fuentes: Conferencias:

SIGIR (Conference on Research & Development on Information
Retrieval)

SIGMOG (International Conference Management of Data)

WWW (The International World Wide Web Conferences)

CIKM (Conference on Information and Knowledge and Management)

ESWC (European Semantic Web Conference)

ISWC (International Semantic Web Conference)
Raquel Trillo, 13 de marzo
Prácticas RI
Creación de un wrapper que acceda a una o varias páginas de
recetas de cocina y obtengan información acerca de ellas:

Los tipos de recetas que oferta

Los nombres de recetas de un determinado tipo

Los ingredientes de una determinada receta
Modificación del wrapper para que sea un agente SPRINGS.
Raquel Trillo, 13 de marzo
Raquel Trillo Lado ([email protected])
Sistemas de Información Distribuidos (http://sid.cps.unizar.es)
Muchas gracias.
Sugerencias y preguntas.
Raquel Trillo, 13 de marzo
Descargar

Entorno web para a Real Academia Galega