Saltar al contenido principal
InicioTutorialesPython

Tutorial de análisis de sentimiento NLTK para principiantes

Tutorial de análisis de sentimientos NLTK (natural language toolkit) de Python. Aprenda a crear y desarrollar análisis de sentimientos utilizando Python. Siga los pasos específicos para extraer y analizar texto para el procesamiento del lenguaje natural.
may 2024  · 13 min leer

En la era digital actual, el análisis y la minería de textos se han convertido en partes esenciales de diversas industrias. El análisis de textos se refiere al proceso de analizar y extraer información significativa de datos de texto no estructurados. Uno de los subcampos más importantes del análisis de textos es el análisis de sentimientos, que consiste en determinar el tono emocional del texto.

El análisis de sentimientos tiene numerosas aplicaciones prácticas, desde la supervisión de marcas hasta el análisis de las opiniones de los clientes. Python es un popular lenguaje de programación utilizado para el análisis y la minería de textos, y la biblioteca Natural Language Toolkit (NLTK) es una de las más utilizadas para el procesamiento del lenguaje natural en Python.

Este tutorial proporcionará una guía paso a paso para realizar análisis de sentimientos utilizando la biblioteca NLTK en Python. Al final de este tutorial, usted tendrá una sólida comprensión de cómo realizar análisis de sentimiento utilizando NLTK en Python, junto con un ejemplo completo que puede utilizar como punto de partida para sus propios proyectos. Así que, ¡empecemos!

Biblioteca NLTK (Natural Language Toolkit)

Natural Language Toolkit (NLTK) es una popular biblioteca de código abierto para el procesamiento del lenguaje natural (PLN) en Python. Ofrece una interfaz fácil de usar para una amplia gama de tareas, como tokenización, stemming, lematización, análisis sintáctico y análisis de sentimiento. 

NLTK es ampliamente utilizado por investigadores, desarrolladores y científicos de datos de todo el mundo para desarrollar aplicaciones de PLN y analizar datos de texto.

Una de las principales ventajas de utilizar NLTK es su amplia colección de corpus, que incluye datos de texto de diversas fuentes, como libros, artículos de noticias y plataformas de redes sociales. Estos corpus constituyen una rica fuente de datos para entrenar y probar modelos de PNL.

¿Qué es el análisis de sentimiento?

El análisis de sentimiento es una técnica utilizada para determinar el tono emocional o sentimiento expresado en un texto. Consiste en analizar las palabras y frases utilizadas en el texto para identificar el sentimiento subyacente, ya sea positivo, negativo o neutro. 

El análisis de sentimientos tiene una amplia gama de aplicaciones, como la monitorización de redes sociales, el análisis de opiniones de clientes y la investigación de mercados.

Uno de los principales retos del análisis de sentimientos es la complejidad inherente al lenguaje humano. Los datos textuales suelen contener sarcasmo, ironía y otras formas de lenguaje figurado que pueden resultar difíciles de interpretar con los métodos tradicionales. 

Sin embargo, los recientes avances en el procesamiento del lenguaje natural (PLN ) y el aprendizaje automático han hecho posible realizar análisis de sentimientos en grandes volúmenes de datos de texto con un alto grado de precisión. 

Tres metodologías para el análisis de sentimientos

Existen varias formas de realizar análisis de sentimientos a partir de datos de texto, con distintos grados de complejidad y precisión. Los métodos más comunes incluyen un enfoque basado en el léxico, un enfoque basado en el aprendizaje automático (ML) y un enfoque de aprendizaje profundo basado en transformadores preentrenados. Veamos cada uno de ellos con más detalle:

Análisis basado en el léxico

Este tipo de análisis, como el analizador de sentimientos NLTK Vader, consiste en utilizar un conjunto de reglas y heurísticas predefinidas para determinar el sentimiento de un texto. Estas reglas suelen basarse en características léxicas y sintácticas del texto, como la presencia de palabras y frases positivas o negativas. 

Aunque el análisis basado en léxicos puede ser relativamente sencillo de aplicar e interpretar, puede no ser tan preciso como los enfoques basados en ML o en transformaciones, especialmente cuando se trata de datos de texto complejos o ambiguos.

Aprendizaje automático (ML) 

Este enfoque consiste en entrenar un modelo para identificar el sentimiento de un texto a partir de un conjunto de datos de entrenamiento etiquetados. Estos modelos pueden entrenarse utilizando una amplia gama de algoritmos de ML, incluidos árboles de decisión, máquinas de vectores de soporte (SVM) y redes neuronales. 

Los enfoques basados en ML pueden ser más precisos que el análisis basado en reglas, especialmente cuando se trata de datos de texto complejos, pero requieren una mayor cantidad de datos de entrenamiento etiquetados y pueden ser más costosos desde el punto de vista informático.

Aprendizaje profundo basado en transformadores preentrenados

Un enfoque basado en el aprendizaje profundo, como se ha visto con BERT y GPT-4, implica el uso de modelos preformados entrenados en cantidades masivas de datos de texto. Estos modelos utilizan redes neuronales complejas para codificar el contexto y el significado del texto, lo que les permite alcanzar una precisión de vanguardia en una amplia gama de tareas de PNL, incluido el análisis de sentimientos. Sin embargo, estos modelos requieren importantes recursos informáticos y pueden no ser prácticos para todos los casos de uso.

  • El análisis basado en léxicos es un enfoque sencillo del análisis de sentimientos, pero puede no ser tan preciso como otros métodos más complejos. 
  • Los enfoques basados en el aprendizaje automático pueden ser más precisos, pero requieren datos de entrenamiento etiquetados y pueden ser más costosos desde el punto de vista informático. 
  • Los enfoques de aprendizaje profundo basados en transformadores preentrenados pueden lograr una precisión de vanguardia, pero requieren importantes recursos computacionales y pueden no ser prácticos para todos los casos de uso. 

La elección del enfoque dependerá de las necesidades y limitaciones específicas del proyecto en cuestión.

Instalación de NLTK y configuración del entorno Python

Para utilizar la biblioteca NLTK, debe disponer de un entorno Python en su ordenador. La forma más sencilla de instalar Python es descargar e instalar la distribución Anaconda. Esta distribución incluye el entorno base de Python 3 y otros extras, como Jupyter Notebook. Tampoco es necesario instalar la biblioteca NLTK, ya que viene preinstalada con NLTK y muchas otras bibliotecas útiles. 

Si decide instalar Python sin ninguna distribución, puede descargar e instalar Python directamente desde python.org. En este caso, tendrás que instalar NLTK una vez que tu entorno Python esté listo.

Para instalar la biblioteca NLTK, abra el terminal de comandos y escriba:

pip install nltk

Vale la pena señalar que NLTK también requiere que se descarguen algunos datos adicionales antes de que se pueda utilizar con eficacia. Estos datos incluyen modelos preentrenados, corpus y otros recursos que NLTK utiliza para realizar diversas tareas de PNL. Para descargar estos datos, ejecute el siguiente comando en el terminal o en su script Python:

import nltk

nltk.download('all')

Tratamiento previo del texto

El preprocesamiento del texto es un paso crucial en la realización de análisis de sentimiento, ya que ayuda a limpiar y normalizar los datos de texto, facilitando su análisis. El paso de preprocesamiento implica una serie de técnicas que ayudan a transformar los datos de texto sin procesar en una forma que pueda utilizarse para el análisis. Algunas técnicas habituales de preprocesamiento de textos son la tokenización, la eliminación de palabras vacías, la separación de palabras y la lematización.

pasos del preprocesamiento de texto en secuencia

Fuente de la imagen

Tokenización

