简体   繁体   中英

Python 3.7 AttributeError: 'list' object has no attribute 'split'

I am trying to do a sentiment analysis from a csv file where each row has a sentence.

Reprex:

print(your_list)
[['Patience and Kindness and I know they truly love and care for animals, my dog also enjoys the events like seeing Santa and the Easter Bunny'], ['They are so sweet to my pets and try to fit them into the schedule when needed'], ['they call and check on our pet a day or 2 after visit make sure we fully understand treatment before we leave'], ['every member of the staff understands how our pets are our family; we never feel rushed and always have or questions answered, and are given reassurance if and when needed; they are compassionate and kind, respectful and very caring'], ['They made it a very peaceful experience when we had to put our pug to sleep '], ['They interact with my dogs and you can see the care they have for them.'], ['they make every effort to accomodate us']    


    from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

        import csv
        with open('Before.csv', "r", errors='ignore') as f:
            reader = csv.reader(f)
        your_list = list(reader)

    print(your_list)

    analyser = SentimentIntensityAnalyzer()

    def print_sentiment_scores(sentence):
        snt = analyser.polarity_scores(sentence)
        print("{:-<40} {}".format(sentence, str(snt)))

    print_sentiment_scores(your_list)

However, I receive the below error:

analyser = SentimentIntensityAnalyzer()

def print_sentiment_scores(sentence):
    snt = analyser.polarity_scores(sentence)
    print("{:-<40} {}".format(sentence, str(snt)))


print_sentiment_scores(your_list)

Traceback (most recent call last):

  File "<ipython-input-24-a7a32425d261>", line 8, in <module>
    print_sentiment_scores(your_list)

  File "<ipython-input-24-a7a32425d261>", line 4, in print_sentiment_scores
    snt = analyser.polarity_scores(sentence)

  File "C:\Users\abc\AppData\Local\Continuum\anaconda3\lib\site-packages\vaderSentiment\vaderSentiment.py", line 248, in polarity_scores
    text_token_list = text.split()

AttributeError: 'list' object has no attribute 'split'

.split(" ") function on your_list is not helping

Vader's 'polarity_scores(sentence)' takes a string parameter, not a list.

Your code should be:

analyser = SentimentIntensityAnalyzer()

def print_sentiment_scores(alist):
    for aSentence in alist: 
      aSnt = analyser.polarity_scores(aSentence[0])
      print(str(aSnt))


print_sentiment_scores(your_list)

So I finally got this to work with the following code and csv:

#!/usr/bin/python3
import csv
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

with open('Before.csv', "r", errors='ignore') as f:
    reader = csv.reader(f)
    your_list = list(reader)

analyser = SentimentIntensityAnalyzer()

def print_sentiment_scores(alist):
    for aSentence in alist: 
      aSnt = analyser.polarity_scores(aSentence[0])
      print(str(aSnt))

print_sentiment_scores(your_list)

Associated .csv's contents:

['Patience and Kindness and I know they truly love and care for 
animals, my dog also enjoys the events like seeing Santa and the Easter 
Bunny'], ['They are so sweet to my pets and try to fit them into the 
schedule when needed'], ['they call and check on our pet a day or 2 after 
visit make sure we fully understand treatment before we leave'], ['every 
member of the staff understands how our pets are our family; we never feel 
rushed and always have or questions answered, and are given reassurance if 
and when needed; they are compassionate and kind, respectful and very 
caring']

Output: 最终输出

If you want the output strings to be formatted, please do some research on string-formatting. Or post another question on SO, if you cannot find an answer.

SentimentIntensityAnalyzer.polarity_scores(text) takes as argument text/str. you pass list of lists. Probably you want to pass the whole content of the file as single text or pass each sentence separately, but not list of lists.

The problem lies in the call to the function 'print_sentiment_scores'. The parameter passed is a list. Based on your requirement, I think you can pass the elements of the list to get the split. Split() works on string type as per the documentation here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM