Sentiment for KLM

PHOTO EMBED

Fri May 31 2024 16:21:44 GMT+0000 (Coordinated Universal Time)

Saved by @madgakantara

from pymongo import MongoClient, errors
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

# MongoDB connection settings
mongo_uri = "mongodb://localhost:27017/"
database_name = "twitter_database"
source_collection_name = "tweets"

def get_text_from_doc(doc):
    """
    Extracts the text from the document.
    Returns the text if available, otherwise returns None.
    """
    text = doc.get("json_data", {}).get("text")
    if text:
        return text
    extended_text = doc.get("json_data", {}).get("extended_tweet", {}).get("full_text")
    return extended_text

def analyze_sentiment(text):
    """
    Analyzes the sentiment of the given text using VADER.
    Returns the compound sentiment score.
    """
    analyzer = SentimentIntensityAnalyzer()
    sentiment = analyzer.polarity_scores(text)
    compound_score = sentiment['compound']
    if compound_score > 0.05:
        return 'positive'
    elif compound_score < -0.05:
        return 'negative'
    else:
        return 'neutral'

try:
    client = MongoClient(mongo_uri, serverSelectionTimeoutMS=5000)
    db = client[database_name]
    source_collection = db[source_collection_name]

    # Define query to filter tweets related to KLM (tweets made by KLM or mentioning KLM)
    query = {
        "$or": [
            {"json_data.user.id": 56377143},  # Tweets made by KLM
            {"json_data.entities.user_mentions.id": 56377143}  # Tweets mentioning KLM
        ]
    }

    # Count variables for sentiment analysis
    positive_count = 0
    neutral_count = 0
    negative_count = 0

    cursor = source_collection.find(query)

    for doc in cursor:
        text = get_text_from_doc(doc)
        if text:
            sentiment = analyze_sentiment(text)
            if sentiment == 'positive':
                positive_count += 1
            elif sentiment == 'neutral':
                neutral_count += 1
            elif sentiment == 'negative':
                negative_count += 1

    print("Number of tweets related to KLM:")
    print("Positive:", positive_count)
    print("Neutral:", neutral_count)
    print("Negative:", negative_count)

except errors.ServerSelectionTimeoutError as err:
    print("Failed to connect to MongoDB server:", err)
except errors.PyMongoError as err:
    print("An error occurred while working with MongoDB:", err)
finally:
    client.close()
content_copyCOPY