La tokenización es un paso del preprocesamiento de texto en el análisis de sentimientos que consiste en dividir el texto en palabras individuales o tokens. Se trata de un paso esencial en el análisis de datos de texto, ya que ayuda a separar las palabras individuales del texto en bruto, lo que facilita su análisis y comprensión. La tokenización se realiza normalmente utilizando la función integrada `word_tokenize` de NLTK, que puede dividir el texto en palabras individuales y signos de puntuación.

Palabras clave

La eliminación de las palabras vacías es un paso crucial del preprocesamiento de texto en el análisis de sentimiento que implica la eliminación de palabras comunes e irrelevantes que probablemente no transmitan mucho sentimiento. Las stop words son palabras muy comunes en una lengua y que no tienen mucho significado, como "y", "el", "de" y "ello". Estas palabras pueden causar ruido y sesgar el análisis si no se eliminan.

Al eliminar las palabras vacías, es más probable que las palabras restantes del texto indiquen el sentimiento expresado. Esto puede ayudar a mejorar la precisión del análisis de sentimientos. NLTK proporciona una lista integrada de palabras vacías para varios idiomas, que puede utilizarse para filtrar estas palabras de los datos de texto.

Tallo y lematización

El stemming y la lematización son técnicas utilizadas para reducir las palabras a su raíz. El tallado consiste en eliminar los sufijos de las palabras, como "ing" o "ed", para reducirlas a su forma básica. Por ejemplo, la palabra "saltar" se derivaría a "jump". 

En cambio, la lematización consiste en reducir las palabras a su forma básica en función de su parte de la oración. Por ejemplo, la palabra "jumped" se lematizaría a "jump", pero la palabra "jumping" se lematizaría a "jumping", ya que es un participio presente.

Para obtener más información sobre el stemming y la lematización, consulte nuestro tutorial sobre stemming y lematización en Python.

Modelo de bolsa de palabras (BoW)

El modelo de bolsa de palabras es una técnica utilizada en el procesamiento del lenguaje natural (PLN) para representar datos de texto como un conjunto de características numéricas. En este modelo, cada documento o fragmento de texto se representa como una "bolsa" de palabras, en la que cada palabra del texto está representada por una característica o dimensión independiente en el vector resultante. El valor de cada característica viene determinado por el número de veces que aparece la palabra correspondiente en el texto.

El modelo de bolsa de palabras es útil en PNL porque nos permite analizar datos de texto mediante algoritmos de aprendizaje automático, que suelen requerir entradas numéricas. Al representar los datos de texto como características numéricas, podemos entrenar modelos de aprendizaje automático para clasificar texto o analizar sentimientos. 

El ejemplo de la siguiente sección utilizará el modelo NLTK Vader para el análisis de sentimientos en el conjunto de datos de clientes de Amazon. En este ejemplo concreto, no necesitamos realizar este paso porque la API Vader de NLTK acepta texto como entrada en lugar de vectores numéricos, pero si estuvieras construyendo un modelo de aprendizaje automático supervisado para predecir el sentimiento (suponiendo que tienes datos etiquetados), tendrías que transformar el texto procesado en un modelo de bolsa de palabras antes de entrenar el modelo de aprendizaje automático. 

Ejemplo de bolsa de palabras

Fuente de la imagen

Ejemplo de análisis de sentimiento de extremo a extremo en Python

Para realizar un análisis de sentimientos con NLTK en Python, primero hay que preprocesar los datos de texto mediante técnicas como la tokenización, la eliminación de palabras vacías y la lematización. Una vez preprocesado el texto, lo pasaremos al analizador de sentimiento Vader para que analice el sentimiento del texto (positivo o negativo).

Paso 1 - Importar bibliotecas y cargar el conjunto de datos

En primer lugar, importaremos las bibliotecas necesarias para el análisis de texto y el análisis de sentimientos, como pandas para el tratamiento de datos, nltk para el procesamiento del lenguaje natural y SentimentIntensityAnalyzer para el análisis de sentimientos.

A continuación, descargaremos todo el corpus NLTK (una colección de datos lingüísticos) utilizando nltk.download().

