SkillAgentSearch skills...

Spanlp

spanlp: nlp applied for spanish vulgarity. A fast, robust Python library to check for profanity or offensive language in Spanish strings. It contains all the rude words of Spanish-speaking countries.

Install / Use

/learn @jfreddypuentes/Spanlp
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<h1 align="center">spanlp</h1> <p align="center"> <br> <i>spanlp es una librería escrita en Python para detectar, censurar y limpiar groserías, <br> vulgaridades, palabras de odio, racismo, xenofobia y bullying en textos escritos en <strong>Español</strong>. </i> <br> <p align="center"> <a href="https://test.pypi.org/project/spanlp/"> <img src="https://img.shields.io/badge/version-v1.1.0-green"/> </a> <a href="https://test.pypi.org/project/spanlp/"> <img src="https://img.shields.io/badge/status-stable-blue"/> </a> <a href="https://test.pypi.org/project/spanlp/"> <img src="https://img.shields.io/badge/release-v1.1.0-brightgreen"/> </a> <a href="https://test.pypi.org/project/spanlp/"> <img src="https://img.shields.io/badge/test--pypi-v0.0.7-yellow"/> </a> <a href="https://test.pypi.org/project/spanlp/"> <img src="https://img.shields.io/badge/license-MIT-brightgreen"/> </a> </p> <p align="center"> <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/jfreddypuentes/spanlp?style=social"> </p> </p> <hr>

Indice

<hr>

Sobre la librería

spanlp es una librería escrita en Python para detección de groserías, vulgaridades, palabras de odio, racismo, xenofobia y bullying en textos escritos en Español. Puedes usar la librería y aplicarla a palabras de cualquiera de los más de 20 paises de habla hispana.

Incluye:

  1. Argentina 🇦🇷
  2. Bolivia 🇧🇴
  3. Chile 🇨🇱
  4. Colombia 🇨🇴
  5. Costa Rica 🇨🇷
  6. Cuba 🇨🇺
  7. Ecuador 🇪🇨
  8. El Salvador 🇸🇻
  9. España 🇪🇸
  10. Guatemala 🇬🇹
  11. Guinea Ecuatorial 🇬🇶
  12. Honduras 🇭🇳
  13. México 🇲🇽
  14. Nicaragua 🇳🇮
  15. Panamá 🇵🇦
  16. Paraguay 🇵🇾
  17. Perú 🇵🇪
  18. Puerto Rico 🇵🇷
  19. República Dominicana 🇩🇴
  20. Uruguay 🇺🇾
  21. Venezuela 🇻🇪

Casos de uso

  • Censurar vulgaridades en un texto.
  • Detectar y censurar vulgaridades en una sala de chat en linea.
  • Encontrar y censurar frases y palabras de odio, racismo, xenofia, bullying. (Se deben incluir como parámetros)
  • Censurar comentarios groseros o insultos en algún blog o aplicación web o sitio web.
  • Censurar malas palabras en un sistema de recolección de opiniones, sugerencias, quejas y reclamos.
  • Limpiar textos antes de ser publicados.
  • Detectar y eliminar vulgaridades en textos que serán leidos y/o vistos por niños.
  • Limpiar una base de datos con mucho texto.

Status Desarrollo

| Funcionalidad | Desarrollo | Pruebas | Release | |-----------------------------------|------------|-------------|----------- | Soporte de tokens con números | ✓ | ✓ | v0.0.5 |
| Estrategias de limpieza de datos | ✓ | ✓ | v0.0.5 | | Completar dataset | ✓ | ✓ | v1.0.1 | | Hamming | ✓ | ✓ | v1.0.2 | | Levenstein | ✓ | ✓ | v1.1.0 | | Bag distance | - | | - | | Sorensen-Dice coefficient | - | | - | | Tversky index | - | | - | | Overlap index | - | | - | | Tanimoto distance | - | | - | | Ampliación datasets | Progreso | - | - | | % de palabrotas en el texto | - | - | - |

Instalación

Para instalar la última versión use:

pip install spanlp

Para instalar una versión específica use (por ejemplo):

pip install spanlp==1.1.0

Funcionamiento

Los algoritmos y modulos se personalizan de forma dinámica y muy flexible. Veamos algunos usos.

Uso básico

Validar si una palabra o frase contiene o no una palabrota:

from spanlp.palabrota import Palabrota
palabrota = Palabrota()
print(palabrota.contains_palabrota("Hola huevon cómo está?"))
# salida: True
from spanlp.palabrota import Palabrota
palabrota = Palabrota()
print(palabrota.contains_palabrota("Hola a todos ¿cómo están?"))
# salida: False

Censurar una frase con los parámetros por defecto:

from spanlp.palabrota import Palabrota

