|
|
""" |
|
|
Simplified Text Classification Model |
|
|
A lightweight sentiment analysis model for demonstration |
|
|
""" |
|
|
|
|
|
import json |
|
|
import re |
|
|
from collections import Counter |
|
|
|
|
|
|
|
|
class TextClassifier: |
|
|
def __init__(self): |
|
|
""" |
|
|
Initialize the text classifier with simple heuristics |
|
|
In a real implementation, this would load a pre-trained model |
|
|
""" |
|
|
|
|
|
self.positive_words = { |
|
|
'good', 'great', 'excellent', 'amazing', 'love', 'wonderful', |
|
|
'fantastic', 'awesome', 'brilliant', 'perfect', 'nice', 'best', |
|
|
'superb', 'outstanding', 'delightful', 'pleasure', 'happy', |
|
|
'joy', 'pleased', 'satisfied', 'impressed' |
|
|
} |
|
|
self.negative_words = { |
|
|
'bad', 'terrible', 'awful', 'horrible', 'hate', 'worst', |
|
|
'disgusting', 'disappointing', 'annoying', 'frustrating', |
|
|
'sad', 'angry', 'upset', 'displeased', 'regret', 'miserable', |
|
|
'pathetic', 'useless', 'broken', 'wrong' |
|
|
} |
|
|
|
|
|
def predict(self, text): |
|
|
""" |
|
|
Predict the sentiment of the input text using simple heuristics |
|
|
""" |
|
|
|
|
|
words = re.findall(r'\b\w+\b', text.lower()) |
|
|
|
|
|
|
|
|
pos_count = sum(1 for word in words if word in self.positive_words) |
|
|
neg_count = sum(1 for word in words if word in self.negative_words) |
|
|
|
|
|
|
|
|
if pos_count > neg_count: |
|
|
sentiment = "positive" |
|
|
confidence = min(0.95, 0.5 + (pos_count / (pos_count + neg_count + 1))) |
|
|
elif neg_count > pos_count: |
|
|
sentiment = "negative" |
|
|
confidence = min(0.95, 0.5 + (neg_count / (pos_count + neg_count + 1))) |
|
|
else: |
|
|
|
|
|
sentiment = "neutral" |
|
|
confidence = 0.5 |
|
|
|
|
|
return { |
|
|
"label": sentiment, |
|
|
"confidence": round(confidence, 4), |
|
|
"text": text, |
|
|
"positive_words_found": pos_count, |
|
|
"negative_words_found": neg_count |
|
|
} |
|
|
|
|
|
|
|
|
def main(): |
|
|
|
|
|
classifier = TextClassifier() |
|
|
|
|
|
examples = [ |
|
|
"I love this product! It's amazing.", |
|
|
"This is terrible. I hate it.", |
|
|
"It's okay, nothing special.", |
|
|
"The service was excellent and the staff was wonderful!", |
|
|
"Completely disappointed with this purchase." |
|
|
] |
|
|
|
|
|
print("Text Classification Demo:") |
|
|
print("=" * 50) |
|
|
|
|
|
for text in examples: |
|
|
result = classifier.predict(text) |
|
|
print(f"Text: {result['text']}") |
|
|
print(f"Label: {result['label']}, Confidence: {result['confidence']}") |
|
|
print(f"Positive words: {result['positive_words_found']}, Negative words: {result['negative_words_found']}") |
|
|
print("-" * 30) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |