File size: 3,085 Bytes
d57001c
 
7c603fe
 
ea6fb88
d57001c
7c603fe
 
d57001c
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
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