Ley de Zipf: análisis de texto y calculadora en línea
La ley de Zipf es un patrón empírico: en un texto natural, la frecuencia de una palabra es inversamente proporcional a su posición en la tabla de frecuencias. La palabra más común aparece aproximadamente el doble de veces que la segunda, el triple que la tercera, y así sucesivamente. Analizar un texto con la ley de Zipf muestra qué tan cerca está su distribución de palabras de una distribución natural. Puedes revisar tu texto en línea gratis con la calculadora de la ley de Zipf, que traza el gráfico log-log y calcula la pendiente, R² y un índice de ajuste; el PromoPilot AI Detector también incluye una métrica "Ley de Zipf" entre sus resultados. A continuación: la fórmula, cómo interpretar los resultados y cómo revisar un texto a mano.
La fórmula de la ley de Zipf
En su forma general, la ley se escribe como f(r) = C / rα, donde f es la frecuencia de la palabra, r es su rango (su posición en la lista ordenada por frecuencia descendente), C es una constante aproximadamente igual a la frecuencia de la palabra más común, y el exponente α es cercano a uno en el lenguaje natural. Una consecuencia sencilla: el rango por la frecuencia, r × f, se mantiene aproximadamente constante.
| Rango de la palabra | Frecuencia esperada con α = 1 | Rango × frecuencia |
|---|---|---|
| 1 | 120 | 120 |
| 2 | 60 | 120 |
| 3 | 40 | 120 |
| 4 | 30 | 120 |
| 10 | 12 | 120 |
Si lo trazas en ejes logarítmicos (el logaritmo del rango en el eje horizontal y el logaritmo de la frecuencia en el vertical), los puntos de un texto natural caen casi en una línea recta con una pendiente de aproximadamente −1.
Cómo comprobar un texto con la ley de Zipf en línea
Opción 1: la calculadora de la ley de Zipf
- Abre el analizador de texto con la ley de Zipf. Es gratuito y todo el cálculo se ejecuta en tu navegador.
- Pega tu texto. El mínimo es de 50 palabras, pero para obtener conclusiones fiables usa 300 palabras o más, idealmente más de 1000: en textos cortos un par de repeticiones desplazan notablemente la pendiente.
- Si quieres, activa la eliminación de stop words (listas en inglés, polaco, ucraniano y ruso) para ver solo las palabras de contenido.
- Obtendrás un gráfico de rango-frecuencia en ejes log-log con la línea ideal de Zipf (pendiente −1), la pendiente de tu texto, R² (qué tan bien se ajustan los puntos a una línea recta) y un índice de ajuste de Zipf de 0 a 100: 80 o más es un ajuste cercano, 60–79 moderado y menos de 60 débil.
- Debajo del gráfico, una tabla con las 30 palabras principales compara el conteo real con lo que predice la ley de Zipf y señala las palabras que aparecen notablemente más de lo esperado: las primeras candidatas a keyword stuffing.
Opción 2: la métrica de la ley de Zipf en el AI Detector
- Abre el AI Detector. No necesitas registrarte.
- Pega el texto o introduce la URL de una página: la herramienta extraerá el texto por sí misma. Usa al menos 100 palabras, de preferencia 200 o más: en un fragmento corto la métrica aporta poco.
- Elige el idioma o deja activada la detección automática, y haz clic en "Comprobar".
- En el bloque "Métricas del detector", busca la fila "Ley de Zipf" con la pista "Distribución de frecuencia de palabras". Si la desviación es notable, el bloque "Explicaciones" incluirá una línea que indica que las frecuencias de las palabras se desvían de la distribución natural.
La misma métrica está disponible en la versión avanzada del detector, donde aparece en un gráfico de radar junto con otros indicadores y un desglose del texto oración por oración.
Cómo calcula la métrica el AI Detector
- El texto se divide en palabras por los espacios, las palabras se convierten a minúsculas y se elimina la puntuación. No hay lematización: "link", "links" y "linking" cuentan como palabras distintas.
- Las frecuencias se ordenan de forma descendente y, para los 50 primeros rangos, la frecuencia real se compara con la teórica
f(1) / r. Se calcula la desviación relativa media. - La "cola" (las palabras raras del tercio inferior de la lista) se puntúa por separado: una cola demasiado uniforme también cuenta como desviación.
- Ambas puntuaciones tienen el mismo peso. Si el texto tiene menos de 50 palabras, la métrica devuelve un 50% neutro; alcanza su plena fuerza con 200 palabras o más y, en longitudes intermedias, el resultado se acerca al 50%.
Cómo interpretar el resultado
| Valor | Color de la barra | Qué significa |
|---|---|---|
| hasta 40% | verde | La distribución de frecuencias es cercana a la natural |
| 40–70% | amarillo | Una desviación notable; en textos de menos de 200 palabras suele deberse solo a la longitud |
| más de 70% | rojo | Una desviación fuerte: keyword stuffing, redacción con plantillas o vocabulario monótono |
Cuanto mayor es el porcentaje, más se aleja el texto de la curva de Zipf. Dicho esto, la métrica pesa poco en la probabilidad final de generación con IA, cerca del 3%: no es fiable en textos cortos y el detector se apoya sobre todo en otras señales. Cómo leer el informe completo se explica en el artículo sobre la revisión de textos para detectar IA.
Comprobación manual: lista de frecuencias de palabras y gráfico log-log
Si quieres ver la curva en sí y no solo un número, es fácil construirla por tu cuenta.
- Limpia el texto: minúsculas, sin signos de puntuación ni dígitos. Los resultados son más precisos si reduces las palabras a su forma base (lematizar): esto importa sobre todo en idiomas con mucha flexión, pero incluso en inglés "link" y "links" se contarían por separado de otro modo.
- Cuenta cuántas veces aparece cada palabra y ordena la lista de mayor a menor. El número de fila es el rango.
- Agrega dos columnas:
=LOG10(rank)y=LOG10(frequency). - Crea un gráfico de dispersión con esas columnas y calcula la pendiente: en Excel y Google Sheets, usa la función
SLOPE.
Lo mismo en Python:
import re, math
from collections import Counter
text = open("text.txt", encoding="utf-8").read().lower()
words = re.findall(r"[а-яёa-z]+", text)
freqs = sorted(Counter(words).values(), reverse=True)
xs = [math.log10(r) for r in range(1, len(freqs) + 1)]
ys = [math.log10(f) for f in freqs]
n = len(xs); mx = sum(xs) / n; my = sum(ys) / n
slope = sum((x - mx) * (y - my) for x, y in zip(xs, ys)) / sum((x - mx) ** 2 for x in xs)
print("slope:", round(slope, 2)) # about -1 for natural text
Ejemplo: un texto normal frente a uno saturado de palabras clave
Un ejemplo ilustrativo basado en un artículo de unas 600 palabras sobre reparación de laptops. En la versión normal, la parte superior de la lista de frecuencias se ve así: "the", "and", "to", "of", "laptop": palabras funcionales arriba, la palabra temática en quinto lugar y frecuencias que descienden de forma gradual. En la versión saturada, donde el autor metió "laptop repair" en cada oración, el panorama es distinto:
| Rango | Texto normal | Texto saturado de palabras clave |
|---|---|---|
| 1 | the: 31 | laptop: 34 |
| 2 | and: 17 | repair: 33 |
| 3 | to: 11 | the: 29 |
| 4 | of: 8 | and: 15 |
| 5 | laptop: 6 | to: 10 |
En la primera columna, las frecuencias se comportan como 31 / r; en la segunda, los dos primeros rangos son casi iguales: esa es la desviación de la ley de Zipf, visible sin ninguna herramienta. El detector la identifica de forma automática, y en un gráfico log-log estas palabras aparecen como una "meseta" al inicio de la curva.
Cómo interpretar las desviaciones
| Qué ves en el gráfico | Posible causa |
|---|---|
| Una palabra temática está entre las tres primeras, junto a artículos y preposiciones | Keyword stuffing: revisa la densidad de palabras clave |
| La pendiente es notablemente más pronunciada que −1 | Vocabulario reducido, con muchas repeticiones de las mismas palabras |
| La pendiente es notablemente más suave que −1 | Listas de términos, tablas, listas de nombres |
| Una cola larga y plana de palabras que aparecen una sola vez | Un texto corto: es normal y no indica un problema |
Por qué la ley de Zipf importa para el SEO
- Detectar keyword stuffing: si una palabra clave se sale de la distribución, se repite demasiado.
- Evaluar la riqueza del vocabulario: una distribución plana o demasiado pronunciada indica un lenguaje pobre.
- Compararte con la competencia: es más útil que las normas abstractas: mira cómo son los textos que ocupan los primeros lugares para tu consulta.
- Una de las señales de texto generado por máquina: una desviación es un indicio indirecto de que el texto se armó con plantillas o se generó automáticamente.
La segunda ley de Zipf
En el análisis de textos a veces también se menciona la segunda ley de Zipf. Describe el otro lado de la distribución: cuántas palabras diferentes comparten la misma frecuencia. Cuanto menor es la frecuencia, más palabras de ese tipo hay: las palabras que aparecen una sola vez son las más numerosas, y en un texto típico forman una gran parte del vocabulario. Esta es precisamente la "cola" que el detector puntúa por separado: en un texto natural es irregular, en un texto de plantilla es sospechosamente uniforme.
Origen de la ley
El patrón fue descrito por el lingüista estadounidense George Zipf entre las décadas de 1930 y 1940, aunque antes de él ya se habían hecho observaciones similares sobre la frecuencia de las palabras. Más tarde se descubrió que se cumple mucho más allá del lenguaje: en el tamaño de las ciudades, los ingresos y el tráfico de los sitios web. En los textos se cumple notablemente bien: en cualquier texto natural lo bastante extenso, las frecuencias de las palabras se ajustan a la misma curva. Los primeros puestos casi siempre los ocupan las palabras funcionales (artículos, preposiciones, conjunciones, pronombres), mientras que las palabras temáticas con significado quedan más abajo, y su proporción es la que muestra de qué trata el texto.