Una vez configurado el entorno, cargaremos un conjunto de datos de reseñas de Amazon utilizando pd.read_csv(). Esto creará un objeto DataFrame en Python que podemos utilizar para analizar los datos. Mostraremos el contenido del DataFrame utilizando df.

# import libraries
import pandas as pd

import nltk

from nltk.sentiment.vader import SentimentIntensityAnalyzer

from nltk.corpus import stopwords

from nltk.tokenize import word_tokenize

from nltk.stem import WordNetLemmatizer


# download nltk corpus (first time only)
import nltk

nltk.download('all')




# Load the amazon review dataset

df = pd.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/amazon.csv')

df

Cargar conjunto de datos

Paso 2 - Tratamiento previo del texto

Vamos a crear una función preprocess_text en la que primero tokenizamos los documentos utilizando la función word_tokenize de NLTK, después eliminamos las palabras escalonadas utilizando el módulo stepwords de NLTK y, por último, lematizamos filtered_tokens utilizando WordNetLemmatizer de NLTK.

# create preprocess_text function
def preprocess_text(text):

    # Tokenize the text

    tokens = word_tokenize(text.lower())




    # Remove stop words

    filtered_tokens = [token for token in tokens if token not in stopwords.words('english')]




    # Lemmatize the tokens

    lemmatizer = WordNetLemmatizer()

    lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]




    # Join the tokens back into a string

    processed_text = ' '.join(lemmatized_tokens)

    return processed_text

# apply the function df

df['reviewText'] = df['reviewText'].apply(preprocess_text)
df

Preprocesamiento de datos

Observe los cambios en la columna "texto de revisión" como resultado de la función preprocess_text que aplicamos en el paso anterior.

Paso 3 - Analizador de sentimiento NLTK

En primer lugar, inicializaremos un objeto Sentiment Intensity Analyzer de la biblioteca nltk.sentiment.vader.

A continuación, definiremos una función llamada get_sentiment que toma una cadena de texto como entrada. La función llama al método polarity_scores del objeto analizador para obtener un diccionario de puntuaciones de sentimiento para el texto, que incluye una puntuación para el sentimiento positivo, negativo y neutro. 

A continuación, la función comprobará si la puntuación positiva es mayor que 0 y devuelve una puntuación de sentimiento de 1 en caso afirmativo y de 0 en caso contrario. Esto significa que cualquier texto con una puntuación positiva se clasificará como de sentimiento positivo, y cualquier texto con una puntuación no positiva se clasificará como de sentimiento negativo.

Por último, aplicaremos la función get_sentiment a la columna reviewText del DataFrame df utilizando el método apply. Esto crea una nueva columna llamada sentimiento en el DataFrame, que almacena la puntuación de sentimiento de cada opinión. A continuación, mostraremos el DataFrame actualizado utilizando df.

# initialize NLTK sentiment analyzer

analyzer = SentimentIntensityAnalyzer()


# create get_sentiment function

def get_sentiment(text):

    scores = analyzer.polarity_scores(text)

    sentiment = 1 if scores['pos'] > 0 else 0

    return sentiment




# apply get_sentiment function

df['sentiment'] = df['reviewText'].apply(get_sentiment)

df

análisis de opiniones

El analizador de sentimientos NLTK devuelve una puntuación entre -1 y +1. Hemos utilizado un umbral de corte de 0 en la función get_sentiment anterior. Cualquier valor superior a 0 se clasifica como 1 (es decir, positivo). Como disponemos de etiquetas reales, podemos evaluar el rendimiento de este método construyendo una matriz de confusión. 

from sklearn.metrics import confusion_matrix

print(confusion_matrix(df['Positive'], df['sentiment']))

Salida:

[[ 1131  3636]

 [  576 14657]]

También podemos consultar el informe de clasificación:

from sklearn.metrics import classification_report

print(classification_report(df['Positive'], df['sentiment']))

Informe de clasificación

