Cómo hacer un script en python donde encuentre palabras repetidas (guía)

¿Querés contar términos y detectar repeticiones en textos sin vueltas? En esta guía vas a aprender cómo hacer un script en python donde encuentre palabras repetidas con dos enfoques: uno rápido con collections.Counter y otro robusto con normalización, regex, lista de stopwords y exportación a CSV para reportes.

Cómo hacer un script en python donde encuentre palabras repetidas: decisión express

Tu caso Estrategia Resultado
Texto corto/mediano (notas, blogs) Counter + regex simple Top palabras y frecuencias en consola
Texto “sucio” (acentos, mayúsculas, símbolos) Normalización + stopwords Conteo limpio y más útil
Varios archivos / pipeline Script CLI + CSV Automatizable y exportable

Requisitos mínimos

  • Python 3.8+ instalado (o virtualenv).
  • Conocer lo básico de Python básico (strings, listas y módulos).

Enfoque 1: script rápido con Counter (10 líneas)

from collections import Counter import re

def contar_palabras(texto: str, top: int = 20):
# Minúsculas y solo letras/números (palabras con acentos incluidas)
tokens = re.findall(r"[a-zA-ZáéíóúñüÁÉÍÓÚÑÜ0-9]+", texto.lower())
return Counter(tokens).most_common(top)

if name == "main":
ejemplo = "Hola hola... ¿cómo estás? Hola, bien; bien bien!"
for palabra, freq in contar_palabras(ejemplo, top=10):
print(f"{palabra}: {freq}")

Docs útiles: collections.Counter, módulo re.

Enfoque 2: robusto con normalización, stopwords y exportación

Ideal para textos reales: noticias, correos o contenido web. Quitamos palabras vacías (como “de”, “la”, “y”), normalizamos acentos y exportamos a CSV.

from collections import Counter from unicodedata import normalize import csv, re, sys, argparse
Stopwords mínimas de ejemplo (ajustá según tu dominio)

STOPWORDS = {
"de","la","y","el","en","que","a","los","del","se","las","por","un",
"para","con","no","una","su","al","lo","como","más","o","pero","sus",
}

def limpiar(texto: str) -> str:
# Normaliza a NFKD y quita marcas diacríticas
txt = normalize("NFKD", texto).encode("ascii", "ignore").decode("ascii")
return txt.lower()

def tokenizar(texto: str):
return re.findall(r"[a-z0-9]+", texto)

def contar(texto: str, quitar_stop=True):
txt = limpiar(texto)
tokens = tokenizar(txt)
if quitar_stop:
tokens = [t for t in tokens if t not in STOPWORDS and len(t) >= 2]
return Counter(tokens)

def guardar_csv(contador: Counter, ruta: str, top: int = 100):
with open(ruta, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["palabra","frecuencia"])
for palabra, freq in contador.most_common(top):
w.writerow([palabra, freq])

if name == "main":
ap = argparse.ArgumentParser()
ap.add_argument("-i","--input", help="Ruta del archivo de texto (o dejar vacío para stdin)")
ap.add_argument("-o","--output", default="frecuencias.csv", help="Salida CSV")
ap.add_argument("--no-stop", action="store_true", help="No quitar stopwords")
ap.add_argument("--top", type=int, default=100, help="Top N palabras")
args = ap.parse_args()

data = ""
if args.input:
    with open(args.input, encoding="utf-8") as f:
        data = f.read()
else:
    data = sys.stdin.read()

contador = contar(data, quitar_stop=not args.no_stop)
guardar_csv(contador, args.output, top=args.top)
print(f"OK: {args.output} generado con top={args.top}")

Cómo usar el script CLI

  1. Guardá el código como repetidas.py.
  2. Ejecutá con archivo: python repetidas.py -i articulo.txt -o frecuencias.csv --top 50
  3. O pasá el texto por stdin: type articulo.txt | python repetidas.py --top 30

Si necesitás una lista más completa de palabras vacías, mirá stopwords y limpieza de texto y adaptá STOPWORDS a tu tema (legal, técnico, médico, etc.).

Tal vez también te interese saber Cómo hacer streaming de juegos en múltiples plataformas sin cortes.

Mejoras opcionales (según tu caso)

  • Unicode sin perder acentos: si querés conservar “acción” distinto de “accion”, salteate normalize y ajustá la regex para letras con acento.
  • Lematización: convierte “corriendo/corrí” a “correr” para agrupar variantes (requiere librería NLP).
  • Expresiones multi-palabra: detectá n-gramas (bigramas/trigramas) para frases repetidas.
  • Reporte HTML/Excel: además del CSV, generá una tabla HTML o un XLSX con formato.

Pruebas rápidas y calidad

  • Probá con ejemplos que incluyan mayúsculas, acentos, signos y números.
  • Verificá que “la, la; LA” cuenten como la misma palabra tras la limpieza.
  • Revisá que las stopwords no eliminen términos clave de tu nicho.

Errores comunes (y cómo evitarlos)

  • Quitar demasiadas palabras: usa una lista de stopwords corta y específica.
  • Regex muy permisiva: podría capturar basura (emojis/códigos). Ajustá al corpus real.
  • Encoding: abrí archivos en utf-8 y testea con acentos/ñ.

Cierre y próximos pasos

Con estos bloques ya dominás cómo hacer un script en python donde encuentre palabras repetidas: limpieza, tokenización, conteo y exportación. Desde acá, podés sumar n-gramas, lemas y dashboards para análisis más profundo.

Preguntas frecuentes

¿Por qué usar Counter y no un diccionario manual?

Counter optimiza el conteo y trae utilidades como most_common(), ideal para rankings rápidos.

¿Conviene eliminar acentos?

Depende del caso. Quitarlos unifica “acción/accion”; conservarlos diferencia términos. Elegí según tu dominio.

¿Cómo excluyo números, URLs o emojis?

Ajustá la regex de tokenización para aceptar solo letras o agregá filtros específicos para patrones que quieras descartar.

¿Puedo procesar muchos archivos a la vez?

Sí: recorré una carpeta, concatená textos y contá con el mismo pipeline. Luego exportá un CSV por archivo o uno global.