Contador de frecuencia de palabras gratuito

Analiza un texto para contar la frecuencia de las palabras e identificar las que aparecen con más frecuencia. Ideal para el análisis de texto, la investigación de contenido y la detección de patrones.

Acerca del análisis de frecuencia de palabras

La frecuencia de palabras es el conteo de cuántas veces aparece cada palabra en un texto, el análisis estadístico más simple posible sobre un cuerpo de escritura, y sin embargo la fuente de todo un campo. El estudio empírico de las frecuencias de palabras en inglés comienza con George Kingsley Zipf, un lingüista de Harvard cuyo libro de 1935 The Psycho-Biology of Language y su continuación de 1949 Human Behavior and the Principle of Least Effort documentaron lo que hoy se conoce como la Ley de Zipf: la frecuencia de cualquier palabra es aproximadamente inversamente proporcional a su rango en la tabla de frecuencias. La palabra más común en inglés («the») representa aproximadamente el 7 % de todos los tokens-palabra en un corpus inglés típico; la segunda más común («of») alrededor del 3,5 %; la tercera alrededor del 2,8 %. La relación se mantiene para casi todos los lenguajes naturales y para casi todos los tipos de texto, libros, periódicos, habla transcrita, comentarios de código, redes sociales. Se mantiene incluso para lo inverso: la mayoría de las palabras aparecen solo una o dos veces en un texto dado, sin importar cuán grande sea el texto. Zipf lo atribuyó a un principio del menor esfuerzo: los hablantes minimizan el coste de enunciación mientras los oyentes minimizan el coste de comprensión, y el equilibrio es una distribución de ley de potencia.

El primer corpus informático diseñado específicamente para el análisis de frecuencia fue el Brown Corpus, compilado por W. Nelson Francis y Henry Kučera en Brown University y publicado en 1961. Contiene 1 014 312 tokens de palabras de 500 muestras de prosa a través de 15 géneros (reportaje periodístico, ficción, escritura religiosa, artículos científicos, saber popular, documentos gubernamentales, y más), cada muestra de 2 000 palabras. El Brown Corpus es el fundamento de la lingüística inglesa empírica, todo estudio moderno de frecuencia de palabras en inglés se construye sobre él directa o indirectamente. El equivalente británico, el LOB Corpus (Lancaster-Oslo/Bergen), siguió en 1976 con la misma estructura para el inglés británico. Los corpus a escala industrial de hoy (los datos n-gram de Google de más de 8 millones de libros, el iWeb Corpus con 14 mil millones de palabras, los corpus web-crawleados OSCAR con cientos de miles de millones de palabras) todos trazan su metodología hasta el Brown.

Palabras vacías: el concepto y las listas

Un análisis de frecuencia sin filtrado de palabras vacías está dominado por palabras-función, artículos, preposiciones, conjunciones, auxiliares, que aparecen en cada oración y portan poco significado temático. El término «stop words» fue acuñado por Hans Peter Luhn en su artículo de 1958 «The Automatic Creation of Literature Abstracts», escrito en IBM Research sobre el IBM 704. Luhn las llamaba «noise words», palabras tan comunes que enmascaraban las palabras de contenido más informativas. Las listas modernas de palabras vacías son todavía bastante pequeñas. La lista inglesa de palabras vacías de la biblioteca Python NLTK tiene 179 palabras; la de spaCy alrededor de 326. El tamaño exacto depende de la filosofía: la lista NLTK es conservadora (solo las palabras más universalmente función); la de spaCy es más agresiva (incluyendo muchos verbos y pronombres comunes). Otros lenguajes necesitan sus propias listas, y las listas mismas se vuelven más difíciles de componer. El alemán tiene muchas palabras compuestas que se descomponen en partes más cortas comunes. El chino, japonés y tailandés no tienen separadores de espacios en absoluto, así que antes de poder preguntar «cuál es la frecuencia de esta palabra» hay que hacer segmentación, decidir dónde están las fronteras de palabras, que es un problema más profundo que la tokenización por espacios directa del inglés. La lista de palabras vacías de esta herramienta cubre el inglés; para texto no-inglés, la salida de frecuencia bruta insensible a mayúsculas será más útil que la versión filtrada.

