File size: 3,151 Bytes
7c603fe
 
 
ea6fb88
7c603fe
1cbb59c
7c603fe
7e822e7
7c603fe
1cbb59c
7c603fe
 
7e822e7
 
7c603fe
 
 
 
 
 
a7df9f5
7c603fe
 
7e822e7
7c603fe
 
 
 
 
6da8f32
7c603fe
 
 
1cbb59c
7c603fe
 
7e822e7
1cbb59c
6da8f32
 
1cbb59c
6da8f32
 
 
 
 
 
 
 
 
 
1cbb59c
6da8f32
 
 
1cbb59c
7e822e7
1cbb59c
6da8f32
 
 
 
 
 
 
 
 
1cbb59c
6da8f32
1cbb59c
7e822e7
7c603fe
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
66
67
68
69
70
71
72
73
import requests
import torch
from transformers import pipeline
from deep_translator import GoogleTranslator
import time
import os

VECTOR_API_URL = os.getenv('API_URL')

# Модель для анализа настроений
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