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