• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Simulador FIRE (Financial Independence, Retire Early)
    • Herramientas
      • Formateador / Minificador de JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Análisis de sentimientos en español con spaCy en Python

mayo 29, 2023 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

La semana pasada se vio cómo se puede realizar análisis se sentimientos en inglés con NLTK. A pesar de que NLTK es una librería muy potente, no cuenta con un lematizador para español, por lo que no es adecuado para trabajar en nuestro idioma. Una alternativa que sí permite realizar análisis de sentimientos en español en Python es spaCy, la cual también es bastante fácil de utilizar.

Tabla de contenidos

  • 1 Instalación de spaCy
  • 2 Características spaCy
  • 3 Pasos para realizar análisis de sentimientos en español con spaCy
    • 3.1 Preprocesamiento de datos
    • 3.2 Extracción de características
    • 3.3 Conjunto de datos de entrenamiento y factorización de los datos
    • 3.4 Entrenamiento del modelo
    • 3.5 Clasificación de nuevos textos
  • 4 Conclusiones

Instalación de spaCy

A diferencia de NLTK, spaCy no viene incluido en Anaconda, por lo que es necesario instalarlo en el sistema. Como es habitual el Python, la librería se puede instalar mediante pip escribiendo el siguiente comando en una terminal.

pip install spacy

Una vez instalado spaCy será necesario descargar los modelos pre-entrenados específicos para nuestro idioma, en nuestro caso español. Lo que se puede hacer ejecutando el siguiente comando en la terminal.

python -m spacy download es_core_news_sm

Este comando descarga un modelo reducido, pero suficiente para comprender el funcionamiento de la librería, con un peso de aproximadamente 12 MB. También están disponibles otras versiones pre-entrenadas con conjuntos de datos de tamaño medio es_core_news_md (40 MB) o grande es_core_news_lg (541 MB) que se pueden descargar alternativamente. Un listado de los modelos entrenados disponibles se puede encontrar en la página: Trained Models & Pipelines.

Características spaCy

Al igual que NLTK, spaCy es una librería de procesamiento de lenguaje natural (PLN) para Python de código abierto. Ofreciendo a los usuarios un conjunto de herramientas y modelos para realizar diversas tareas relacionadas con el procesamiento y análisis de texto. Las principales características de spaCy son:

Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
En Analytics Lane
Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane

  1. Tokenización: puede dividir texto en unidades más pequeñas llamadas “tokens”, que pueden ser palabras o partes de palabras.
  2. Etiquetado gramatical: contiene modelos entrenados que pueden etiquetar cada token en un texto con información gramatical, como partes del discurso y etiquetas sintácticas.
  3. Reconocimiento de entidades nombradas: permite identificar y clasificar entidades nombradas en un texto, como nombres de personas, organizaciones, lugares, fechas, cantidades, entre otros.
  4. Análisis sintáctico: facilita la realización de análisis sintáctico de las oraciones para capturar la estructura gramatical y las dependencias entre las palabras.
  5. Lematización: reduce las palabras a su forma base (lemas), lo que ayuda a normalizar el texto y simplificar el análisis.
  6. Modelos pre-entrenados: proporciona modelos pre-entrenados para varios idiomas que pueden utilizarse para realizar tareas de PLN sin la necesidad de entrenar un modelo desde cero. Estos modelos incluyen información gramatical, reconocimiento de entidades y análisis sintáctico.
  7. Eficiencia y velocidad: es una librería rápida y eficiente, lo que la hace adecuada para el procesamiento de grandes volúmenes de texto.

Publicidad


Pasos para realizar análisis de sentimientos en español con spaCy

Los pasos para realizar análisis de sentimiento en español con spaCy son los mismos que se han visto la semana pasada con NLTK en inglés. Aunque obviamente, las funciones que se deben usar son diferentes. En concreto, los pasos que se deben seguir son: preprocesamiento de datos, extracción de características, entrenamiento del modelo y clasificación de nuevos textos.

Preprocesamiento de datos

El procesamiento de datos en spaCy es ligeramente más sencillo en spaCy que en NLTK. En este caso se deben importar los modelos entrenados que se han descargado antes y usarlos para obtener los tokens ya tematizados y en minúsculas. Proceso que se puede ver en él siguiente código.

import spacy

