• 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
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

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 con NLTK en Python

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

La librería de referencia el Python para realizar procesado del lenguaje natural (PLN) es NLTK (Natural Language Toolkit). Lo que se debe a que prácticamente incluye todas las herramientas necesarias para trabajar con PLN, entre las que se incluyen tokenización, lematización, etiquetado gramatical, análisis sintáctico y análisis de sentimientos. Facilitando de esta manera el trabajo de sus usuarios. Veamos cómo se puede implementar fácilmente el análisis de sentimientos con NLTK con la que es posible determinar la polaridad emocional de un texto (positivo, negativo o neutro).

Tabla de contenidos

  • 1 La librería NLTK
  • 2 Implementación de análisis de sentimientos con NLTK
    • 2.1 Primera ejecución de NLTK
    • 2.2 Preprocesamiento de datos
    • 2.3 Extracción de características
    • 2.4 Conjunto de datos de entrenamiento
    • 2.5 Factorización del código
    • 2.6 Entrenamiento del modelo
    • 2.7 Clasificación de nuevos textos
  • 3 Análisis de sentimientos en español
  • 4 Conclusiones

La librería NLTK

NLTK es una librería de Python que se incluye por defecto en Anaconda. Por lo que, para aquellos que trabajan con esta distribución, ya la tienen instalada en el sistema. Si no es así, se puede agregar a cualquier instalación de Python mediante la ejecución del siguiente comando

pip install nltk

Lo descargará e instalará la última versión.

NLTK es una biblioteca muy versátil y útil para aquellos interesados en el procesado del lenguaje natural. Algunas de sus principales características son:

  1. Tokenización: proporciona métodos para dividir el texto en unidades más pequeñas llamadas “tokens”.
  2. Lematización y derivación: ofrece herramientas para realizar la lematización, la reducción de las palabras a su forma base (lemas), y también la derivación, la obtención de las raíces de las palabras.
  3. Etiquetado gramatical: incluye modelos y algoritmos para etiquetar las palabras con información gramatical, como partes del discurso (sustantivos, verbos, adjetivos, etc.) y categorías gramaticales.
  4. Análisis sintáctico: proporciona métodos para realizar el análisis sintáctico de oraciones y textos, lo que permite comprender las estructuras gramaticales y las relaciones entre las palabras.
  5. Modelos de lenguaje: incluye una variedad de modelos de lenguaje pre-entrenados que se pueden utilizar para tareas como análisis de sentimientos, clasificación de texto y generación de texto.
  6. Recursos lingüísticos: ofrece acceso a una amplia gama de recursos lingüísticos, como diccionarios, corpus etiquetados, listas de palabras comunes y stopwords en varios idiomas.
  7. Aprendizaje automático: proporciona una interfaz para entrenar y utilizar modelos de aprendizaje automático en tareas de PLN, como clasificación de texto, agrupación de temas y análisis de sentimientos.

Publicidad


Implementación de análisis de sentimientos con NLTK

Los pasos para realizar análisis de sentimientos con NLTK son relativamente sencillos, ya que la librería ofrece todos los recursos necesarios.

Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
En Analytics Lane
Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas

Primera ejecución de NLTK

En la instalación de NLTK no se incluyen los recursos necesarios para trabajar en PLN tales como las reglas de puntuación o las stowords. Por lo que la primera vez que se ejecute las funciones de librería se solicitará que se descarguen estos recursos. Afortunadamente esto es algo que se puede hacer fácilmente simplemente indicando a la función download() de NLTK los recursos requeridos. Para realizar análisis de sentimientos con NLTK es necesario importar el siguiente código.

import nltk

nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')
nltk.download('omw-1.4')

Publicidad


Preprocesamiento de datos

