def get_sentiment_value(tweets): data = twitterSentiment.StructureStatusesData(tweets) structured_data = data.getTweet() sentiment = twitterSentiment.SentimentScore(structured_data) sentiment_value = sentiment.getSentimentClassification() return round(sentiment_value, 2)
def seed_tweets(self, request): twitter_client_key = config('TWITTER_CLIENT_KEY') twitter_client_secret = config('TWITTER_CLIENT_SECRET') os.environ.setdefault("TWITTER_CLIENT_KEY", twitter_client_key) os.environ.setdefault("TWITTER_CLIENT_SECRET", twitter_client_secret) api = twitterSentiment.API() today = date.today() for i in range(7): current_day = today - timedelta(days=i) tweet = api.querySearch(q='covid', geocode=None, lang='en', result_type='recent', count=100, until=current_day.strftime('%Y-%m-%d'), since_id=None, max_id=None, include_entities=False, tweet_mode="extended", return_json=True) data = twitterSentiment.StructureStatusesData(tweet) for item in tweet['statuses']: Tweet.objects.create(id=item['id'], text=item['full_text'], created_at=item['created_at']) structured_tweets = data.getTweet() sentiment = twitterSentiment.SentimentScore(structured_tweets) score = sentiment.getSentimentClassification() tweet_score_id = int(f'{current_day.day}{current_day.month}{current_day.year}') TweetScore.objects.create(id=tweet_score_id, tweet_score=score, date=current_day) return Response(1)
def search(self, request): nltk.data.path.append("./venv/nltk") twitter_client_key = config('TWITTER_CLIENT_KEY') twitter_client_secret = config('TWITTER_CLIENT_SECRET') os.environ.setdefault("TWITTER_CLIENT_KEY", 'X8CEgZEOMZkHHrHKYy3b5MFZo') os.environ.setdefault("TWITTER_CLIENT_SECRET", '5FJHXLfWPB18eMFB89ceCjRLX8sCxey9Lt0fRYzf6fBrw0lL2Z') api = twitterSentiment.API() today = date.today() current_day = today tweet = api.querySearch(q='covid ' + request.query_params['keyword'], geocode=None, lang='en', result_type='recent', count=1000, until=current_day.strftime('%Y-%m-%d'), since_id=None, max_id=None, include_entities=False, tweet_mode="extended", return_json=True) data = twitterSentiment.StructureStatusesData(tweet) structured_tweets = data.getTweet() tweets = [] for item in structured_tweets[:100]: tweets.append({'text': item['full_text']}) sentiment = twitterSentiment.SentimentScore(structured_tweets) score = sentiment.getSentimentClassification() texts = '' for tweet in tweets: texts += tweet['text'] + ' ' tokenizer = RegexpTokenizer(r'\w+') allWords = tokenizer.tokenize(texts) allWordDist = nltk.FreqDist(w.lower() for w in allWords) stopwords = nltk.corpus.stopwords.words('english') allWordExceptStopDist = nltk.FreqDist(w.lower() for w in allWords if w not in stopwords) filtered_words = {key: value for key, value in allWordExceptStopDist.items() if value >= 5} excluded_words = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "15", "23", "19", "a", "the", "it", "me", "my", "we", "and", "in", "us", "33", "https", "http", "co", "i", "rt", "get"] for item in excluded_words: filtered_words.pop(item, None) sa = sorted(filtered_words.items(), key=lambda x: x[1], reverse=True) data_sorted = {k: v for k, v in sorted(filtered_words.items(), key=lambda x: x[1], reverse=True)} return Response({'tweets': tweets, 'tweet_score': score, 'keys': list(data_sorted.keys())[:20], 'values': list(data_sorted.values())[:20]})
def testGetUser(self): structured_data = twitterSentiment.StructureStatusesData(self.search) user = structured_data.getUser() self.assertEqual(12, len(user[0]))
def testGetTweets(self): structured_data = twitterSentiment.StructureStatusesData(self.search) tweet = structured_data.getTweet() self.assertGreaterEqual(11, len(tweet[0]))
def testGetData(self): structured_data = twitterSentiment.StructureStatusesData(self.search) data = structured_data.getData() self.assertEqual(3, len(data))