Проблема анализа настроений в Twitter Python - PullRequest
0 голосов
/ 22 февраля 2019
import tweepy
import csv
import json
import datetime
import pandas as pd
import re
from tweepy import OAuthHandler
from textblob import TextBlob


class TwitterClient(object):
 def __init__(self):
    consumer_key = 'blah'
    consumer_secret = 'blah'
    access_token = 'blah'
    access_token_secret = 'blah'

    # attempt authentication
    try:
        # create OAuthHandler object
        self.auth = OAuthHandler(consumer_key, consumer_secret)
        # set access token and secret
        self.auth.set_access_token(access_token, access_token_secret)
        # create tweepy API object to fetch tweets
        self.api = tweepy.API(self.auth)
    except:
        print("Error: Authentication Failed")

        def clean_tweet(self, tweet):
            '''
            Utility function to clean tweet text by removing links, special characters
            using simple regex statements.
            '''
            return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", tweet).split())

        def get_tweet_sentiment(self, tweet):
                '''
                Utility function to classify sentiment of passed tweet
                using textblob's sentiment method
                '''
                # create TextBlob object of passed tweet text
                analysis = TextBlob(self.clean_tweet(tweet))
                # set sentiment
                if analysis.sentiment.polarity > 0:
                    return 'positive'
                elif analysis.sentiment.polarity == 0:
                    return 'neutral'
                else:
                    return 'negative'

        def get_tweets(self, query, count=10):
                '''
                Main function to fetch tweets and parse them.
                '''
                # empty list to store parsed tweets
                tweets = []

                try:
                    # call twitter api to fetch tweets
                    fetched_tweets = self.api.search(q=query, count=count)

                    # parsing tweets one by one
                    for tweet in fetched_tweets:
                        # empty dictionary to store required params of a tweet
                        parsed_tweet = {}

                        # saving text of tweet
                        parsed_tweet['text'] = tweet.text
                        # saving sentiment of tweet
                        parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text)

                        # appending parsed tweet to tweets list
                        if tweet.retweet_count > 0:
                            # if tweet has retweets, ensure that it is appended only once
                            if parsed_tweet not in tweets:
                                tweets.append(parsed_tweet)
                        else:
                            tweets.append(parsed_tweet)

                    # return parsed tweets
                    return tweets

                except tweepy.TweepError as e:
                    # print error (if any)
                    print("Error : " + str(e))

        def main():
            # creating object of TwitterClient Class
            api = TwitterClient()
            # calling function to get tweets

            print("fetching started........")
            tweets = api.get_tweets(query='Imran Khan', count=200)
            csvFile = open('Twitter' + (datetime.datetime.today().strftime('%d%m%Y%H%M')) + '.json', 'a')
            # picking positive tweets from tweets
            ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive']
            # percentage of positive tweets
            csvFile.write(json.dumps("Positive tweets percentage: {} %".format(100 * len(ptweets) / len(tweets))))
            # picking negative tweets from tweets
            ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative']
            csvFile.write(json.dumps("Negative tweets percentage: {} %".format(100 * len(ntweets) / len(tweets))))
            csvFile.write(json.dumps("Neutral tweets percentage: {} % \ "
                                     "".format(100 * (len(tweets) - len(ntweets) - len(ptweets)) / len(tweets))))
            csvFile.write(json.dumps(tweets._json))
            csvFile.write("\n")
            csvFile.close()
    print("fetching end........")

    if __name__ == "__main__":
        # calling main function
        main()

Процесс завершен с кодом выхода 0, эта программа работает без ошибок, но не выдает никаких результатов и дает 0 ответа.На самом деле я хочу сохранить все твиты в файле json для дальнейшего анализа, и я хочу, чтобы анализ настроений также сохранялся в файле json.Программа всегда завершается с кодом выхода 0, но ответов нет вообще. Я перепробовал все, что знаю, но не повезло.Пожалуйста, помогите !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...