Saltar a contenido

Leer Wikipedia

Una biblioteca de NLP no sirve de nada sin texto sobre el que trabajar. esperantilo obtiene ese texto de Wikipedia con WikiPage, ya limpio de marcado wiki.

from esperantilo import WikiPage

page = WikiPage.look_up("Esperanto", language="eo")

page.title          # 'Esperanto'
page.qid            # 'Q143'
len(page)           # número de secciones

Títulos, conceptos e idiomas

Un artículo existe una vez por idioma, y el mismo concepto es una página distinta en cada uno: Parsley, Perejil y Petroselo son tres artículos sobre una misma planta. Lo que los une es el QID, el identificador que Wikidata da al concepto en sí: el perejil es Q26980, en todos los idiomas.

look_up se apoya en eso. Resuelve el título a un concepto y luego lee el artículo correspondiente, así que el idioma en el que buscas y el idioma en el que lees no tienen por qué coincidir:

WikiPage.look_up("Perejil", language="eo").title
# 'Petroselo'

El título se busca primero en language y después en cada uno de fallback_languages, siguiendo las redirecciones. El artículo llega en language si esa wiki lo tiene, o en el primer idioma de reserva que lo tenga —así que comprueba page.language, que puede no ser el código que pediste.

Si ningún idioma de la lista conoce el título, any_language=True (el valor por defecto) recurre a buscar en Wikidata en todos los idiomas. Ese paso es una búsqueda, no una consulta: encuentra algo para casi cualquier palabra plausible, y lo que encuentra no es necesariamente lo que querías. Usa any_language=False para obtener un ValueError en lugar de una conjetura.

Secciones

El cuerpo es un diccionario de encabezado a texto, en el orden en que aparecen en el artículo. Solo los encabezados de primer nivel abren una sección; los más profundos quedan dentro del texto de la sección que los contiene. Wikipedia deja la entradilla sin título, así que se guarda bajo el título del artículo.

page.section_names          # ['Esperanto', 'Historio', 'Gramatiko', …]
page.section("historio")    # se compara ignorando mayúsculas
page["Historio"]            # lo mismo
"Historio" in page          # True
page.full_text()            # todas las secciones, con sus encabezados

Qué puede fallar

Situación Qué ocurre
Ningún idioma de la lista conoce el título ValueError
El concepto no tiene artículo en ninguno de ellos ValueError
No hay ninguna sección con ese nombre KeyError
Sin conexión, tiempo agotado, error de la API requests.RequestException

ValueError significa «la página no está ahí». Todo lo que tenga que ver con la red aparece como una excepción de requests, de modo que se pueden capturar por separado.

Cada consulta cuesta entre una y ocho peticiones HTTP, según cuántos idiomas haya que probar. No hay caché: llamar dos veces a look_up con los mismos argumentos lo descarga todo dos veces.

Licencia

El texto de Wikipedia es CC BY-SA. Si republicas lo que obtengas, conserva la atribución y la licencia; page.url es el enlace que hay que citar.

Idiomas

Esta es una lista de algunos de los idiomas más utilizados, y sus códigos de Wikipedia:

Idioma Código
Esperanto eo
Inglés en
Español es
Francés fr
Alemán de
... ...

La lista completa de códigos está en Wikipedia:Lista de códigos de idioma.

Véase también