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

匆匆过客 提交于 2019-12-11 04:08:38

问题


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


回答1:


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.




回答2:


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.




回答3:


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



来源:https://stackoverflow.com/questions/57577132/python-3-7-attributeerror-list-object-has-no-attribute-split

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!