Qué cuenta como palabra, el problema de la tokenización

Contar palabras suena simple hasta que intentas especificar exactamente qué es una. ¿«don't» es una palabra o dos (do + n't)? ¿«state-of-the-art» es una palabra o cuatro? ¿La URL example.com es una palabra? ¿Y U.S.A., tres palabras, una palabra, o una palabra que debería normalizarse a USA? Las reglas de tokenización del Penn Treebank (desarrolladas en la Universidad de Pensilvania para el corpus Penn Treebank, desde 1989) se volvieron el estándar de facto del NLP inglés y separan contracciones en tokens distintos (don'tdo + n't). El estándar Unicode UAX #29 (Unicode Text Segmentation) define fronteras de palabras sensibles al lenguaje que funcionan a través de la mayoría de los scripts. La plataforma web moderna lo expone como Intl.Segmenter, disponible en baseline en Chrome, Firefox y Safari desde 2024, dale una cadena y una locale, obtén un iterador de fronteras de palabras que respeta las convenciones del lenguaje de entrada. Esta herramienta usa un enfoque regex ([\p{L}\p{N}][\p{L}\p{N}_'-]* con el flag Unicode) que maneja bien la mayoría de los casos pero trata state-of-the-art como cuatro palabras y puede tener problemas con apóstrofes tipográficas curvas (el carácter U+2019 que Word produce por defecto, la apóstrofe ASCII recta U+0027 funciona correctamente).

Stemming y lematización

Un conteo ingenuo de frecuencia trata run, runs, running y ran como cuatro palabras diferentes. Para algunas preguntas esa es la respuesta correcta (realmente quieres contar formas de superficie por separado); para muchas otras, quieres colapsarlas en un solo concepto. El stemming corta sufijos por reglas, el famoso Porter stemmer de Martin Porter (1980) reduce palabras a sus raíces vía un algoritmo de eliminación de sufijos en múltiples pasos: runningrun, catscat, generouslygenerous. Porter después refinó el sistema en Snowball (2001), un pequeño lenguaje para escribir stemmers a través de múltiples idiomas. El stemming es rápido y agnóstico de lenguaje pero produce no-palabras (argues, argued, arguing todos se vuelven argu). La lematización es la alternativa más sofisticada: usa un diccionario y análisis gramatical para mapear cada forma de superficie a su lema canónico, produciendo palabras reales (ranrun, no ra). La lematización es más lenta, requiere un diccionario específico al lenguaje, y maneja los casos irregulares que el stemming falla. NLTK y spaCy ambos entregan lematizadores; esta herramienta no hace ninguno, por diseño, el análisis de frecuencia sobre formas de superficie es más útil para algunas aplicaciones (análisis de estilo, diversidad de vocabulario) que lo que sería la versión lematizada.

TF-IDF: por qué la frecuencia de una palabra en un documento no es suficiente

Un análisis de frecuencia de un solo documento puede decirte qué palabras aparecen más a menudo en este texto particular, pero no puede decirte qué palabras son distintivas a este texto. The aparece más a menudo en cada documento inglés, así que su alta frecuencia en tu documento no te dice nada. TF-IDF (Term Frequency-Inverse Document Frequency) es la solución clásica: pondera la frecuencia de cada término en un documento por el inverso de cuán a menudo el término aparece a través del corpus más amplio. Las palabras que son comunes en todas partes (the, of, and) reciben pesos pequeños; las palabras comunes en tu documento pero raras en otra parte reciben pesos grandes. El concepto IDF fue introducido por Karen Spärck Jones en su artículo de 1972 «A Statistical Interpretation of Term Specificity and Its Application in Retrieval» en el Journal of Documentation, Jones es una de las figuras fundadoras de la lingüística computacional y la recuperación de información, y su contribución a los motores de búsqueda (cada algoritmo de ranking de búsqueda desde PageRank en adelante le debe algo a TF-IDF) está ampliamente subestimada. Esta herramienta computa frecuencia bruta, no TF-IDF, TF-IDF requiere un corpus contra el cual comparar, y no hay un único corpus correcto para entrada de usuario arbitraria.

