Возвращение текстовых настроенийвместо int оценка - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь добавить столбец в мой фрейм данных Twitter с оценкой настроения.

Я попробовал приведенный ниже код, но продолжаю получать вывод, который не является 1, 0 или -1 int. как я ожидаю

label =[ ]

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

def sentiment_value(text):
    analyser = SentimentIntensityAnalyzer()
    result = analyser.polarity_scores(text)
    score = result['compound']
    if score >= 0.05:
        return 1
    elif (score > -0.05) and (score < 0.05):
        return 0
    else:
        return -1

Затем я провёл небольшой тест, чтобы посмотреть, сработало ли это, и казалось, что:

# Input:

sample = tweets_df['tidy_tweet'][10]
print(sample)
print('Sentiment: ')
print(sentiment_value(sample))

# Output: 

that interest take seen cours approv through thi process wonder which one came core team shot down howev origin wonder what possibl could exist cours which there mani
Sentiment: 
1

Затем я попытался применить новую функцию sentiment_value к столбцу, который я хочу набрать

# I have named my clean tweets 'tidy_tweet'
# @handels,special characters, numbers, punctuations, short words have been removed
# Tweets have been tokenizen and stemmed 

for row in tweets_df['tidy_tweet']:
    label.append(sentiment_value)

tweets_df['label'] = label

Когда я звонил в новый столбец, я ожидал получить оценку настроения, например:

tweets_df['label'].head()

0      1
1      0
2      -1
3      0
4      -1

Но на самом деле я получаю:

0    <function sentiment_value at 0x10284b1e0>
1    <function sentiment_value at 0x10284b1e0>
2    <function sentiment_value at 0x10284b1e0>
3    <function sentiment_value at 0x10284b1e0>
4    <function sentiment_value at 0x10284b1e0>

Я очень новичок в этом и ценю любую помощь, которую может предложить каждый!

1 Ответ

0 голосов
/ 07 мая 2019

Это потому, что вы не вызываете функцию. Вы должны делать это:

for row in tweets_df['tidy_tweet']:
    label.append(sentiment_value(row))  # note that row is now passed to sentiment_value

tweets_df['label'] = label

Вы также можете использовать list понимание:

tweets_df['label'] = [sentiment_value(tweet) for tweet in tweets_df['tidy_tweet']

Или даже transform:

tweets_df['label'] = tweets_df['tidy_tweet'].transform(sentiment_value)
...