add rudimentary sentiment analysis endpoint to calculate average sentiment of posts
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
from flask import Flask
|
from flask import Flask
|
||||||
from db.database import Database
|
from db.database import Database
|
||||||
from connectors.reddit_connector import RedditConnector
|
from connectors.reddit_connector import RedditConnector
|
||||||
|
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
db = Database(db_name='ethnograph', user='ethnograph_user', password='ethnograph_pass')
|
db = Database(db_name='ethnograph', user='ethnograph_user', password='ethnograph_pass')
|
||||||
@@ -31,5 +32,33 @@ def fetch_subreddit(subreddit, limit = 10):
|
|||||||
|
|
||||||
return {"status": "success", "inserted_posts": len(posts)}
|
return {"status": "success", "inserted_posts": len(posts)}
|
||||||
|
|
||||||
|
@app.route('/sentiment', methods=['GET'])
|
||||||
|
def sentiment_analysis():
|
||||||
|
posts = db.execute_query(
|
||||||
|
"SELECT id, title, content FROM ethnograph.posts;"
|
||||||
|
)
|
||||||
|
|
||||||
|
analyzer = SentimentIntensityAnalyzer()
|
||||||
|
|
||||||
|
total_sentiment = 0.0
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
for post in posts:
|
||||||
|
content = post.get("title")
|
||||||
|
if not content:
|
||||||
|
continue
|
||||||
|
|
||||||
|
score = analyzer.polarity_scores(content)["compound"]
|
||||||
|
total_sentiment += score
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
average_sentiment = total_sentiment / count if count else 0.0
|
||||||
|
|
||||||
|
return {
|
||||||
|
"status": "success",
|
||||||
|
"average_sentiment": average_sentiment,
|
||||||
|
"posts_analyzed": count
|
||||||
|
}
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
Reference in New Issue
Block a user