122 lines
3.6 KiB
Python
122 lines
3.6 KiB
Python
"""
|
|
AI Engine serializers
|
|
"""
|
|
from rest_framework import serializers
|
|
|
|
from .models import SentimentResult
|
|
|
|
|
|
class SentimentResultSerializer(serializers.ModelSerializer):
|
|
"""Sentiment result serializer"""
|
|
|
|
content_type_name = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = SentimentResult
|
|
fields = [
|
|
'id',
|
|
'content_type',
|
|
'content_type_name',
|
|
'object_id',
|
|
'text',
|
|
'language',
|
|
'sentiment',
|
|
'sentiment_score',
|
|
'confidence',
|
|
'ai_service',
|
|
'ai_model',
|
|
'processing_time_ms',
|
|
'keywords',
|
|
'entities',
|
|
'emotions',
|
|
'metadata',
|
|
'created_at',
|
|
'updated_at',
|
|
]
|
|
read_only_fields = ['id', 'created_at', 'updated_at']
|
|
|
|
def get_content_type_name(self, obj):
|
|
"""Get human-readable content type name"""
|
|
return obj.content_type.model if obj.content_type else None
|
|
|
|
|
|
class AnalyzeTextRequestSerializer(serializers.Serializer):
|
|
"""Request serializer for text analysis"""
|
|
|
|
text = serializers.CharField(
|
|
required=True,
|
|
help_text="Text to analyze"
|
|
)
|
|
language = serializers.ChoiceField(
|
|
choices=['en', 'ar'],
|
|
required=False,
|
|
allow_null=True,
|
|
help_text="Language code (auto-detected if not provided)"
|
|
)
|
|
extract_keywords = serializers.BooleanField(
|
|
default=True,
|
|
help_text="Whether to extract keywords"
|
|
)
|
|
extract_entities = serializers.BooleanField(
|
|
default=True,
|
|
help_text="Whether to extract entities"
|
|
)
|
|
detect_emotions = serializers.BooleanField(
|
|
default=True,
|
|
help_text="Whether to detect emotions"
|
|
)
|
|
|
|
|
|
class AnalyzeTextResponseSerializer(serializers.Serializer):
|
|
"""Response serializer for text analysis"""
|
|
|
|
text = serializers.CharField()
|
|
language = serializers.CharField()
|
|
sentiment = serializers.CharField()
|
|
sentiment_score = serializers.FloatField()
|
|
confidence = serializers.FloatField()
|
|
keywords = serializers.ListField(child=serializers.CharField())
|
|
entities = serializers.ListField(child=serializers.DictField())
|
|
emotions = serializers.DictField()
|
|
ai_service = serializers.CharField()
|
|
ai_model = serializers.CharField()
|
|
processing_time_ms = serializers.IntegerField()
|
|
|
|
|
|
class BatchAnalyzeRequestSerializer(serializers.Serializer):
|
|
"""Request serializer for batch text analysis"""
|
|
|
|
texts = serializers.ListField(
|
|
child=serializers.CharField(),
|
|
required=True,
|
|
help_text="List of texts to analyze"
|
|
)
|
|
language = serializers.ChoiceField(
|
|
choices=['en', 'ar'],
|
|
required=False,
|
|
allow_null=True,
|
|
help_text="Language code (auto-detected if not provided)"
|
|
)
|
|
|
|
|
|
class BatchAnalyzeResponseSerializer(serializers.Serializer):
|
|
"""Response serializer for batch text analysis"""
|
|
|
|
results = AnalyzeTextResponseSerializer(many=True)
|
|
total = serializers.IntegerField()
|
|
processing_time_ms = serializers.IntegerField()
|
|
|
|
|
|
class SentimentStatsSerializer(serializers.Serializer):
|
|
"""Sentiment statistics serializer"""
|
|
|
|
total = serializers.IntegerField()
|
|
positive = serializers.IntegerField()
|
|
neutral = serializers.IntegerField()
|
|
negative = serializers.IntegerField()
|
|
positive_pct = serializers.FloatField()
|
|
neutral_pct = serializers.FloatField()
|
|
negative_pct = serializers.FloatField()
|
|
avg_score = serializers.FloatField()
|
|
avg_confidence = serializers.FloatField()
|