Saltar al contenido principal

🤖 Spacy

spaCy es una biblioteca de código abierto para Procesamiento del Lenguaje Natural (PLN) en Python. Ofrece herramientas avanzadas como etiquetado POS, reconocimiento de entidades nombradas (NER), análisis de dependencias, clasificación de texto, entre otras vistas.

🚀 Instalación e Importación de spaCy

Antes de utilizar spaCy, es necesario instalar la biblioteca y descargar los modelos de idioma correspondientes. A continuación, se muestra cómo hacerlo:

  1. Ejecuta el siguiente comando para instalar spaCy en tu entorno de Python:

    Instalación de python
    pip install spacy
  2. Ejecuta el siguiente comando para instalar spaCy en tu entorno de Python:

    Descarga de un modelo de idioma
    # Español
    python -m spacy download es_core_news_sm
    # Inglés
    python -m spacy download en_core_web_sm
  3. Después de la instalación, puedes importar y cargar un modelo de idioma:

    Importación y carga de spaCy en tu proyecto
    import spacy
    # Carga del modelo de español
    pln = spacy.load("es_core_news_sm")

    # Procesar texto
    doc = pln("Apple está buscando comprar una compañía por $1 millón de pesos en México")

    ⭐ Funcionalidades principales

    NombreDescripción
    TokenizaciónSegmentación del texto en palabras, signos de puntuación, etc.
    Etiquetado POSIdentificación de la categoría gramatical de las palabras.
    Análisis de dependenciasRelación sintáctica entre las palabras (sujeto, objeto, etc.).
    SerializaciónAlmacenamiento de objetos en archivos o cadenas de bytes.
    LematizaciónConversión de palabras a sus formas base.
    Detección de límites oracionalesSegmentación en oraciones.
    Reconocimiento de entidades (NER)Identificación de nombres de personas, empresas, ubicaciones, etc.
    Clasificación de textoAsignación de categorías o etiquetas a documentos.
    Comparación de similitudEvaluación de similitud entre palabras, frases o documentos.
    EntrenamientoMejora de modelos estadísticos personalizados.

🔑 Tokenización

spaCy segmenta el texto en tokens (palabras, signos de puntuación, etc.) según reglas específicas del idioma.

Tokenización
for token in doc:
print(token.text)
01234567891011
Appleestábuscandocomprarunacompañíapor$1millóndepesos

🛑 Stopwords

Las stopwords se pueden consultar y modificar dinámicamente:

Stopwords
# Verificar stopwords
print("hola".is_stop)

# Agregar una nueva stopword
pln.Defaults.stop_words.add("computadora")
pln.vocab["computadora"].is_stop = True

# Eliminar una stopword
pln.Defaults.stop_words.remove("último")
pln.vocab["último"].is_stop = False

🏷️ Etiquetado POS

El etiquetado POS en SpaCy identifica la categoría gramatical de cada palabra dentro del texto procesado. Esto es útil para análisis lingüísticos o para extraer patrones específicos.

Parts of speech
for token in doc:
print(f"Texto: {token.text}, POS: {token.pos_}, Etiqueta: {token.tag_}, Explicación: {spacy.explain(token.tag_)}")
Texto: Apple, POS: PROPN, Etiqueta: NNP, Explicación: nombre propio singular
Texto: está, POS: AUX, Etiqueta: VBZ, Explicación: verbo auxiliar en tercera persona singular

🏢 Reconocimiento de Entidades Nombradas (NER)

El Reconocimiento de Entidades Nombradas (NER) identifica y clasifica entidades dentro del texto, como nombres propios, ubicaciones, fechas, cantidades, entre otros.

Mostrar las entidades reconocidas en el texto
for ent in doc_en.ents:
print(ent.text, ent.start_char, ent.end_char, ent.label_)
Output
Entidad: Apple, Tipo: ORG, Explicación: Organización
Entidad: $1 millón, Tipo: MONEY, Explicación: Cantidad de dinero
Entidad: México, Tipo: GPE, Explicación: Entidad geopolítica

⚙️ Procesamiento del texto

Los tokens tienen métodos para realizar las funciones fácilmente.

cols = ["texto", "lema", "POS", "stopword"]
renglones =[]

for t in doc:
renglones.append([t.text,t.lemma_,t.pos_,t.is_stop])

pd.DataFrame(renglones, columns=cols)
TextoLemaPOSTagStop
AppleapplePROPNNNPFalse
estáestarAUXVBZTrue
buscandobuscarVERBVBGFalse
comprarcomprarVERBVBGFalse
unaunoDETDTTrue
compañíacompañíaNOUNNNFalse
porporADPINTrue
$$SYM$False
11NUMCDFalse
millónmillónNUMCDFalse
dedeADPINTrue
pesospesoNOUNNNSFalse
enenADPINTrue
MéxicoméxicoPROPNNNPFalse

📊 Visualización

SpaCy proporciona herramientas para representar visualmente la estructura de las oraciones (análisis sintáctico) con ayuda de Displacy.

Visualización de dependencias
from spacy import displacy
# Dependencias
displacy.render(doc, style="dep", options={"distance": 80})

Dependencias

Visualización de las entidades nombradas
from spacy import displacy
displacy.render(doc_en, style="ent", jupyter=True)

Entidades