Huella literaria¶
ests.visualizers.fingerprinting()
Descripción¶
Visualización de la huella literaria (literature fingerprinting).
Nota
La huella literaria se describe en detalle en este artículo.
Cada texto se corta en segmentos de segment_len palabras con un paso deslizante de una décima parte del segmento, y para cada segmento se calcula una medida de diversidad léxica. Un texto es un bloque de cuadrados en el orden de sus segmentos, fila a fila, de 8 filas de alto, o una sola columna cuando tiene a lo sumo 8 segmentos; un bloque más ancho que una fila del área de dibujo se parte en filas de esa anchura. Los bloques se colocan de izquierda a derecha y pasan a la fila siguiente dentro de un área de 2 · x_size de ancho, que crece hacia abajo desde 2 · y_size cuando necesitan más altura, así que nada queda cortado. El color de un cuadrado es el valor de la medida en la escala de la barra de colores, de su menor a su mayor valor finito en todos los textos; el mapa por defecto es secuencial, ya que el punto medio de una medida no significa nada. Los segmentos en los que la medida no está definida (nan en segmentos demasiado cortos para ella) y las celdas vacías de un bloque son de un gris claro, distinto de cualquier valor, incluido el cero.
Parámetros¶
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
texts |
list[list[str]] | - |
Lista de listas de palabras |
segment_len |
int | 10 |
Tamaño de un segmento |
metric |
Callable | None |
Función de una medida de diversidad léxica; calc_ttr por defecto |
x_size |
int | 800 |
Mitad de la anchura del área de dibujo |
y_size |
int | 600 |
Mitad de la altura del área de dibujo, que crece cuando los bloques necesitan más |
cmap |
str | 'viridis' |
Mapa de colores |
ax |
Axes | None |
Ejes de matplotlib para el gráfico; si no se dan, se crea una figura de 15×10 |
La función devuelve los Axes con la visualización, con una relación de aspecto igual para que los cuadrados sigan siendo cuadrados; la figura es ax.figure.
Ejemplo de uso¶
Las cinco primeras ventanas de 1000 palabras de seis novelas de Project Gutenberg, tres de Galdós y tres de Unamuno, según el índice de Simpson.
Ejemplo
Código:
from urllib.request import urlopen
from ests import WordsExtractor
from ests.corpus import split_windows
from ests.diversity_stats import calc_simpson_index
from ests.visualizers import fingerprinting
def gutenberg(number):
url = f"https://www.gutenberg.org/cache/epub/{number}/pg{number}.txt"
text = urlopen(url).read().decode("utf-8")
start = text.index("\n", text.index("*** START OF"))
return text[start : text.index("*** END OF")]
we = WordsExtractor(lowercase=True)
texts = [
we.extract(window)
for number in (17340, 21831, 15206, 49836, 44512, 44358)
for window in split_windows(gutenberg(number), 1000)[:5]
]
fingerprinting(texts, segment_len=100, metric=calc_simpson_index, x_size=1000, y_size=330)
Resultado:

Los quince primeros bloques son de Galdós, los quince últimos de Unamuno. El índice de Simpson - la probabilidad de que dos palabras tomadas al azar sean la misma - es más bajo en Galdós (una mediana de 0.0107 frente a 0.0127 sobre los segmentos), así que sus bloques son más oscuros y los de Unamuno, que repite más sus palabras, más verdes.