text = "Me encanta el contenido del blog de Analytics Lane, los artículos son fantásticos."

nlp = spacy.load('es_core_news_sm')
doc = nlp(text)

# Eliminación de palabras irrelevantes (stopwords) y signos de puntuación
tokens = [token.lemma_.lower() for token in doc if not token.is_stop and not token.is_punct]

# Reconstrucción del texto preprocesado
preprocessed_text = ' '.join(tokens)
preprocessed_text
'encantar contenido blog analytics lane artículo fantástico'

En este se cargan los modelos mediante la función spacy.load() (si se ha descargado otro se deberá reemplazar el nombre en el parámetro de la función por el que se desee usar). Al modelo importado se le puede pasar la cadena de texto para obtener los tokens (nlp(text)). Posteriormente se filtran aquellos que no son ni stopwords ni elementos de puntuación (not token.is_stop and not token.is_punct) para, en el mismo paso, lematizar y convertir en minúsculas (token.lemma_.lower()). El resultado es el listado de tokens procesados.

Nótese como la herramienta usa como token el infinitivo del verbo en lugar de su versión conjugada (encantar en lugar de encanta). También los términos en plural aparecen en singular (artículo en lugar de artículos). Lo que facilita el análisis de los textos.

Extracción de características

En spaCy, la extracción de características también se puede hacer de una forma sencilla. Para lo que se debe iterar sobre los tokens y crear una lista con el conteo de términos. Una posible opción para hacer esto es la que se muestra en el siguiente código de ejemplo.

features = {}
doc = nlp(preprocessed_text)

for token in doc:
    if not token.is_stop and not token.is_punct:
        if token.lemma_.lower() in features:
            features[token.lemma_.lower()] += 1
        else:
            features[token.lemma_.lower()] = 1
            
features
{'encantar': 1,
 'contenido': 1,
 'blog': 1,
 'analytics': 1,
 'lane': 1,
 'artículo': 1,
 'fantástico': 1}

Lo que genera un diccionario donde la palabra es la clave y el valor es el número de ocurrencias de esta en el texto.

Publicidad


Conjunto de datos de entrenamiento y factorización de los datos

Ahora, antes de poder hacer un análisis de sentimientos en español con spaCy es necesario disponer de un conjunto de datos para el entrenamiento. Para lo que se recurre a una traducción del conjunto que se ha utilizado la semana pasada con NLTK.

training_data = [
    ("Me encanta el contenido del blog de Analytics Lane, los artículos son fantásticos.", "positivo"),
    ("El código no funciona, me ha dado un error al ejecutarlo.", "negativo"),
    ("Me encanta este producto.", "positivo"),
    ("Esta película fue terrible.", "negativo"),
    ("El clima está agradable hoy.", "positivo"),
    ("Me siento triste por las noticias.", "negativo"),
    ("Es solo un libro promedio.", "neutral")
]

Otra cosa que también se puede hacer es crear funciones con las que se factorizan los pasos vistos en las secciones anteriores.

import spacy

def preprocess_text(text):
    """
    Realiza el preprocesamiento básico de un texto en idioma español utilizando spaCy.

    Args:
        text (str): El texto a ser preprocesado.

    Returns:
        str: El texto preprocesado.
    """
    nlp = spacy.load('es_core_news_sm')
    doc = nlp(text)

    # Eliminación de palabras irrelevantes (stopwords) y signos de puntuación
    tokens = [token.lemma_.lower() for token in doc if not token.is_stop and not token.is_punct]

    # Reconstrucción del texto preprocesado
    preprocessed_text = ' '.join(tokens)

    return preprocessed_text


def extract_features(text):
    """
    Extrae las características del texto utilizando spaCy y devuelve un diccionario de características.

    Args:
        text (str): El texto del cual extraer características.

    Returns:
        dict: Un diccionario que representa las características extraídas del texto.
    """
    features = {}
    doc = nlp(text)
    for token in doc:
        if not token.is_stop and not token.is_punct:
            if token.lemma_.lower() in features:
                features[token.lemma_.lower()] += 1
            else:
                features[token.lemma_.lower()] = 1
    return features

Entrenamiento del modelo