N-grams y el Google Books Ngram Viewer

La frecuencia de una sola palabra es el caso particular del análisis 1-gram. Los bigrams (secuencias de dos palabras) y trigrams (secuencias de tres palabras) capturan frases multi-palabra, «machine learning» es un bigram que nunca aparecería en un análisis de frecuencia de palabras únicas pero es más informativo que los conteos separados de machine y learning. El mayor conjunto de datos n-gram disponible públicamente es el Google Books Ngram Viewer, lanzado el 16 de diciembre de 2010 y construido a partir de texto reconocido por OCR de aproximadamente 8 millones de libros, alrededor del 6 % de cada libro jamás publicado. El viewer te permite graficar la frecuencia de cualquier 1-, 2-, 3-, 4- o 5-gram a través del inglés (y varios otros lenguajes) desde el año 1500 hasta el presente. Se ha usado para todo, desde rastrear el ascenso y caída del argot hasta datar manuscritos no datados hasta documentar el sesgo de género en el uso histórico del inglés. La generación de texto por cadena de Markov, precursora de los modelos de lenguaje modernos, se construyó sobre estadísticas n-gram, predecir la palabra siguiente a partir de las N palabras previas es exactamente lo que una tabla de frecuencia n-gram te dice. Esta herramienta cuenta palabras únicas; el análisis bigram y trigram está en la lista de funcionalidades futuras.

Tamaño de vocabulario y Ley de Heaps

Un hablante nativo adulto de inglés conoce aproximadamente de 20 000 a 35 000 familias de palabras (una «familia de palabras» siendo una palabra base más sus flexiones, run, runs, running, ran como una familia). El estudio de Brysbaert et al. 2016 en Frontiers in Psychology puso la mediana para adultos americanos universitarios alrededor de 42 000 palabras base. La Ley de Heaps (Heaps 1978; la observación subyacente data de los años 1950) describe cómo el vocabulario crece con el tamaño del corpus: V ∝ K · Nβ, donde V es el conteo de palabras únicas (vocabulario), N el conteo total de tokens (tamaño del corpus), K una constante en el rango 10-100, y β entre 0,4 y 0,6 para el inglés. En términos llanos: cuanto más largo se vuelve un texto, más palabras nuevas encuentras, pero cada palabra sucesiva es menos probable de ser nueva. Un ensayo de 1 000 palabras introduce quizás 400 palabras únicas; uno de 10 000 palabras introduce alrededor de 1 300 palabras únicas; una novela de 100 000 palabras alrededor de 4 500. La relación es sublineal pero no acotada, no hay «tope de vocabulario» teórico para el lenguaje natural. La regla empírica para redactores de contenido: un post de blog típico de 1 500 palabras contiene alrededor de 500-600 palabras únicas, y las 20 más frecuentes (mayoritariamente palabras vacías) cubren aproximadamente la mitad de las ocurrencias totales.

Cuándo el análisis de frecuencia de palabras es realmente útil

Cómo funciona esta herramienta en tu navegador