Antes de poder realizar el análisis de sentimiento con NLTK es necesario preprocesar los mensajes de texto para normalizar. Básicamente lo que se debe hacer es:

  • Tokenización: dividir el texto en palabras o frases más pequeñas llamadas tokens.
  • Eliminación de signos de puntuación y caracteres especiales.
  • Conversión de texto a minúsculas para normalizar el texto.
  • Eliminación de las stopwords o palabras irrelevantes para el mensaje tales como “a”, “el”, “y”, etc.
  • Reducción de las palabras a su forma base (lemas).

Estos cuatro pasos se pueden implementar con funciones de NLTK, tal como se muestra en el siguiente ejemplo.

# Procesado de texto
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
import string

text = "I love the content on the Analytics Lane blog, articles are fantastic."

# Tokenización
tokens = word_tokenize(text)

# Eliminación de signos de puntuación
tokens = [token for token in tokens if token not in string.punctuation]

# Conversión a minúsculas
tokens = [token.lower() for token in tokens]

# Eliminación de stopwords
stop_words = set(stopwords.words('english'))
tokens = [token for token in tokens if token not in stop_words]

# Lematización
lemmatizer = WordNetLemmatizer()
tokens = [lemmatizer.lemmatize(token) for token in tokens]

# Reconstrucción del texto preprocesado
preprocessed_text = ' '.join(tokens)
preprocessed_text
'love content analytics lane blog article fantastic'

En primer lugar se debe tokenizar las frase mediante la función word_tokenize(), lo que divide está en una lista de palabras y signos de puntuación. Posteriormente, mediante con herramientas estándar de Python, se eliminan los tokens que estén en la lista de signos de puntuación (string.punctuation) y se convierten los todo el texto a minúsculas. Una vez homogeneizado el texto, se eliminan las stopwords que incluye NLTK. A la hora de importar las stopwords es necesario indicar el idioma con el que se está trabajando ya que estas son diferentes. Finalmente se lematiza los tokens para eliminar plurales y derivaciones.

El resultado de este proceso es el listado de palabras de la frase en su forma base.

Extracción de características

Una vez preprocesado el texto, es necesario extraer las características de este antes de poder entrenar un modelo. Siendo lo más habitual emplear la frecuencia de las palabras como características. Algo que en NLTK se implementa mediante la clase FreqDist y se muestra en el siguiente código de ejemplo.

from nltk import FreqDist

features = {}
words = word_tokenize(preprocessed_text)
word_freq = FreqDist(words)

for word, freq in word_freq.items():
    features[word] = freq

features
{'love': 1,
 'content': 1,
 'analytics': 1,
 'lane': 1,
 'blog': 1,
 'article': 1,
 'fantastic': 1}

Lo que da como resultado un diccionario con la palabra clave y el valor es el número de ocurrencias.

Publicidad


Conjunto de datos de entrenamiento

Para entrenar un modelo es necesario contar con un conjunto de datos de entrenamiento, para eso se puede crear una lista de tuplas con el mensaje y la etiqueta que se desea entrenar. A modo de ejemplo se puede probar con un listado de siete mensajes como el siguiente.

training_data = [
    ("I love the content on the Analytics Lane blog, articles are fantastic.", "positive"),
    ("The code does not work, it gave me an error when executing it.", "negative"),
    ("I love this product!", "positive"),
    ("This movie was terrible.", "negative"),
    ("The weather is nice today.", "positive"),
    ("I feel so sad about the news.", "negative"),
    ("It's just an average book.", "neutral")
]

Factorización del código

Antes de continuar se puede factorizar el código anterior para facilitar su uso a la hora de entrenar un modelo. Para lo que se pueden crear dos funciones: preprocess_text() para el preprocesado de texto y extract_features() para la extracción de características.

from nltk import FreqDist
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
import string

def preprocess_text(text):
    """
    Realiza el preprocesamiento básico de un texto en inglés utilizando NLTK.

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

    Returns:
        str: El texto preprocesado.
    """
    # Tokenización
    tokens = word_tokenize(text)

    # Eliminación de signos de puntuación
    tokens = [token for token in tokens if token not in string.punctuation]

    # Conversión a minúsculas
    tokens = [token.lower() for token in tokens]

    # Eliminación de stopwords
    stop_words = set(stopwords.words('english'))
    tokens = [token for token in tokens if token not in stop_words]

    # Lematización
    lemmatizer = WordNetLemmatizer()
    tokens = [lemmatizer.lemmatize(token) for token in tokens]

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

    return preprocessed_text


