Saltar a contenido

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:

ests

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.