Spaces:
Paused
Paused
import time | |
import requests | |
import torch | |
from deep_translator import GoogleTranslator | |
from transformers import pipeline | |
# Replace the sentiment analysis model | |
sentiment_model = pipeline( | |
'sentiment-analysis', | |
model='distilbert-base-uncased-finetuned-sst-2-english', | |
tokenizer='distilbert-base-uncased-finetuned-sst-2-english', | |
device=0 if torch.cuda.is_available() else -1 | |
) | |
def retrieve_from_vdb(query): | |
print(f"Отправка запроса к FastAPI сервису: {query}") | |
response = requests.post(f"{VECTOR_API_URL}/search/", json={"query": query}) | |
if response.status_code == 200: | |
results = response.json().get("results", []) | |
print(f"Получено {len(results)} результатов: {results}") | |
return results | |
else: | |
print(f"Ошибка при поиске: {response.text}") | |
return [] | |
def analyze_sentiment(comments): | |
print("Начинаем анализ настроений.") | |
results = [] | |
for i in range(0, len(comments), 50): | |
batch = comments[i:i + 50] | |
print(f"Анализируем батч с {i} по {i + len(batch)} комментарий: {batch}") | |
translated_batch = [] | |
valid_comments = [] # Список комментариев с успешным переводом | |
for comment in batch: | |
try: | |
translated = GoogleTranslator(source='auto', target="en").translate(comment) | |
if translated: | |
translated_batch.append(translated) | |
valid_comments.append(comment) | |
else: | |
print(f"Перевод комментария не удался или вернул пустую строку: {comment}") | |
except Exception as e: | |
print(f"Ошибка при переводе комментария '{comment}': {e}") | |
if not translated_batch: | |
print("Все переводы в этом батче не удались. Пропускаем этот батч.") | |
continue # Переходим к следующему батчу, если перевод не удался | |
print(f"Переведённый батч: {translated_batch}") | |
try: | |
batch_results = sentiment_model(translated_batch) | |
print(f"Результаты батча: {batch_results}") | |
results.extend(batch_results) | |
except Exception as e: | |
print(f"Ошибка при анализе настроений: {e}") | |
# Добавляем результат с неопределенным настроением для каждого переведенного комментария | |
for _ in translated_batch: | |
results.append({'label': 'UNKNOWN', 'score': 0.0}) | |
time.sleep(1) # Задержка для предотвращения перегрузки API | |
print(f"Анализ настроений завершен. Общие результаты: {results}") | |
return results | |