Python para PNL: Introducci贸n a la biblioteca TextBlob

    Introducci贸n

    Este es el s茅ptimo art铆culo de mi serie de art铆culos sobre Python para PNL. En mi art铆culo anterior, expliqu茅 c贸mo realizar el modelado de temas utilizando la asignaci贸n de Dirichlet latente y la factorizaci贸n de matriz no negativa . Usamos la biblioteca Scikit-Learn para realizar el modelado de temas.

    En este art铆culo, exploraremos TextBlob , que es otra biblioteca de PNL extremadamente poderosa para Python. TextBlob se basa en NLTK y proporciona una interfaz f谩cil de usar para la biblioteca NLTK. Veremos c贸mo se puede usar TextBlob para realizar una variedad de tareas de PNL que van desde el etiquetado de las partes del discurso hasta el an谩lisis de sentimientos y la traducci贸n de idiomas a la clasificaci贸n de texto.

    Las instrucciones detalladas de descarga de la biblioteca se pueden encontrar en el enlace oficial . Le sugiero que instale la biblioteca TextBlob, as铆 como los corpus de muestra.

    Aqu铆 est谩 la esencia de las instrucciones vinculadas anteriormente, pero aseg煤rese de consultar la documentaci贸n oficial para obtener m谩s instrucciones sobre la instalaci贸n si la necesita:

    $ pip install -U textblob
    

    Y para instalar los corpora:

    $ python -m textblob.download_corpora
    

    Veamos ahora las diferentes funcionalidades de la biblioteca TextBlob.

    Tokenizaci贸n

    La tokenizaci贸n se refiere a dividir un p谩rrafo grande en oraciones o palabras. Normalmente, un token se refiere a una palabra en un documento de texto. La tokenizaci贸n es bastante sencilla con TextBlob. Todo lo que tiene que hacer es importar el TextBlobobjeto de la textblobbiblioteca, pasarle el documento que desea convertir en token y luego usar los atributos sentencesy wordspara obtener las oraciones y atributos tokenizados. Veamos esto en acci贸n:

    El primer paso es importar el TextBlobobjeto:

    from textblob import TextBlob
    

    A continuaci贸n, debe definir una cadena que contenga el texto del documento. Crearemos una cadena que contenga el primer p谩rrafo del art铆culo de Wikipedia sobre inteligencia artificial.

    document = ("In computer science, artificial intelligence (AI), 
                sometimes called machine intelligence, is intelligence 
                demonstrated by machines, in contrast to the natural intelligence 
                displayed by humans and animals. Computer science defines AI 
                research as the study of "intelligent agents": any device that 
                perceives its environment and takes actions that maximize its
                chance of successfully achieving its goals.[1] Colloquially,
                the term "artificial intelligence" is used to describe machines
                that mimic "cognitive" functions that humans associate with other
                human minds, such as "learning" and "problem solving".[2]")
    

    El siguiente paso es pasar este documento como par谩metro a la TextBlobclase. El objeto devuelto se puede usar para convertir el documento en palabras y oraciones.

    text_blob_object = TextBlob(document)
    

    Ahora, para obtener las oraciones tokenizadas, podemos usar el sentencesatributo:

    document_sentence = text_blob_object.sentences
    
    print(document_sentence)
    print(len(document_sentence))
    

    En la salida, ver谩 las oraciones tokenizadas junto con el n煤mero de oraciones.

    [Sentence("In computer science, artificial intelligence (AI),             sometimes called machine intelligence, is intelligence             demonstrated by machines, in contrast to the natural intelligence             displayed by humans and animals."), Sentence("Computer science defines AI             research as the study of "intelligent agents": any device that             perceives its environment and takes actions that maximize its            chance of successfully achieving its goals."), Sentence("[1] Colloquially,            the term "artificial intelligence" is used to describe machines            that mimic "cognitive" functions that humans associate with other            human minds, such as "learning" and "problem solving"."), Sentence("[2]")]
    4
    

    De manera similar, el wordsatributo devuelve las palabras tokenizadas en el documento.

    document_words = text_blob_object.words
    
    print(document_words)
    print(len(document_words))
    

    La salida se ve as铆:

    ['In', 'computer', 'science', 'artificial', 'intelligence', 'AI', 'sometimes', 'called', 'machine', 'intelligence', 'is', 'intelligence', 'demonstrated', 'by', 'machines', 'in', 'contrast', 'to', 'the', 'natural', 'intelligence', 'displayed', 'by', 'humans', 'and', 'animals', 'Computer', 'science', 'defines', 'AI', 'research', 'as', 'the', 'study', 'of', 'intelligent', 'agents', 'any', 'device', 'that', 'perceives', 'its', 'environment', 'and', 'takes', 'actions', 'that', 'maximize', 'its', 'chance', 'of', 'successfully', 'achieving', 'its', 'goals', '1', 'Colloquially', 'the', 'term', 'artificial', 'intelligence', 'is', 'used', 'to', 'describe', 'machines', 'that', 'mimic', 'cognitive', 'functions', 'that', 'humans', 'associate', 'with', 'other', 'human', 'minds', 'such', 'as', 'learning', 'and', 'problem', 'solving', '2']
    84
    

    Lematizaci贸n

    La lematizaci贸n se refiere a reducir la palabra a su forma ra铆z como se encuentra en un diccionario.

    Para realizar la lematizaci贸n a trav茅s de TextBlob, debe usar el Wordobjeto de la textblobbiblioteca, pasarle la palabra que desea lematizar y luego llamar al lemmatizem茅todo.

    from textblob import Word
    
    word1 = Word("apples")
    print("apples:", word1.lemmatize())
    
    word2 = Word("media")
    print("media:", word2.lemmatize())
    
    word3 = Word("greater")
    print("greater:", word3.lemmatize("a"))
    

    En la secuencia de comandos anterior, realizamos lematizaci贸n de las palabras “manzanas”, “medios” y “mayores”. En la salida, ver谩 las palabras “manzana” (que es singular para la manzana), “medio” (que es singular para el medio) y “grande” (que es el grado positivo de la palabra mayor). Observe que para la palabra mayor, pasamos “a” como par谩metro al lemmatizem茅todo. Esto le dice espec铆ficamente al m茅todo que la palabra debe tratarse como un adjetivo. De forma predeterminada, el lemmatize()m茅todo trata las palabras como sustantivos . La lista completa de las partes de los componentes del discurso es la siguiente:

    ADJ, ADJ_SAT, ADV, NOUN, VERB = 'a', 's', 'r', 'n', 'v'
    

    Etiquetado de partes del discurso (POS)

    Al igual que las bibliotecas spaCy y NLTK, la biblioteca TextBlob tambi茅n contiene funcionalidades para el etiquetado POS.

    Para encontrar etiquetas POS para las palabras en un documento, todo lo que tiene que hacer es usar el tagsatributo como se muestra a continuaci贸n:

    for word, pos in text_blob_object.tags:
        print(word + " => " + pos)
    

    En el gui贸n de arriba, imprima las etiquetas de todas las palabras del primer p谩rrafo del art铆culo de Wikipedia sobre Inteligencia Artificial. La salida del script anterior se ve as铆:

    “ `
    En => IN
    computadora => NN
    ciencia => NN
    artificial =>
    inteligencia JJ => NN
    AI => NNP a
    veces => RB
    llamado =>
    m谩quina VBD =>
    inteligencia NN => NN
    es =>
    inteligencia VBZ => NN
    demostrado => VBN
    por => IN
    m谩quinas => NNS
    en => EN
    contraste => NN
    a => TO
    el => DT
    natural =>
    inteligencia JJ => NN
    mostrado => VBN
    por => IN
    humanos => NNS
    y => CC
    animales =>
    Computadora NNS =>
    Ciencia NNP => NN
    define => NNS
    AI =>
    Investigaci贸n NNP => NN
    as => IN
    el =>
    estudio DT => NN
    de => IN
    inteligente =>
    agentes JJ => NNS
    cualquiera =>
    dispositivo DT => NN
    que => WDT
    percibe => VBZ
    su => PRP $
    entorno => NN
    y => CC
    toma =>
    Acciones de VBZ => NNS
    que => IN
    maximizar => VB
    its => PRP $
    chance => NN
    de => IN
    exitosamente => RB
    logrando => VBG
    its => PRP $
    metas => NNS
    [=> RB
    1 => CD
    ] => NNP
    Coloquialmente => NNP
    el =>
    t茅rmino DT => NN
    artificial =>
    inteligencia JJ => NN
    es =>VBZ
    utilizado => VBN
    a => TO
    describir =>
    m谩quinas VB => NNS
    que => IN
    m铆mica => JJ
    cognitivo =>
    funciones JJ => NNS
    que => WDT
    humanos => NNS
    asociado => VBP
    con => EN
    otro => JJ
    humano => JJ
    mentes = > NNS
    tal => JJ
    como => IN
    aprendizaje => VBG
    y =>
    Problema CC => NN
    resolviendo => NN
    [=> RB
    2 => CD
    ] => NNS

    Las etiquetas POS se han impreso en forma abreviada. Para ver la forma completa de cada abreviatura, consulte este enlace .

    Convertir texto en singular y plural

    TextBlob tambi茅n le permite convertir texto en forma plural o singular usando los m茅todos pluralizey singularize, respectivamente. Mira el siguiente ejemplo:

    text = ("Football is a good game. It has many health benefit")
    text_blob_object = TextBlob(text)
    print(text_blob_object.words.pluralize())
    

    En la salida, ver谩 el plural de todas las palabras:

    ['Footballs', 'iss', 'some', 'goods', 'games', 'Its', 'hass', 'manies', 'healths', 'benefits']
    

    De manera similar, para singularizar palabras, puede usar el singularizem茅todo de la siguiente manera:

    text = ("Footballs is a goods games. Its has many healths benefits")
    
    text_blob_object = TextBlob(text)
    print(text_blob_object.words.singularize())
    

    La salida del script anterior se ve as铆:

    ['Football', 'is', 'a', 'good', 'game', 'It', 'ha', 'many', 'health', 'benefit']
    

    Extracci贸n de frases sustantivas

    La extracci贸n de frases sustantivas, como su nombre indica, se refiere a la extracci贸n de frases que contienen sustantivos. Busquemos todas las frases nominales en el primer p谩rrafo del art铆culo de Wikipedia sobre inteligencia artificial que usamos anteriormente.

    Para encontrar frases nominales, simplemente tiene que usar los noun_phraseatributos del TextBlobobjeto. Mira el siguiente ejemplo:

    text_blob_object = TextBlob(document)
    for noun_phrase in text_blob_object.noun_phrases:
        print(noun_phrase)
    

    La salida se ve as铆:

    computer science
    artificial intelligence
    ai
    machine intelligence
    natural intelligence
    computer
    science defines
    ai
    intelligent agents
    colloquially
    artificial intelligence
    describe machines
    human minds
    

    Puede ver todas las frases nominales en nuestro documento.

    Obtener palabras y recuentos de frases

    En una secci贸n anterior, usamos el lenm茅todo incorporado de Python para contar el n煤mero de oraciones, palabras y frases nominales devueltas por el TextBlobobjeto. Podemos usar los m茅todos integrados de TextBlob para el mismo prop贸sito.

    Para encontrar la frecuencia de aparici贸n de una palabra en particular, tenemos que pasar el nombre de la palabra como 铆ndice a la word_countslista del TextBlobobjeto.

    En el siguiente ejemplo, contaremos el n煤mero de instancias de la palabra “inteligencia” en el primer p谩rrafo del art铆culo de Wikipedia sobre Inteligencia Artificial.

    text_blob_object = TextBlob(document)
    text_blob_object.word_counts['intelligence']
    

    Otra forma es simplemente llamar al countm茅todo en el wordsatributo y pasar el nombre de la palabra cuya frecuencia de ocurrencia se encuentra como se muestra a continuaci贸n:

    text_blob_object.words.count('intelligence')
    

    Es importante mencionar que por defecto la b煤squeda no distingue entre may煤sculas y min煤sculas. Si desea que su b煤squeda distinga entre may煤sculas y min煤sculas, debe pasar Truecomo el valor del case_sensitivepar谩metro, como se muestra a continuaci贸n:

    text_blob_object.words.count('intelligence', case_sensitive=True)
    

    Al igual que el recuento de palabras, las frases nominales tambi茅n se pueden contar de la misma forma. El siguiente ejemplo encuentra la frase “inteligencia artificial” en el p谩rrafo.

    text_blob_object = TextBlob(document)
    text_blob_object.noun_phrases.count('artificial intelligence')
    

    En la salida, ver谩 2.

    Conversi贸n a may煤sculas y min煤sculas

    Los objetos TextBlob son muy similares a las cadenas. Puede convertirlos a may煤sculas o min煤sculas, cambiar sus valores y concatenarlos tambi茅n. En el siguiente script, convertimos el texto del objeto TextBlob a may煤sculas:

    text = "I love to watch football, but I have never played it"
    text_blob_object = TextBlob(text)
    
    print(text_blob_object.upper())
    

    En la salida, tendr谩 la cadena en may煤sculas:

    I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT
    

    De manera similar, para convertir el texto a min煤sculas, podemos usar el lower()m茅todo que se muestra a continuaci贸n:

    text = "I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT"
    text_blob_object = TextBlob(text)
    
    print(text_blob_object.lower())
    

    Encontrar N-gramos

    N-gramos se refiere a n combinaciones de palabras en una oraci贸n. Por ejemplo, para una oraci贸n “Me encanta ver f煤tbol”, unos 2 gramos ser铆an (me encanta), (me encanta mirar) y (ver f煤tbol). Los N-Grams pueden desempe帽ar un papel crucial en la clasificaci贸n de textos.

    En TextBlob, los N-gramos se pueden encontrar pasando el n煤mero de N-gramos al ngramsm茅todo del TextBlobobjeto. Mira el siguiente ejemplo:

    text = "I love to watch football, but I have never played it"
    text_blob_object = TextBlob(text)
    for ngram in text_blob_object.ngrams(2):
        print(ngram)
    

    La salida del script se ve as铆:

    ['I', 'love']
    ['love', 'to']
    ['to', 'watch']
    ['watch', 'football']
    ['football', 'but']
    ['but', 'I']
    ['I', 'have']
    ['have', 'never']
    ['never', 'played']
    ['played', 'it']
    

    Esto es especialmente 煤til cuando se entrena modelos de lenguaje o se hace cualquier tipo de predicci贸n de texto.

    Correcciones ortogr谩ficas

    La correcci贸n ortogr谩fica es una de las funcionalidades 煤nicas de la biblioteca TextBlob. Con el correctm茅todo del TextBlobobjeto, puede corregir todos los errores ortogr谩ficos en su texto. Mira el siguiente ejemplo:

    text = "I love to watchf footbal, but I have neter played it"
    text_blob_object = TextBlob(text)
    
    print(text_blob_object.correct())
    

    En el gui贸n anterior cometimos tres errores ortogr谩ficos: “watchf” en lugar de “watch”, “footbal” en lugar de “football”, “neter” en lugar de “never”. En el resultado, ver谩 que TextBlob ha corregido estos errores, como se muestra a continuaci贸n:

    I love to watch football, but I have never played it
    

    Traducci贸n de idiomas

    Una de las capacidades m谩s poderosas de la biblioteca TextBlob es traducir de un idioma a otro. En el backend, el traductor de idiomas TextBlob utiliza la API de Google Translate

    Para traducir de un idioma a otro, simplemente tiene que pasar el texto al TextBlobobjeto y luego llamar al translatem茅todo en el objeto. El c贸digo de idioma para el idioma al que desea que se traduzca su texto se pasa como par谩metro al m茅todo. Echemos un vistazo a un ejemplo:

    text_blob_object_french = TextBlob(u'Salut comment allez-vous?')
    print(text_blob_object_french.translate(to='en'))
    

    En el gui贸n anterior, pasamos una oraci贸n en franc茅s al TextBlobobjeto. A continuaci贸n, llamamos al translatem茅todo en el objeto y pasamos el c贸digo de idioma enal topar谩metro. El c贸digo de idioma encorresponde al idioma ingl茅s. En el resultado, ver谩 la traducci贸n de la oraci贸n en franc茅s como se muestra a continuaci贸n:

    Hi, how are you?
    

    Tomemos otro ejemplo donde traduciremos del 谩rabe al ingl茅s:

    text_blob_object_arabic = TextBlob(u'賲乇丨亘丕 賰賷賮 丨丕賱賰責')
    print(text_blob_object_arabic.translate(to='en'))
    

    Salida:

    Hi, how are you?
    

    Finalmente, utilizando el detect_languagem茅todo, tambi茅n puede detectar el idioma de la oraci贸n. Mira el siguiente gui贸n:

    text_blob_object = TextBlob(u'Hola como estas?')
    print(text_blob_object.detect_language())
    

    En la salida, ver谩 es, que representa el idioma espa帽ol.

    El c贸digo de idioma para todos los idiomas se puede encontrar en este enlace .

    Clasificaci贸n de texto

    TextBlob tambi茅n proporciona capacidades b谩sicas de clasificaci贸n de texto. Sin embargo, no recomendar铆a TextBlob para la clasificaci贸n de texto debido a sus capacidades limitadas, sin embargo, si tiene datos realmente limitados y desea desarrollar r谩pidamente un modelo de clasificaci贸n de texto muy b谩sico, entonces puede usar TextBlob. Para modelos avanzados, recomendar铆a bibliotecas de Machine Learning como Scikit-Learn o Tensorflow.

    Veamos c贸mo podemos realizar la clasificaci贸n de texto con TextBlob. Lo primero que necesitamos es un conjunto de datos de entrenamiento y datos de prueba. El modelo de clasificaci贸n se entrenar谩 en el conjunto de datos de entrenamiento y se evaluar谩 en el conjunto de datos de prueba.

    Supongamos que tenemos los siguientes datos de prueba y entrenamiento:

    train_data = [
        ('This is an excellent movie', 'pos'),
        ('The move was fantastic I like it', 'pos'),
        ('You should watch it, it is brilliant', 'pos'),
        ('Exceptionally good', 'pos'),
        ("Wonderfully directed and executed. I like it", 'pos'),
        ('It was very boring', 'neg'),
        ('I did not like the movie', 'neg'),
        ("The movie was horrible", 'neg'),
        ('I will not recommend', 'neg'),
        ('The acting is pathetic', 'neg')
    ]
    test_data = [
        ('Its a fantastic series', 'pos'),
        ('Never watched such a brillent movie', 'pos'),
        ("horrible acting", 'neg'),
        ("It is a Wonderful movie", 'pos'),
        ('waste of money', 'neg'),
        ("pathetic picture", 'neg')
    ]
    

    El conjunto de datos contiene algunas rese帽as ficticias sobre pel铆culas. Puede ver que nuestros conjuntos de datos de entrenamiento y prueba consisten en listas de tuplas donde el primer elemento de la tupla es el texto o una oraci贸n, mientras que el segundo miembro de la tupla es la revisi贸n o sentimiento correspondiente del texto.

    Entrenaremos nuestro conjunto de datos en train_datay lo evaluaremos en test_data. Para hacerlo, usaremos la NaiveBayesClassifierclase de la textblob.classifiersbiblioteca. El siguiente script importa la biblioteca:

    from textblob.classifiers import NaiveBayesClassifier
    

    Para entrenar el modelo, simplemente tenemos que pasar los datos de entrenamiento al constructor de la NaiveBayesClassifierclase. La clase devolver谩 un objeto entrenado en el conjunto de datos y capaz de hacer predicciones en el conjunto de prueba.

    classifier = NaiveBayesClassifier(train_data)
    

    Primero hagamos una predicci贸n en una sola oraci贸n. Para hacerlo, necesitamos llamar al classifym茅todo y pasarle la oraci贸n. Mira el siguiente ejemplo:

    print(classifier.classify("It is very boring"))
    

    Parece una rese帽a negativa. Cuando ejecute el script anterior, ver谩 negen la salida.

    Del mismo modo, el siguiente script volver谩 posya que la revisi贸n es positiva.

    print(classifier.classify("It's a fantastic series"))
    

    Tambi茅n puede hacer una predicci贸n pasando nuestro classifieral classifierpar谩metro del TextBlobobjeto. Luego debe llamar al classifym茅todo en el TextBlobobjeto para ver la predicci贸n.

    sentence = TextBlob("It's a fantastic series.", classifier=classifier)
    print(sentence.classify())
    

    Finalmente, para encontrar la precisi贸n de su algoritmo en el conjunto de prueba, llame al accuracym茅todo en su clasificador y p谩selo al test_dataque acabamos de crear. Mira el siguiente gui贸n:

    classifier.accuracy(test_data)
    

    En la salida, ver谩 0.66 que es la precisi贸n del algoritmo.

    Para encontrar las caracter铆sticas m谩s importantes para la clasificaci贸n, show_informative_featuresse puede utilizar el m茅todo. El n煤mero de caracter铆sticas m谩s importantes a ver se pasa como par谩metro.

    classifier.show_informative_features(3)
    

    La salida se ve as铆:

    Most Informative Features
                contains(it) = False             neg : pos    =      2.2 : 1.0
                contains(is) = True              pos : neg    =      1.7 : 1.0
               contains(was) = True              neg : pos    =      1.7 : 1.0
    

    En esta secci贸n, intentamos encontrar el sentimiento de la rese帽a de la pel铆cula utilizando la clasificaci贸n de texto. En realidad, no es necesario realizar una clasificaci贸n de texto para encontrar el sentimiento de una oraci贸n en TextBlob. La biblioteca TextBlob viene con un analizador de sentimientos incorporado que veremos en la siguiente secci贸n.

    An谩lisis de los sentimientos

    En esta secci贸n, analizaremos el sentimiento de las opiniones p煤blicas sobre diferentes alimentos comprados a trav茅s de Amazon. Usaremos el analizador de sentimientos TextBlob para hacerlo.

    El conjunto de datos se puede descargar desde este enlace de Kaggle .

    Como primer paso, necesitamos importar el conjunto de datos. Solo importaremos los primeros 20.000 registros debido a limitaciones de memoria. Puede importar m谩s registros si lo desea. La siguiente secuencia de comandos importa el conjunto de datos:

    import pandas as pd
    import numpy as np
    
    reviews_datasets = pd.read_csv(r'E:DatasetsReviews.csv')
    reviews_datasets = reviews_datasets.head(20000)
    reviews_datasets.dropna()
    

    Para ver c贸mo se ve nuestro conjunto de datos, usaremos el headm茅todo del marco de datos de pandas:

    reviews_datasets.head()
    

    La salida se ve as铆:

    En el resultado, puede ver que la revisi贸n de texto sobre la comida est谩 contenida en la columna Texto. La columna de puntuaci贸n contiene las valoraciones del usuario para el producto en particular, siendo 1 la m谩s baja y 5 la m谩s alta.

    Veamos la distribuci贸n de la calificaci贸n:

    import seaborn as sns
    import matplotlib.pyplot as plt
    %matplotlib inline
    sns.distplot(reviews_datasets['Score'])
    

    Puede ver que la mayor铆a de las calificaciones son muy positivas, es decir, 5. Tracemos el diagrama de barras para las calificaciones para tener una mejor visi贸n de la cantidad de registros para cada calificaci贸n.

    sns.countplot(x='Score', data=reviews_datasets)
    

    El resultado muestra que m谩s de la mitad de las rese帽as tienen calificaciones de 5 estrellas.

    Seleccionemos al azar una revisi贸n y encontremos su polaridad usando TextBlob. Echemos un vistazo a la revisi贸n n煤mero 350.

    reviews_datasets['Text'][350]
    

    Salida:

    'These chocolate covered espresso beans are wonderful!  The chocolate is very dark and rich and the "bean" inside is a very delightful blend of flavors with just enough caffine to really give it a zing.'
    

    Parece que la revisi贸n es positiva. Verifiquemos esto usando la biblioteca TextBlob. Para encontrar el sentimiento, tenemos que usar el sentimentatributo del TextBlogobjeto. El sentimentobjeto devuelve una tupla que contiene la polaridad y subjetividad de la rese帽a.

    El valor de la polaridad puede estar entre -1 y 1 donde las rese帽as con polaridades negativas tienen sentimientos negativos mientras que las rese帽as con polaridades positivas tienen sentimientos positivos.

    El valor de subjetividad puede estar entre 0 y 1. La subjetividad cuantifica la cantidad de opini贸n personal e informaci贸n f谩ctica contenida en el texto. La subjetividad m谩s alta significa que el texto contiene opiniones personales en lugar de informaci贸n f谩ctica.

    Encontremos el sentimiento de la revisi贸n n煤mero 350.

    text_blob_object = TextBlob(reviews_datasets['Text'][350])
    print(text_blob_object.sentiment)
    

    La salida se ve as铆:

    Sentiment(polarity=0.39666666666666667,subjectivity=0.6616666666666667)
    

    El resultado muestra que la revisi贸n es positiva con una alta subjetividad.

    Agreguemos ahora una columna para la polaridad del sentimiento en nuestro conjunto de datos. Ejecute el siguiente script:

    def find_pol(review):
        return TextBlob(review).sentiment.polarity
    
    reviews_datasets['Sentiment_Polarity'] = reviews_datasets['Text'].apply(find_pol)
    reviews_datasets.head()
    

    Ahora veamos la distribuci贸n de polaridad en nuestro conjunto de datos. Ejecute el siguiente script:

    sns.distplot(reviews_datasets['Sentiment_Polarity'])
    

    La salida del script anterior se ve as铆:

    Es evidente a partir de la figura anterior que la mayor铆a de las revisiones son positivas y tienen una polaridad entre 0 y 0,5. Esto es natural ya que la mayor铆a de las revisiones en el conjunto de datos tienen calificaciones de 5 estrellas.

    Tracemos ahora la polaridad promedio para cada calificaci贸n de puntuaci贸n.

    sns.barplot(x='Score', y='Sentiment_Polarity', data=reviews_datasets)
    

    Salida:

    El resultado muestra claramente que las revisiones con puntuaciones altas tienen polaridades positivas altas.

    Veamos ahora algunas de las rese帽as m谩s negativas, es decir, las rese帽as con un valor de polaridad de -1.

    most_negative = reviews_datasets[reviews_datasets.Sentiment_Polarity == -1].Text.head()
    print(most_negative)
    

    La salida se ve as铆:

    545     These chips are nasty.  I thought someone had ...
    1083    All my fault. I thought this would be a carton...
    1832    Pop Chips are basically a horribly over-priced...
    2087    I do not consider Gingerbread, Spicy Eggnog, C...
    2763    This popcorn has alot of hulls I order 4 bags ...
    Name: Text, dtype: object
    

    Imprimamos el valor de la revisi贸n n煤mero 545.

    reviews_datasets['Text'][545]
    

    En la salida, ver谩 la siguiente revisi贸n:

    'These chips are nasty.  I thought someone had spilled a drink in the bag, no the chips were just soaked with grease.  Nasty!!'
    

    El resultado muestra claramente que la revisi贸n es muy negativa.

    Veamos ahora algunas de las cr铆ticas m谩s positivas. Ejecute el siguiente script:

    most_positive = reviews_datasets[reviews_datasets.Sentiment_Polarity == 1].Text.head()
    print(most_positive)
    

    La salida se ve as铆:

    106     not what I was expecting in terms of the compa...
    223     This is an excellent tea.  One of the best I h...
    338     I like a lot of sesame oil and use it in salad...
    796     My mother and father were the recipient of the...
    1031    The Kelloggs Muselix are delicious and the del...
    Name: Text, dtype: object
    

    Veamos la revisi贸n 106 en detalle:

    reviews_datasets['Text'][106]
    

    Salida:

    "not what I was expecting in terms of the company's reputation for excellent home delivery products"
    

    Puede ver que aunque la revisi贸n no fue muy positiva, se le ha asignado una polaridad de 1 debido a la presencia de palabras como excellenty reputation. Es importante saber que el analizador de sentimientos no es 100% a prueba de errores y puede predecir sentimientos incorrectos en algunos casos, como el que acabamos de ver.

    Veamos ahora la revisi贸n n煤mero 223 que tambi茅n se ha marcado como positiva.

    reviews_datasets['Text'][223]
    

    La salida se ve as铆:

    "This is an excellent tea.  One of the best I have ever had.  It is especially great when you prepare it with a samovar."
    

    El resultado muestra claramente que la revisi贸n es muy positiva.

    Conclusi贸n

    La biblioteca TextBlob de Python es una de las bibliotecas de procesamiento de lenguaje natural m谩s famosas y ampliamente utilizadas. Este art铆culo explica en detalle varias funcionalidades de la biblioteca TextBlob, como tokenizaci贸n, derivaci贸n, an谩lisis de sentimientos, clasificaci贸n de texto y traducci贸n de idiomas.

    En el pr贸ximo art铆culo repasar茅 la biblioteca de patrones, que proporciona muchas funciones realmente 煤tiles para determinar atributos sobre oraciones, as铆 como herramientas para recuperar datos de redes sociales, Wikipedia y motores de b煤squeda.

     

    Etiquetas:

    Deja una respuesta

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