Para el análisis de sentimiento uno de los modelos que mejor funciona son Naive Bayes. A diferencia de NLTK, spaCy no cuenta con una implementación propia, pero se puede recurrir a la que existe en Scikit-learn. Así, para entrenar el modelo solamente sería necesario preprocesar los datos, extraer las características y crear un conjunto de entrenamiento para el modelo MultinomialNB(). Pasos que se pueden implementar como se muestra a continuación.

from sklearn.feature_extraction import DictVectorizer
from sklearn.naive_bayes import MultinomialNB

# Preprocesamiento de los datos de entrenamiento
preprocessed_training_data = [(preprocess_text(text), label) for text, label in training_data]

# Extracción de características de los datos de entrenamiento
training_features = [extract_features(text) for text, _ in preprocessed_training_data]
vectorizer = DictVectorizer(sparse=False)
X_train = vectorizer.fit_transform(training_features)

# Etiquetas de los datos de entrenamiento
y_train = [label for _, label in preprocessed_training_data]

# Entrenamiento del clasificador Naive Bayes
classifier = MultinomialNB()
_ = classifier.fit(X_train, y_train)

Clasificación de nuevos textos

Ahora, una vez entrenado el modelo, se puede usar esta para predecir el sentimiento de los nuevos textos. Simplemente se repiten con los nuevos textos las transformaciones realizadas sobre el conjunto de entrenamiento y el resultado se le pasa al modelo.

# Nuevo texto para clasificar
new_text = "Me encantó mucho del concierto."

# Preprocesamiento del nuevo texto
preprocessed_text = preprocess_text(new_text)

# Extracción de características del nuevo texto
features = extract_features(preprocessed_text)
X_test = vectorizer.transform([features])

# Clasificación del nuevo texto
sentiment = classifier.predict(X_test)
print("Sentimiento:", sentiment[0])
Sentimiento: positivo

Publicidad


Conclusiones

spaCy es una librería alternativa NLTK con la que también se puede realizar análisis de sentimientos. Contando con la ventaja de que también se puede hacer en español y otros idiomas gracias a los modelos pre-entrenados que se pueden descargar. Algo que también simplifica el trabajo con la librería. Por eso, en el caso de querer realizar análisis de sentimientos en español, spaCy es una de las opciones que debe tener siempre en cuenta.

Image by Pexels from Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 5 / 5. Votos emitidos: 1

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
  • Nueva calculadora de préstamos e hipotecas en el laboratorio de aplicaciones de Analytics Lane
  • Hardening avanzado de NGINX: CSP, OCSP Stapling y defensa en profundidad
  • Nuevo generador y verificador de hashes en el laboratorio de aplicaciones de Analytics Lane
  • Nueva simulación de la estrategia Martingala en ruleta en el laboratorio de aplicaciones de Analytics Lane
  • Exactitud, precisión, recall… y los errores que cometemos al interpretarlas en proyectos reales
  • Nuevo simulador del problema de Monty Hall en el laboratorio de aplicaciones de Analytics Lane
  • Nuevo simulador interactivo de K-Means en el laboratorio de aplicaciones de Analytics Lane
  • Por qué los chatbots de inteligencia artificial parecen estar siempre de acuerdo contigo – Conversar con una inteligencia artificial – Parte I

Publicado en: Ciencia de datos, Python Etiquetado como: Machine learning, PLN, Sentiment analysis

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Nueva herramienta: Comparador y Formateador de Texto y JSON en el laboratorio de Analytics Lane

abril 21, 2026 Por Daniel Rodríguez

Chatbots vs redes sociales: la diferencia clave entre la inteligencia artificial y los algoritmos de recomendación – Conversar con una inteligencia artificial – Parte II

abril 21, 2026 Por Daniel Rodríguez

Nueva Calculadora de Estadísticos Descriptivos en el laboratorio de aplicaciones de Analytics Lane

abril 20, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Buscar en Excel con dos o más criterios publicado el septiembre 7, 2022 | en Herramientas
  • Gráfica con los datos y las anomalías detectadas con OneClass SVM One-Class SVM: Detección de anomalías con máquinas de vector soporte publicado el marzo 15, 2024 | en Ciencia de datos
  • Nueva herramienta: Comparador y Formateador de Texto y JSON en el laboratorio de Analytics Lane publicado el abril 21, 2026 | en Noticias
  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos
  • Cómo desinstalar Oracle Database 19c en Windows publicado el noviembre 25, 2022 | en Herramientas

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto