Ad verba per numeros

Hojas de ruta
Wednesday, March 26, 2008, 10:54 AM
En un post anterior describí un proyecto fin de carrera relativo a la visualización de grafos; dichos grafos son redes asociativas que vinculan conceptos (en realidad términos) generadas a partir de texto plano. Como ya dije, los nodos de las redes son palabras (p.ej. weeping) aunque lo que verdaderamente nos interesa son conceptos que pueden contener varias palabras (p.ej. The Weeping Woman). También dije que el texto utilizado eran artículos vinculados con Pablo Picasso procedentes de la Wikipedia en lengua inglesa (copia local).

La primera tarea consiste en procesar dicho texto y obtener la lista de conceptos. Aprovechando que la Wikipedia es texto semiestructurado habría que tratar de obtener de los artículos lo siguiente:

  1. Los títulos de los artículos.
  2. El texto de los enlaces que apunten a otros artículos de la Wikipedia.
  3. El título de los artículos enlazados.
  4. El texto de los enlaces que apuntan a artículos que aún no existen (los "enlaces rojos" ).
  5. Naturalmente, si se os ocurre alguna otra idea para encontrar más conceptos aunque no aparezcan en los enlaces soy todo oídos :)
Por ejemplo, si se trabajase sobre el texto del artículo sobre Pablo Picasso se obtendrían, entre otros, los siguientes conceptos en cada categoría:
Título de artículo:
Pablo Picasso
Texto de los enlaces que apuntan a otros artículos:
Picasso (disambiguation), October 25, 1881, April 8, 1973, Spanish, painter, draughtsman, ...
Título de los artículos enlazados:
Picasso (disambiguation), October 25, 1881, April 8, 1973, Spanish people, Painter, Drawing, ...
El texto de los "enlaces rojos":
La vie, The Frugal Repast, ...
Como se puede ver en algunos casos el texto del enlace y el título del artículo no coinciden (p.ej. en el texto se apunta al artículo Spanish people pero en el texto sólo aparece Spanish); hay que tener en cuenta que estas relaciones entre conceptos deberían mantenerse aunque no son necesariamente sinónimos (p.ej. draughtsman y drawing, dibujante y dibujo, respectivamente) ni tampoco tienen por qué ser dobletes (esto es, palabras diferentes pero con la misma etimología como delicado y delgado en castellano). Por el momento, denominaremos a dichos conjuntos de palabras relativesets (por analogía con los synsets --conjuntos de sinónimos-- de Wordnet). De este modo al procesar el artículo sobre Pablo Picasso de obtendrían, entre otros, los siguientes relativesets:
  • Pablo Picasso
  • Picasso (disambiguation)
  • October 25
  • 1881
  • April 8
  • 1973
  • Spanish, Spanish people
  • painter, Painter
  • draughtsman, Drawing
  • La vie
  • The Frugal Repast
  • ...
Por el momento también se respetarán las diferencias entre mayúsculas y minúsculas así como páginas especiales de la Wikipedia que no son necesariamente artículos (como por ejemplo las páginas de desambiguación).

La cuestión ahora es qué lenguaje utilizar para procesar ese conjunto de archivos HTML. Mi recomendación es utilizar un lenguaje de scripting como PHP, Python o Ruby; cualquiera de ellos ofrece métodos y/o funciones para trabajar con cadenas de texto y expresiones regulares que os permitirían extraer esa información. Otra alternativa es convertir el HTML en XHTML y utilizar un parser XML.

En resumen, vuestro primer trabajo consiste en implementar uno o más scripts que permitan obtener elativesets para la colección de artículos sobre Picasso que os podéis descargar aquí. Documentad en el wiki lo que vais haciendo, comentad en el blog vuestros avances y/o problemas y escribidme para las dudas urgentes.



Back Next