Como puede ver, la precisión global de este modelo de análisis de sentimientos basado en reglas es del 79%. Dado que se trata de datos etiquetados, también puede intentar construir un modelo ML para evaluar si un enfoque basado en ML dará como resultado una mayor precisión.

Consulta el cuaderno completo en el espacio de trabajo Datacamp.

Conclusión

NLTK es una biblioteca potente y flexible para realizar análisis de sentimientos y otras tareas de procesamiento del lenguaje natural en Python. Mediante NLTK, podemos preprocesar datos de texto, convertirlos en un modelo de bolsa de palabras y realizar un análisis de sentimientos con el analizador de sentimientos de Vader. 

A través de este tutorial, hemos explorado los fundamentos del análisis de sentimiento NLTK, incluyendo el preprocesamiento de datos de texto, la creación de un modelo de bolsa de palabras, y la realización de análisis de sentimiento utilizando NLTK Vader. También hemos analizado las ventajas y limitaciones del análisis de sentimientos NLTK, y hemos ofrecido sugerencias para futuras lecturas y exploraciones.

En general, NLTK es una herramienta potente y muy utilizada para realizar análisis de sentimientos y otras tareas de procesamiento del lenguaje natural en Python. Si dominas las técnicas y herramientas presentadas en este tutorial, podrás obtener información valiosa sobre el sentimiento de los datos de texto y utilizarla para tomar decisiones basadas en datos en una amplia gama de aplicaciones.

Si desea aprender a aplicar la PNL a datos del mundo real, como charlas TED, artículos y críticas de películas, utilizando bibliotecas y marcos de trabajo de Python, como NLTK, scikit-learn, spaCy y SpeechRecognition, consulte los recursos siguientes:

Proporciona una base sólida para procesar y analizar datos de texto utilizando Python. Tanto si es nuevo en la PNL como si desea ampliar sus conocimientos, este curso le proporcionará las herramientas y los conocimientos necesarios para convertir datos no estructurados en información valiosa.

Temas

Cursos de Python

Certificación disponible

Course

Introducción a la Ciencia de Datos en Python

4 hr
455.1K
Sumérgete en la ciencia de datos utilizando Python y aprende a analizar y visualizar tus datos con eficacia. No necesitas experiencia ni conocimientos de programación.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

blog

Todo lo que sabemos sobre GPT-5

Predecir cómo podría ser la próxima evolución de la tecnología de IA de OpenAI y qué avances podría tener el modelo GPT-5.
Josep Ferrer's photo

Josep Ferrer

10 min

blog

Los 16 mejores marcos y bibliotecas de IA: Guía para principiantes

Explore los mejores marcos y bibliotecas de IA y sus fundamentos en esta guía definitiva para profesionales de datos noveles que comienzan su carrera profesional.
Yuliya Melnik's photo

Yuliya Melnik

15 min

blog

¿Qué es la tokenización?

La tokenización divide el texto en partes más pequeñas para facilitar el análisis mecánico y ayudar a las máquinas a comprender el lenguaje humano.
Abid Ali Awan's photo

Abid Ali Awan

9 min

tutorial

Primeros pasos con Claude 3 y la API de Claude 3

Conozca los modelos Claude 3, las pruebas de rendimiento detalladas y cómo acceder a ellas. Además, descubra la nueva API Python de Claude 3 para generar texto, acceder a funciones de visión y streaming.
Abid Ali Awan's photo

Abid Ali Awan

tutorial

Guía introductoria para perfeccionar los LLM

La puesta a punto de grandes modelos lingüísticos (LLM) ha revolucionado el Procesamiento del Lenguaje Natural (PLN), ofreciendo capacidades sin precedentes en tareas como la traducción de idiomas, el análisis de sentimientos y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como GPT-2, mejorando su rendimiento en dominios específicos mediante el proceso de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

12 min

tutorial

Cómo recortar una cadena en Python: Tres métodos diferentes

Aprenda los fundamentos del recorte de caracteres iniciales y finales de una cadena en Python.
Adel Nehme's photo

Adel Nehme

5 min

See MoreSee More