La implementación es directa. El texto pasa por una regex Unicode-aware ([\p{L}\p{N}][\p{L}\p{N}_'-]*/gu) que coincide con secuencias de letras y números como palabras; las coincidencias se normalizan a minúsculas si la opción insensible a mayúsculas está activada; cada palabra se incrementa en un Map de JavaScript; las entradas se ordenan luego por conteo descendente y se renderizan como gráfico y tabla. El tiempo total sobre un documento de 100 000 palabras está bajo el segundo en un portátil típico. Map es la estructura de datos correcta aquí, preserva el orden de inserción, tiene lookup y actualización O(1), y serializa limpiamente a un array 2D para exportar. Una implementación más sofisticada usaría Intl.Segmenter (la API de segmentación Unicode-aware, baseline desde abril de 2024) para idiomas con fronteras de palabras no triviales, particularmente CJK; el enfoque regex funciona bien para idiomas europeos y se derrumba para chino, japonés y tailandés que no tienen separadores de palabras por espacios.

Privacidad: por qué importa el solo-navegador aquí

Borradores de escritura no publicada, posts de blog, memos internos, entregables a clientes, capítulos de manuscritos, papers académicos en progreso, son exactamente el tipo de texto donde subir a un servicio de terceros es indeseable. Las herramientas de frecuencia de palabras del lado servidor requieren enviar el texto entero a un endpoint remoto, lo que significa que se sienta en los logs del servidor, posiblemente en un caché CDN, posiblemente en una canalización de analítica, posiblemente en un backup. Para texto publicado el asunto es discutible. Para trabajo borrador, copia de cliente bajo NDA, o cualquier manuscrito que aún no quieras que nadie fuera de tu equipo vea, la arquitectura importa. Esta herramienta ejecuta toda la canalización en tu navegador vía JavaScript. El texto nunca cruza la red, verifícalo en la pestaña Network de DevTools al pulsar Analyze, o pon la página offline (modo avión) tras cargar y confirma que el análisis sigue funcionando. Segura para borradores confidenciales, entregables de cliente y cualquier texto que no quieras ver copiado en el disco duro de un desconocido.

Preguntas frecuentes

¿Qué son las palabras vacías?

Las palabras vacías son palabras habituales como «el», «la», «es», «y», «o» que aparecen con frecuencia en la mayoría de los textos pero aportan poco significado. Filtrarlas permite centrar el análisis en las palabras con más contenido.

¿Cómo se calcula el porcentaje?

El porcentaje se calcula así: (apariciones de la palabra ÷ total de palabras) × 100. Por ejemplo, si una palabra aparece 5 veces en un texto de 100 palabras en total, su frecuencia es del 5 %.

¿Este contador maneja frases (n-grams)?

Solo palabras únicas, actualmente. Los bigrams (secuencias de dos palabras como «machine learning»), trigrams y n-grams más largos están en la lista de funcionalidades futuras. El Google Books Ngram Viewer (lanzado el 16 de diciembre de 2010) es la referencia pública para análisis n-gram a escala; para texto personal, NLTK y spaCy entregan extracción n-gram en unas pocas líneas de Python.

¿Puedo analizar textos muy largos?

Sí, esta herramienta se ejecuta por completo en tu navegador y puede procesar textos de varios MB. Los textos muy voluminosos pueden tardar algunos segundos en procesarse. Tus datos nunca salen de tu dispositivo.

¿Funciona para texto no-inglés?

Parcialmente. La regex Unicode-aware identifica correctamente caracteres de palabras en cualquier idioma de script latino, cirílico, griego, hebreo o árabe. Para chino, japonés y tailandés, que no tienen separadores de palabras por espacios, la frecuencia bruta por carácter funcionará pero no es realmente «frecuencia de palabras» en sentido lingüístico, necesitas segmentación de palabras primero (jieba para chino, MeCab para japonés, Intl.Segmenter de ICU para soporte del lado navegador). El filtro de palabras vacías es solo-inglés.

¿Mis textos son subidos?

No. El análisis corre enteramente en tu navegador vía JavaScript. El texto pegado nunca cruza la red, verifícalo en la pestaña Network de DevTools al pulsar Analyze, o pon la página offline (modo avión) tras cargar y la herramienta seguirá funcionando. Segura para borradores confidenciales, entregables de cliente, capítulos de manuscritos bajo NDA, memos internos o cualquier cosa que no quieras ver copiada en el disco duro de un desconocido.

Herramientas relacionadas

Contador de palabras y caracteres gratuito en línea Contador de palabras y caracteres gratuito en línea Contador de caracteres