Я пытался построить проект анализа настроений, используя Python
и IBM Watson Tone Analyzer
.Сначала я использовал TextBlob
, но теперь я должен использовать IBM Watson в том же коде.Этот код работал довольно хорошо, когда я выполнял его с помощью TextBlob, но с IBM Watson я столкнулся с некоторой проблемой, так как я новичок в машинном обучении, я просто не могу понять, что это такое.
#Import library
import tweepy
import pandas as pd
import numpy as np
from watson_developer_cloud import ToneAnalyzerV3
from watson_developer_cloud.tone_analyzer_v3 import ToneInput
#for plotting and virtualization
from IPython.display import display
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Twitter app access keys for @user
#Consume
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxx'
#Access
ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxx'
# We import our access keys:
from credentials import * # This will allow us to use the keys as variables
# API's setup:
def twitter_setup():
"""
Utility function to setup the Twitter's API
with our access keys provided.
"""
# Authentication and access using keys:
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
# Return API with authentication:
api = tweepy.API(auth)
return api
#Create an extractor object:
extractor = twitter_setup()
#We create tweet list as follows:
searchword = input("Enter the name to search:")
tweets = extractor.user_timeline(screen_name = searchword, count=200)
print("Number of tweets extracted : {}\n".format(len(tweets)))
#most recent tweet
print("3 most recent tweets:\n")
for tweet in tweets[:3]:
print(tweet.text)
print()
#Create panda dataframe
data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])
#Add relevant data:
data['ID'] = np.array([tweet.id for tweet in tweets])
data['Date'] = np.array([tweet.created_at for tweet in tweets])
data['Likes'] = np.array([tweet.favorite_count for tweet in tweets])
data['Source'] = np.array([tweet.source for tweet in tweets])
#Sentiment asnalysis using watson
service = ToneAnalyzerV3(
url="https://gateway.watsonplatform.net/tone-analyzer/api",
username= "9adf63ab-8b6f-457b-a56a-33c25e0997c6",
password= "qbms20FWWUNB")
#Sentiment Analysis on tweets:
#from textblob import TextBlob
#import re
#Clean tweets:
def clean_tweet(tweet):
return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", tweet).split())
tone_chat = service.tone_chat(clean_tweet(tweet))
def analize_sentiment(tweet):
tone_chat = service.tone_chat(clean_tweet(tweet))
# analysis = TextBlob(clean_tweet(tweet))
# if analysis.sentiment.polarity > 0:
# return 1
# elif analysis.sentiment.polarity == 0:
# return 0
# else:
# return -1
#Create a new column and display the new result:
data['SA'] = np.array(analize_sentiment(tweet) for tweet in data['Tweets']])
display(data.head(10))
#Construct classified list:
positive_tweets = [tweet for index, tweet in enumerate(data['Tweets']) if data['SA'][index] > 0]
neutral_tweets = [tweet for index, tweet in enumerate(data['Tweets']) if data['SA'][index] == 0]
negative_tweets = [tweet for index, tweet in enumerate(data['Tweets']) if data['SA'][index] < 0]
#We print percentages:
print("Percentage of positive tweets: {}%".format(len(positive_tweets)*100/len(data['Tweets'])))
print("Percentage of negative tweets: {}%".format(len(negative_tweets)*100/len(data['Tweets'])))
print("Percentage of neutral tweets: {}%".format(len(neutral_tweets)*100/len(data['Tweets'])))
# Pie chart:
ptweets = len(positive_tweets)*100/len(data['Tweets'])
neutweets = len(neutral_tweets)*100/len(data['Tweets'])
negtweets = len(negative_tweets)*100/len(data['Tweets'])
labels = 'negative','neutral','positive'
sizes = [negtweets,neutweets,ptweets]
cols = ['c','m','r']
plt.pie(sizes,labels=labels,colors=cols,startangle=90,shadow=True,autopct='%1.1f%%')
plt.legend()
plt.title("Overall Sentiment of the people in analzing 200 tweets")
plt.show()
Iпрокомментировали старые коды, которые были из TextBlob, так что игнорируйте его.Выполняя его с помощью spyder, я получил следующую ошибку:
File "<ipython-input-12-4e56d84102b8>", line 93
data['SA'] = np.array(analize_sentiment(tweet) for tweet in data['Tweets']])
Пожалуйста, помогите мне с этой ошибкой, и если есть какая-либо ошибка, пожалуйста, укажите подробно, потому что я, возможно, не пойму.
Вы можетеЗапустите этот код непосредственно в Sypder, чтобы воспроизвести ошибку и найти решение, пожалуйста, помогите мне.
Спасибо