def extract_features(text):
    """
    Extrae las características del texto utilizando NLTK 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 = {}
    words = word_tokenize(text)
    word_freq = FreqDist(words)

    for word, freq in word_freq.items():
        features[word] = freq

    return features

Publicidad


Entrenamiento del modelo

El análisis de sentimientos con NLTK se puede realizar usando un clasificador basado en Naive Bayes. NLTK proporciona una clase en la que se implementa este tipo de clarificadores. Empleando esta clase y las funciones creadas en la sección anterior se puede entrenar un modelo con los datos de ejemplo en pocas líneas de código, tal como se puede ver a continuación.

from nltk.classify import NaiveBayesClassifier

# 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), label) for text, label in preprocessed_training_data]

# Entrenamiento del clasificador Naive Bayes
classifier = NaiveBayesClassifier.train(training_features)

Clasificación de nuevos textos

Una vez que el modelo está entrando se puede usar para clasificar nuevos textos. Simplemente es necesario preprocesar y extraer las características de la nueva cadena de texto para realizar la predicción con el clasificador.

# Nuevo texto para clasificar
new_text = "I really enjoyed the concert!"

# Preprocesamiento del nuevo texto
preprocessed_text = preprocess_text(new_text)

# Extracción de características del nuevo texto
features = extract_features(preprocessed_text)

# Clasificación del nuevo texto
sentiment = classifier.classify(features)
print("Sentiment:", sentiment)
Sentiment: positive

Como resultado se puede ver que la nueva cadena es positiva.

Publicidad


Análisis de sentimientos en español

En esta entrada se ha explicado cómo hacer análisis de sentimiento en inglés. Si se usa el ejemplo para trabajar con texto en español, u otros idiomas, el resultado no será satisfactorio dado que se ha usado el listado de stopwords del inglés un lematizador (WordNetLemmatizer) que no es adecuado para el español.

Por eso, para realizar análisis de sentimientos en español es mejor usar otras herramientas que explicaré la semana que viene.

Conclusiones

NLTK es la librería de referencia para el procesado del lenguaje natural (PLN). Una librería que facilita el trabajo de los científicos de datos cuando se desea realizar análisis de sentimiento. Aunque, funciones clave como la lematización solamente funcionan en inglés, el uso de NLTK facilita comprender los pasos necesarios para realizar este tipo de análisis.

En la publicación de la semana que viene se explicará cómo se puede hacer análisis de sentimientos en español con otra librería.

Image by Brentt from Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 4 / 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?

Publicidad


Publicaciones relacionadas

  • Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
  • Probabilidades y tests: por qué un resultado positivo no significa lo que crees
  • JSON en bases de datos: cuándo es buena idea y cuándo no
  • Roles en ciencia de datos: Guía completa de perfiles técnicos
  • Exactitud, precisión, recall… qué mide realmente cada métrica (y qué no)
  • Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad
  • Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña
  • Hardening de NGINX en 2026: configuración segura básica paso a paso

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

Hardening de NGINX en 2026: configuración segura básica paso a paso

marzo 12, 2026 Por Daniel Rodríguez

Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña

marzo 10, 2026 Por Daniel Rodríguez

Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad

marzo 5, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • Poe: ChatGPT y otros modelos generativos en el móvil publicado el abril 12, 2023 | en Herramientas
  • Método de Brent e implementación en Python publicado el abril 28, 2023 | en Ciencia de datos
  • pandas Pandas: Cómo iterar sobre las filas de un DataFrame en Pandas publicado el septiembre 13, 2021 | en Python
  • pandas Pandas: Contar los valores nulos en DataFrame publicado el agosto 12, 2021 | en Python

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.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

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