Estadísticas del verso¶
ests.verse_stats.VerseStats
Descripción¶
Módulo para calcular las estadísticas del verso de un texto: la escansión de los versos, el metro y el número de sílabas métricas, los acentos rítmicos y el perfil acentual, los tipos del endecasílabo, las terminaciones de los versos, la rima, su esquema y las estrofas. La fuente de datos puede ser un texto con sus saltos de línea o un objeto Doc de la biblioteca spaCy; no hacen falta ni un modelo entrenado ni un diccionario.
El metro del verso español es silábico: un verso se mide por sus sílabas métricas, y los acentos dan forma a su ritmo. Las palabras se dividen en sílabas y se acentúan con syllabify y word_stresses; las sílabas de un verso se cuentan con las sinalefas y la ley del acento final, y un verso compuesto, ante todo el alejandrino, se lee como dos hemistiquios. El algoritmo y su precisión sobre los sonetos de DISCO se describen en la sección de las funciones.
Nota
Las estadísticas se calculan al crear el objeto VerseStats.
Parámetros¶
| Parámetro | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
source |
str/Doc | - |
Fuente de datos (una cadena o un objeto Doc) |
seseo |
bool | False |
Pronunciar c y z ante e e i como s en la rima, como en Andalucía y en América: voz - dos |
Atributos¶
| Atributo | Tipo | Descripción |
|---|---|---|
lines |
tuple[str] | Versos con palabras españolas |
stanzas |
tuple[tuple[str, ...], ...] | Versos por estrofa |
n_lines |
int | Número de versos |
n_stanzas |
int | Número de estrofas |
meter |
str/None | Metro - el nombre del verso por sus sílabas métricas: octosílabo, endecasílabo, alejandrino... (VERSE_METERS), o None |
n_feet |
int/None | Número de sílabas métricas del metro |
c_feet |
dict[int, int] | Distribución de los versos por sílabas métricas |
p_deviations |
float | Proporción de los versos fuera del metro, nan sin metro |
p_pyrrhics |
float | Proporción de los versos del metro sin sus acentos rítmicos, nan sin metro |
stress_profile |
tuple[float, ...] | Proporción de los versos del metro acentuados en cada sílaba métrica |
c_rhythms |
dict[str, int] | Distribución de los endecasílabos por tipo |
syllables |
tuple[tuple[str, ...], ...] | Sílabas de cada verso como las lee el verso, con la sinalefa marcada con ‿ |
stresses |
tuple[tuple[int, ...], ...] | Índices de las sílabas acentuadas de cada verso en syllables, desde cero |
caesuras |
tuple[int/None, ...] | Índice de la primera sílaba del segundo hemistiquio de cada verso en syllables, None para un verso simple |
patterns |
tuple[str, ...] | Esquemas de los versos de + (una sílaba métrica acentuada) y - (una átona), tan largos como el verso en sílabas métricas |
c_clausulas |
dict[str, int] | Distribución de las terminaciones de los versos por tipo: aguda, llana, esdrújula, sobresdrújula |
p_masculine |
float | Proporción de terminaciones agudas (el acento en la última sílaba) |
p_feminine |
float | Proporción de terminaciones llanas (una sílaba tras el acento) |
p_dactylic |
float | Proporción de terminaciones esdrújulas (dos sílabas tras el acento) |
c_stressed_vowels |
dict[str, int] | Distribución de las vocales acentuadas |
mean_line_len |
float | Longitud media de un verso en sílabas métricas |
rhyme_schemes |
tuple[str, ...] | Esquemas de rima de las estrofas |
p_rhymed |
float | Proporción de los versos con rima |
c_rhymes |
dict[str, int] | Distribución de los versos con rima por el tipo de la rima: consonante, asonante |
strophes |
tuple[str/None, ...] | Nombres de las estrofas (VERSE_STROPHES) |
form |
str/None | Forma del poema: soneto, romance, la estrofa de todas sus estrofas, silva |
seseo |
bool | Si la rima se lee con seseo |
El metro es la medida de la mayoría de los versos, y no se determina (None) si más de una décima parte de los versos (VERSE_MAX_DEVIATIONS) quedan fuera de él tras el ajuste - un poema polimétrico (una silva, un soneto con estrambote de heptasílabos), el verso libre, la prosa - o si el texto tiene un solo verso (VERSE_MIN_LINES). Los versos de un poema sin metro se ajustan a sus medidas comunes - las de al menos dos versos y una décima parte de ellos, como las 7 y las 11 sílabas de una lira o una silva - si estas ocupan más de la mitad de los versos; si no, como en el verso libre y la prosa, los versos conservan su lectura llana.
Los acentos rítmicos (VERSE_RHYTHMS) son los que un metro pide además del último, que todo verso tiene por la ley del acento final: el endecasílabo se acentúa en la 6.ª sílaba (a maiore) o en la 4.ª y la 8.ª (sáfico) o la 7.ª (dactílico); un verso compuesto, en el último acento de su primer hemistiquio. Un metro con solo el último acento, el octosílabo entre otros, tiene p_pyrrhics 0.
| Tipo | Acentos | Nombre |
|---|---|---|
1-6-10 |
1.ª, 6.ª | enfático |
2-6-10 |
2.ª, 6.ª | heroico |
3-6-10 |
3.ª, 6.ª | melódico |
4-6-10, 5-6-10 |
el primer acento en la 4.ª o la 5.ª, 6.ª | a maiore |
6-10 |
6.ª, sin acento antes | a maiore |
4-8-10 |
4.ª, 8.ª, sin 6.ª | sáfico |
4-7-10 |
4.ª, 7.ª, sin 6.ª ni 8.ª | dactílico, de gaita gallega |
Un verso con la 6.ª sílaba acentuada toma su tipo de su primer acento; 4-6-10 cuenta como sáfico en algunos tratados. Un verso sin ninguno de los tres conjuntos queda fuera de c_rhythms y se cuenta en p_pyrrhics. Las sílabas métricas de stress_profile se cuentan desde cero, así que la 6.ª sílaba es el número 5. stresses indexa syllables, y ambos coinciden con patterns hasta el último acento de un verso simple; en un verso compuesto cada hemistiquio tiene su propia medida, así que tras una aguda o una esdrújula en la cesura patterns y syllables se separan, y caesuras dice dónde empieza el segundo hemistiquio.
Rima y estrofas¶
Un verso rima por su terminación desde la última vocal acentuada: en consonante si los sonidos son iguales, en asonante si lo son la vocal acentuada y la última. Los sonidos son los del oído: b y v, c y z (s con seseo), ll e y son un solo sonido, la h es muda, la vibrante simple r y la múltiple rr se distinguen. La asonancia deja fuera las vocales entre la acentuada y la última (pálido - a, o), toma la vocal acentuada de un diptongo (cielo - e, o; gracia - a, a), lee la i y la u finales como e y o (fácil - a, e) y da a una aguda solo su vocal acentuada. Un verso rima con los versos de la ventana de RHYME_WINDOW (4) versos anteriores, por encima de las estrofas, de modo que los cuartetos de un soneto riman ABBA ABBA.
La asonancia cuenta en dos casos. Un poema cuya rima es la asonancia - al menos un tercio de sus versos sin rima consonante, y al menos cuatro de ellos, comparten una (RHYME_MIN_ASSONANCE, RHYME_MIN_ASSONANT_LINES) - rima por las asonancias de todos sus versos, que abarcan las rimas consonantes de las mismas vocales, como un soneto asonantado. Si no, la asonancia cuenta en versos alternos con versos sin rima entre ellos: una serie de al menos cuatro versos de dos en dos con tres de cada cuatro de los versos intermedios sin rima consonante (RHYME_MIN_FREE), o todos los versos pares de una estrofa de un número par de versos, como el segundo y el cuarto de una copla. Así un romance rima aunque cambie de asonancia de una parte a otra o sus versos asonantes rimen además en consonante de dos en dos. Una asonancia de versos vecinos no es rima: en un soneto de -ado y -ano los dos grupos se mantienen aparte.
El esquema de rima sigue el uso español: las letras van en el orden de los grupos de rima de todo el poema, mayúsculas para los versos de arte mayor (9 sílabas o más, VERSE_ARTE_MAYOR) y minúsculas para los de arte menor, con un guion para un verso sin rima: un soneto es ABBA ABBA CDC DCD, una redondilla abba, una lira aBabB, un romance -a-a-a-a. Cuando se acaban las 26 letras, se vuelve a tomar la letra de un grupo al que ya no puede unirse ningún verso de la ventana.
Una estrofa se nombra por sus versos, sus medidas, su esquema y su rima (VERSE_STROPHES, la primera que encaja):
| Estrofa | Versos | Medidas | Esquemas | Rima |
|---|---|---|---|---|
| pareado | 2 | cualquiera | aa | cualquiera |
| terceto | 3 | arte mayor | aba, a-a, abc, aab, abb | cualquiera |
| tercerilla | 3 | arte menor | aba, a-a | cualquiera |
| cuaderna vía | 4 | 14 cada uno | aaaa | consonante |
| cuarteto, serventesio | 4 | arte mayor | abba; abab | consonante |
| redondilla, cuarteta | 4 | arte menor | abba; abab | consonante |
| seguidilla | 4 | 7-5-7-5 | -a-a | cualquiera |
| copla | 4 | 8 cada uno | -a-a | asonante |
| lira | 5 | 7-11-7-7-11 | ababb | consonante |
| quinteto, quintilla | 5 | arte mayor; arte menor | ababa, abaab, abbab, aabab, aabba | consonante |
| estrofa manriqueña | 6 | 8-8-4-8-8-4 | abcabc | consonante |
| sexta rima | 6 | arte mayor | ababcc | consonante |
| sexteto | 6 | arte mayor | aabccb, abcabc, abbacc, aabbcc | consonante |
| sextilla | 6 | arte menor | aabccb, ababcc, abcabc, aabaab | consonante |
| octava real | 8 | 11 cada uno | abababcc | consonante |
| décima | 10 | 8 cada uno | abbaaccddc | consonante |
Una estrofa de un poema sin metro se ajusta a las sílabas de una estrofa que las pide, de modo que una lira sola recibe sus 7 y 11 sílabas. La forma de un poema es soneto para 14 versos de un metro de arte mayor en rima consonante con los cuartetos ABBA o ABAB y los tercetos en rimas propias; romance para octosílabos desde 8 versos con tres de cada cuatro de los versos pares de las estrofas en asonante, que puede cambiar, y tres de cada cuatro de los impares sin rima; la estrofa de todas las estrofas; silva para heptasílabos y endecasílabos sin metro, más largos que una estrofa (más de 10 versos) y sin un patrón de medidas repetido por todas sus estrofas.
Nota
La escansión, el metro y los acentos se pueden obtener por separado con las funciones del módulo. El algoritmo y las funciones se describen en la sección correspondiente.
Métodos¶
get_stats¶
Devuelve un diccionario con las estadísticas del verso calculadas.
Ejemplo
Código:
from ests import VerseStats
# El comienzo del soneto I de Garcilaso de la Vega
text = """Cuando me paro a contemplar mi estado
y a ver los pasos por do me han traído,
hallo, según por do anduve perdido,
que a mayor mal pudiera haber llegado."""
vs = VerseStats(text)
vs.get_stats()
Resultado:
{'n_lines': 4,
'n_stanzas': 1,
'meter': 'endecasílabo',
'n_feet': 11,
'p_deviations': 0.0,
'p_pyrrhics': 0.0,
'p_rhymed': 1.0,
'p_masculine': 0.0,
'p_feminine': 1.0,
'p_dactylic': 0.0}
La escansión de cada verso, el perfil acentual y las distribuciones son atributos:
Ejemplo
vs.syllables[1]
# ('y‿a', 'ver', 'los', 'pa', 'sos', 'por', 'do', 'me‿han', 'tra', 'í', 'do')
vs.patterns
# ('---+---+-+-', '-+-+---+-+-', '+--+--+--+-', '--++-+-+-+-')
vs.stresses[0]
# (3, 7, 9)
vs.stress_profile
# (0.25, 0.25, 0.25, 1.0, 0.0, 0.25, 0.25, 0.75, 0.0, 1.0, 0.0)
vs.c_rhythms, vs.c_clausulas
# ({'4-8-10': 2, '4-7-10': 1, '3-6-10': 1}, {'llana': 4})
vs.c_stressed_vowels
# {'a': 8, 'e': 3, 'i': 2, 'u': 2, 'o': 1}
La rima del soneto entero y de un romance:
Ejemplo
from ests.verse_stats import rhyme_scheme
sonnet = """Cuando me paro a contemplar mi estado
y a ver los pasos por do me han traído,
hallo, según por do anduve perdido,
que a mayor mal pudiera haber llegado;
mas cuando del camino estó olvidado,
a tanto mal no sé por dó he venido;
sé que me acabo, y más he yo sentido
ver acabar comigo mi cuidado.
Yo acabaré, que me entregué sin arte
a quien sabrá perderme y acabarme
si quisiere, y aún sabrá querello;
que pues mi voluntad puede matarme,
la suya, que no es tanto de mi parte,
pudiendo, ¿qué hará sino hacello?"""
vs = VerseStats(sonnet)
vs.rhyme_schemes, vs.strophes, vs.form
# (('ABBA', 'ABBA', 'CDE', 'DCE'), ('cuarteto', 'cuarteto', 'terceto', 'terceto'), 'soneto')
# El comienzo de La tierra de Alvargonzález de Antonio Machado
romance = """Siendo mozo Alvargonzález,
dueño de mediana hacienda,
que en otras tierras se dice
bienestar y aquí, opulencia,
en la feria de Berlanga
prendóse de una doncella,
y la tomó por mujer
al año de conocerla."""
vs = VerseStats(romance)
rhyme_scheme(romance), vs.form, vs.c_rhymes
# ('-a-a-a-a', 'romance', {'asonante': 4})
print_stats¶
Muestra una tabla con las estadísticas del verso calculadas.
Ejemplo
Código:
from ests import VerseStats
# La primera estrofa de Sonatina de Rubén Darío (Prosas profanas, 1896)
sonatina = (
"La princesa está triste... ¿qué tendrá la princesa?\n"
"Los suspiros se escapan de su boca de fresa,\n"
"que ha perdido la risa, que ha perdido el color.\n"
"La princesa está pálida en su silla de oro,\n"
"está mudo el teclado de su clave sonoro;\n"
"y en un vaso olvidada se desmaya una flor."
)
vs = VerseStats(sonatina)
vs.print_stats()
Resultado:
Statistic | Value
------------------------------------------------------------
Number of lines | 6
Number of stanzas | 1
Meter | alejandrino
Number of metrical syllables | 14
Share of lines off the meter | 0.00
Share of lines without the rhythmic stresses | 0.00
Share of rhymed lines | 1.00
Share of oxytone endings (aguda) | 0.33
Share of paroxytone endings (llana) | 0.67
Share of proparoxytone endings (esdrújula) | 0.00
El alejandrino se lee por hemistiquios de 7 sílabas, cada uno por la ley del acento final: La princesa está pálida (una esdrújula) y que ha perdido el color (una aguda) cuentan 7 cada uno.
Ejemplo
vs.syllables[3]
# ('la', 'prin', 'ce', 'sa‿es', 'tá', 'pá', 'li', 'da', 'en', 'su', 'si', 'lla', 'de', 'o', 'ro')
vs.patterns[2], vs.patterns[3]
# ('+-+--+-+-+--+-', '--+-++---+--+-')
vs.stresses[3], vs.caesuras
# ((2, 4, 5, 10, 13), (7, 7, 7, 8, 7, 7))
accentuate¶
Devuelve el texto con los acentos marcados: se pone un acento agudo (U+0301) tras la vocal acentuada de cada palabra tónica sin tilde; las palabras con tilde la conservan, y las palabras átonas del verso (VERSE_PROCLITICS) quedan sin marca, salvo la última palabra de un verso. Las marcas son caracteres combinantes aparte de las tildes, así que unicodedata.normalize("NFC", ...) las convierte en letras acentuadas. Solo se devuelven los versos con palabras españolas (como en lines), con las estrofas separadas por una línea en blanco.
Ejemplo
Código:
...
print(VerseStats(text).accentuate())
Resultado:
Cuando me páro a contemplár mi estádo
y a vér los pásos por do me hán traído,
hállo, según por do andúve perdído,
que a mayór mál pudiéra habér llegádo.