Spaces:
Sleeping
Sleeping
File size: 2,118 Bytes
876b12f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import logging
from typing import Dict, Any, List
from textblob import TextBlob
logger = logging.getLogger(__name__)
class SentimentAnalyzer:
def __init__(self):
self.manipulative_patterns = [
"experts say",
"sources claim",
"many believe",
"some say",
"everyone knows",
"clearly",
"obviously",
"without doubt",
"certainly"
]
def analyze(self, text: str) -> Dict[str, Any]:
"""Analyze sentiment using TextBlob."""
try:
blob = TextBlob(text)
sentiment_score = blob.sentiment.polarity
manipulative_phrases = self._detect_manipulative_phrases(text)
manipulation_score = len(manipulative_phrases) * 10
if sentiment_score > 0.2:
sentiment = "Positive"
elif sentiment_score < -0.2:
sentiment = "Negative"
else:
sentiment = "Neutral"
if manipulation_score > 50:
sentiment = "Manipulative"
return {
"sentiment": sentiment,
"manipulation_score": min(manipulation_score, 100),
"flagged_phrases": manipulative_phrases
}
except Exception as e:
logger.error(f"Error in sentiment analysis: {str(e)}")
return {
"sentiment": "Error",
"manipulation_score": 0,
"flagged_phrases": []
}
def _detect_manipulative_phrases(self, text: str) -> List[str]:
"""Detect potentially manipulative phrases."""
found_phrases = []
text_lower = text.lower()
for pattern in self.manipulative_patterns:
if pattern in text_lower:
start = text_lower.find(pattern)
context = text[max(0, start-20):min(len(text), start+len(pattern)+20)]
found_phrases.append(context.strip())
return found_phrases |