Sonetos en español¶
ests.datasets.SpanishSonnets
Descripción¶
Una colección de sonetos en español del Diachronic Spanish Sonnet Corpus (DISCO 5.0): 4259 sonetos de 1167 autores de España, Hispanoamérica y Filipinas, del siglo XV a principios del XX, 60 209 versos. Cada verso lleva su patrón métrico y la etiqueta de su rima, así que la colección sirve para estudiar la métrica y la rima y para contrastar una escansión con la anotación del corpus.
Los sonetos se reparten en cuatro periodos: 15th-17th (1088 sonetos), 18th (321), 19th (2845, una antología de España e Hispanoamérica) y 20th (5, del poeta filipino Cecilio Apóstol); 295 sonetos son de mujeres, y los autores nacieron en 22 países, la mayoría en España (2388 sonetos) y Cuba (719).
Solo se guardan los sonetos de dominio público, 4259 de 4523: los de los autores que murieron antes de 1946, los de los autores de los siglos XV-XVIII cuya muerte se desconoce y los de los autores de la antología del siglo XIX nacidos antes de 1866 o sin fechas; la mayoría de los poetas filipinos se quedan fuera. Un autor de la antología sin fechas también se queda fuera cuando las fechas de VIAF que DISCO asoció con confianza alta dan una muerte en 1946 o después o un nacimiento en 1866 o después sin muerte; VIAF solo deja fuera a un autor y nunca sustituye las fechas de la fuente. Los metadatos de DISCO se corrigen con la línea biográfica de la fuente: los años de vida donde DISCO tomó de ella un año posterior por el de la muerte o no vio un nacimiento o una muerte dados solos (Echegaray murió en 1916, no en 1904), el país de nacimiento donde la línea lo nombra (Gertrudis Gómez de Avellaneda nació en Cuba, no en Haití). Los poetas filipinos llevan el nombre antes del apellido, como los demás; los interlocutores de los diálogos ([Car], [POETA]) y las llamadas de las notas se quitan de los versos, ya que no están en sus patrones métricos.
El archivo (1 MB, un fichero JSON Lines) se guarda en el repositorio de la biblioteca y se descarga una vez en el directorio de datos; lo construye scripts/build_spanish_sonnets.py a partir de DISCO en un commit fijo.
Licencia y atribución
DISCO se publica con la licencia Creative Commons Reconocimiento 4.0 Internacional, y este conjunto de datos también; el archivo lleva un README.txt con la fuente y los cambios. Cite la fuente así: Ruiz Fabo P., Bermúdez Sabel H., Martínez Cantón C., Calvo Tello J. Diachronic Spanish Sonnet Corpus (DISCO), version 5.0. Madrid: UNED, 2017-2023; y el artículo: Ruiz Fabo P., Bermúdez Sabel H., Martínez Cantón C., González-Blanco E. The Diachronic Spanish Sonnet Corpus: TEI and linked open data encoding, data distribution, and metrical findings. Digital Scholarship in the Humanities 36 (Supplement 1), 2021, i68-i80, doi:10.1093/llc/fqaa035.
Parámetros¶
| Parámetro | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
data_dir |
str/Path | DEFAULT_DATA_DIR.joinpath("texts") |
Ruta al directorio del conjunto de datos; el directorio de datos se describe en Instalación |
Atributos¶
| Atributo | Tipo | Descripción |
|---|---|---|
periods |
tuple[str] | Tupla de periodos: 15th-17th, 18th, 19th, 20th |
authors |
Counter | Número de sonetos por autor, leído del fichero |
name |
str | Nombre del conjunto de datos, spanish_sonnets |
meta |
dict[str, str] | Información de referencia: la fuente, la descripción, los autores, la licencia y la cita |
info |
dict[str, str] | El nombre y la información de referencia en un diccionario |
data_dir |
Path | Ruta absoluta al directorio del conjunto de datos |
filepath |
str | Ruta al fichero del conjunto de datos, None antes de la descarga |
El conjunto de datos se recorre por sus registros como get_records() sin filtros: for record in ss pasa por los sonetos de uno en uno.
Métodos¶
check_data¶
Comprueba que el fichero del conjunto de datos está en su sitio y devuelve True; un conjunto sin descargar levanta DatasetNotFoundError. Los demás métodos lo comprueban por sí mismos.
download¶
Descarga el archivo, verifica su suma de comprobación SHA-256 y extrae el fichero. Un archivo dañado se descarga de nuevo, un fichero que falta se extrae otra vez; una llamada repetida no descarga nada.
| Parámetro | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
force |
bool | False |
Descargar el conjunto de datos aunque ya esté descargado |
Ejemplo
from ests.datasets import SpanishSonnets
ss = SpanishSonnets()
ss.download()
ss.info["license"], ss.authors.most_common(2)
# ('CC BY 4.0', [('Rubén Darío', 140), ('José Santos Chocano', 130)])
get_texts¶
Extrae los textos (sin encabezados) del conjunto de datos: los versos de un soneto, las estrofas separadas por una línea en blanco.
| Parámetro | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
period |
str | None |
Periodo: 15th-17th, 18th, 19th o 20th |
author |
str | None |
Autor: una subcadena del nombre, sin distinguir mayúsculas ni tildes |
country |
str | None |
País de nacimiento: una subcadena del nombre en español, sin distinguir mayúsculas ni tildes |
gender |
str | None |
Género del autor: F o M |
min_len |
int | None |
Longitud mínima del texto (en caracteres) |
max_len |
int | None |
Longitud máxima del texto (en caracteres) |
limit |
int | None |
Número de textos |
Los filtros se combinan; author="dario" encuentra a Rubén Darío, country="mexico" encuentra México. Un periodo o un género desconocidos, una longitud menor que uno, una longitud mínima mayor que la máxima y un límite negativo levantan ParameterError.
Ejemplo
from ests.datasets import SpanishSonnets
ss = SpanishSonnets()
for text in ss.get_texts(author="avellaneda", gender="F", limit=1):
print(text.split("\n\n")[0])
# No encuentro paz, ni me permiten guerra;
# de fuego devorado, sufro el frío;
# abrazo un mundo, y quédome vacío;
# me lanzo al cielo, y préndeme la tierra.
get_records¶
Extrae los registros (con encabezados) del conjunto de datos. Campos del registro: id - el identificador del soneto en DISCO, period - periodo, author - autor, title - título, country - el país de nacimiento del autor en español (vacío si se desconoce), gender - F o M, birth y death - los años de vida (None si se desconocen), text - texto, meter - el patrón métrico de cada verso, rhyme - la etiqueta de la rima de cada verso. En un patrón métrico + es una sílaba tónica y - una átona, así que su longitud es el número de sílabas métricas: 11 para un endecasílabo, 14 para un alejandrino. Las etiquetas iguales marcan los versos que riman entre sí, - un verso que no rima con ningún otro. Los registros van por periodo en el orden de periods, dentro de un periodo por el identificador de DISCO ordenado numéricamente (1035e_269 antes de 1035e_1360), que mantiene juntos los sonetos de un autor en el orden de su fuente.
Los parámetros son los mismos que los de get_texts.
Ejemplo
from collections import Counter
from ests.datasets import SpanishSonnets
ss = SpanishSonnets()
# Los primeros versos de un soneto con su rima y su métrica
record = next(ss.get_records(author="rubén darío"))
lines = record["text"].replace("\n\n", "\n").split("\n")
for line, pattern, label in list(zip(lines, record["meter"], record["rhyme"]))[:4]:
print(f"{label} {pattern:<14} {line}")
# A -+---+---+- En medio del abismo de la duda
# B +----+-+-+- lleno de oscuridad, de sombra vana
# B +--+---+-+- hay una estrella que reflejos mana
# A -+-+---+-+- sublime, sí, mas silenciosa, muda.
# La proporción de endecasílabos y alejandrinos por periodo
for period in ss.periods:
lengths = Counter(
len(pattern) for record in ss.get_records(period=period) for pattern in record["meter"]
)
total = sum(lengths.values())
print(period, f"{lengths[11] / total:.2f}", f"{lengths[14] / total:.2f}")
# 15th-17th 0.98 0.00
# 18th 0.99 0.00
# 19th 0.86 0.09
# 20th 0.60 0.40
La anotación es automática
Los patrones métricos y las etiquetas de la rima son la anotación automática de DISCO (la escansión de ADSO, de Jumper para los sonetos modernistas y filipinos, la rima de RhymeTagger): una referencia con la que comparar una escansión, no un patrón de oro, ya que un patrón puede perder una sinalefa o un acento que haría un lector. Algunos sonetos no tienen etiquetas de la rima, y las secuencias largas no las tienen después de la letra N: esa etiqueta es una cadena vacía.
Sonetos, secuencias y títulos
4211 registros son sonetos de 14 versos; los demás son sonetos con estrambote, unos pocos incompletos o irregulares («El soneto de trece versos» de Darío) y secuencias de sonetos que DISCO guarda en un solo fichero, de hasta 98 versos. Los sonetos de una secuencia guardados en ficheros separados tienen el título Part of: y el título de la secuencia. Los títulos y la ortografía son los de las fuentes de DISCO, algunos títulos en mayúsculas.