palabrota = Palabrota()
print(palabrota.censor("Hola huevon cómo está?"))

# salida: Hola !$%#@! cómo está?

Censurar la misma frase, configurando carácteres propios

from spanlp.palabrota import Palabrota

palabrota = Palabrota(censor_char="*")
print(palabrota.censor("Hola huevon como está?"))

# salida: Hola ****** cómo está?

Censurar otra frase, configurando carácteres propios y país

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country

palabrota = Palabrota(censor_char="@", countries=[Country.COLOMBIA, Country.VENEZUELA])
print(palabrota.censor("Hola huevon marico cómo está?"))

# salida: Hola @@@@@@ @@@@@@ cómo está?

Censuremos la misma frase pero solo con el país de Venezuela

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country

palabrota = Palabrota(censor_char="@", countries=[Country.VENEZUELA])
print(palabrota.censor("Hola huevon marico cómo está?"))

# salida: Hola huevon @@@@@@ cómo está?

Censuremos la misma frase pero incluyendo "huevon" al vocabulario de Venezuela

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country

palabrota = Palabrota(censor_char="@", countries=[Country.VENEZUELA], include=["huevon"])
print(palabrota.censor("Hola huevon marico cómo está?"))

# salida: Hola @@@@@@ @@@@@@ cómo está?

Censuremos la misma frase incluyendo "huevon" al vocabulario de Venezuela y excluyendo "marico"

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country

palabrota = Palabrota(censor_char="@", countries=[Country.VENEZUELA], include=["huevon"], exclude=["marico"])
print(palabrota.censor("Hola huevon marico cómo está?"))

# salida: Hola huevon marico cómo está?

Censuremos la misma frase incluyendo ""Hola" y "huevon" al vocabulario de Venezuela y excluyendo "marico"

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country

palabrota = Palabrota(censor_char="-", countries=[Country.VENEZUELA], include=["huevon"], exclude=["marico"])
print(palabrota.censor("Hola huevon marico cómo está?"))

# salida: ---- ---- marico cómo está?

Uso Avanzado

El uso avanzado incluye usar metricas de distancia y similitud para encontrar, comparar, censurar palabras. Estas son las metricas usadas a la fecha:

  1. ES-Indice de Jaccard (EN-Jaccard Index)
  2. ES-Similitud del coseno (EN-Cosine Similarity)
  3. ES-Levenshtein(EN-Levenshtein)
  4. ES-Damerau-Levenshtein(EN-Damerau-Levenshtein)

Censuremos la frase usando Cosine Similarity

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country
from spanlp.domain.strategies import CosineSimilarity

palabrota = Palabrota(censor_char="*", countries=[Country.VENEZUELA], distance_metric=CosineSimilarity())
print(palabrota.censor("Hola huevo maric cómo está?"))

# salida: Hola huevo ***** cómo está?

A pesar de que "maric" no está en el dataset, al algoritmo la censuró dado que por la métrica de distancia es muy similar.

Censuremos la frase usando Cosine Similarity manipulando los parámetros

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country
from spanlp.domain.strategies import CosineSimilarity

# Indicamos que tenga en cuenta palabras similares en al menos 30% y que normalice los datos (poner en minusculas, remover acentos)
cosine = CosineSimilarity(0.9, normalize=True) 
palabrota = Palabrota(censor_char="*", countries=[Country.VENEZUELA], distance_metric=cosine)
print(palabrota.censor("Hola huevon MARIC cómo está?"))

# salida: hola huevon ***** **** esta? => Censuró "como" porque en el dataset está "cono" y son similares en más del 90%

Censuremos la frase usando JaccardIndex con los parámetros por defecto

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country
from spanlp.domain.strategies import JaccardIndex

palabrota = Palabrota(censor_char="*", countries=[Country.VENEZUELA], distance_metric=JaccardIndex())
print(palabrota.censor("Hola huevo maric cómo está?"))

# salida: Hola huevo ***** cómo está?

El indice de Jaccard usa por defecto los siguientes parámetros:

  • threshold=0.8 - Indica que censurará palabras con una similitud del 80% o más.
  • normalize=False - False indica que no pasará el texto a minuscula y no removerá acentos.
  • n_gram=2 - Usa 2 subsecuencias de la palabra. (Ver N-grama)

Censuremos la frase usando JaccardIndex y modifiquemos los parámetros

from spanlp.palabrota import Palabrota
from spanlp.domain.countries import Country
from spanlp.domain.strategies import JaccardIndex

jaccard = JaccardIndex(threshold=0.9, normalize=True, n_gram=1)
pal
View on GitHub
GitHub Stars39
CategoryEducation
Updated5d ago
Forks8

Languages

Python

Security Score

95/100

Audited on Mar 22, 2026

No findings