SkillForge45 commited on
Commit
5dff1cb
·
verified ·
1 Parent(s): 87f491a

Upload SkillForge-1.0-RU.py

Browse files

SkillForge Model on Russian Language.

Files changed (1) hide show
  1. SkillForge-1.0-RU.py +179 -0
SkillForge-1.0-RU.py ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import requests
4
+ from io import StringIO
5
+ from sklearn.feature_extraction.text import TfidfVectorizer
6
+ from sklearn.metrics.pairwise import cosine_similarity
7
+ import speech_recognition as sr
8
+ import pyttsx3
9
+ import time
10
+
11
+ class HybridChatBot:
12
+ def __init__(self, dataset_url=None):
13
+ self.dataset_url = dataset_url
14
+ self.qa_pairs = {}
15
+ self.vectorizer = TfidfVectorizer()
16
+ self.X = None
17
+ self.recognizer = sr.Recognizer()
18
+ self.engine = pyttsx3.init()
19
+
20
+ # Настройки голосового движка
21
+ voices = self.engine.getProperty('voices')
22
+ self.engine.setProperty('voice', voices[0].id)
23
+ self.engine.setProperty('rate', 150)
24
+
25
+ if dataset_url:
26
+ self.load_dataset()
27
+ self.train()
28
+
29
+ def load_dataset(self):
30
+ """Загрузка датасета с веб-ресурса"""
31
+ try:
32
+ response = requests.get(self.dataset_url)
33
+ response.raise_for_status()
34
+
35
+ if self.dataset_url.endswith('.csv'):
36
+ data = pd.read_csv(StringIO(response.text))
37
+ elif self.dataset_url.endswith('.json'):
38
+ data = pd.read_json(StringIO(response.text))
39
+ else:
40
+ print("Формат файла не поддерживается")
41
+ return
42
+
43
+ for _, row in data.iterrows():
44
+ self.qa_pairs[row["question"].lower()] = row["answer"]
45
+
46
+ print(f"Загружено {len(self.qa_pairs)} пар вопрос-ответ")
47
+
48
+ except Exception as e:
49
+ print(f"Ошибка загрузки датасета: {e}")
50
+
51
+ def train(self):
52
+ """Обучение модели на загруженных данных"""
53
+ if not self.qa_pairs:
54
+ print("Нет данных для обучения!")
55
+ return
56
+
57
+ questions = list(self.qa_pairs.keys())
58
+ self.X = self.vectorizer.fit_transform(questions)
59
+ print("Модель обучена на загруженных данных")
60
+
61
+ def add_qa_pair(self, question, answer):
62
+ """Добавление новой пары вопрос-ответ"""
63
+ self.qa_pairs[question.lower()] = answer
64
+ self.train()
65
+
66
+ def get_response(self, user_input):
67
+ """Получение ответа на ввод пользователя"""
68
+ if not self.qa_pairs:
69
+ return "Я еще не обучен. Пожалуйста, добавьте вопросы и ответы."
70
+
71
+ user_vec = self.vectorizer.transform([user_input.lower()])
72
+ similarities = cosine_similarity(user_vec, self.X)
73
+ best_match_idx = np.argmax(similarities)
74
+ best_match_score = similarities[0, best_match_idx]
75
+
76
+ if best_match_score > 0.5:
77
+ best_question = list(self.qa_pairs.keys())[best_match_idx]
78
+ return self.qa_pairs[best_question]
79
+ else:
80
+ return None
81
+
82
+ def text_to_speech(self, text):
83
+ """Озвучивание текста"""
84
+ self.engine.say(text)
85
+ self.engine.runAndWait()
86
+
87
+ def speech_to_text(self):
88
+ """Распознавание голоса с микрофона"""
89
+ with sr.Microphone() as source:
90
+ print("\nГоворите сейчас...")
91
+ self.recognizer.adjust_for_ambient_noise(source)
92
+ try:
93
+ audio = self.recognizer.listen(source, timeout=5)
94
+ text = self.recognizer.recognize_google(audio, language="ru-RU")
95
+ print(f"Распознано: {text}")
96
+ return text
97
+ except sr.UnknownValueError:
98
+ print("Речь не распознана")
99
+ return None
100
+ except sr.RequestError:
101
+ print("Ошибка сервиса распознавания")
102
+ return None
103
+ except sr.WaitTimeoutError:
104
+ print("Время ожидания истекло")
105
+ return None
106
+
107
+ def run(self):
108
+ """Улучшенный интерфейс взаимодействия"""
109
+ print("\n" + "="*50)
110
+ print("ДОБРО ПОЖАЛОВАТЬ В ИНТЕЛЛЕКТУАЛЬНЫЙ ЧАТ-БОТ".center(50))
111
+ print("="*50)
112
+
113
+ current_mode = "текст"
114
+ while True:
115
+ print("\n" + "-"*50)
116
+ print(f"Текущий режим ввода: {current_mode.upper()}")
117
+ print("[1] Отправить текстовое сообщение")
118
+ print("[2] Говорить с ботом голосом")
119
+ print("[3] Переключить режим ввода")
120
+ print("[4] Обучить бота новому ответу")
121
+ print("[5] Выход")
122
+
123
+ try:
124
+ choice = input("Выберите действие (1-5): ").strip()
125
+
126
+ if choice == "1":
127
+ user_input = input("\nВаше сообщение: ")
128
+ if user_input.lower() in ["выход", "стоп"]:
129
+ break
130
+
131
+ response = self.get_response(user_input)
132
+ if response:
133
+ print(f"\nБот: {response}")
134
+ self.text_to_speech(response)
135
+ else:
136
+ print("\nБот: Я не знаю что ответить. Хотите научить меня?")
137
+
138
+ elif choice == "2":
139
+ user_input = self.speech_to_text()
140
+ if user_input:
141
+ if user_input.lower() in ["выход", "стоп"]:
142
+ break
143
+
144
+ response = self.get_response(user_input)
145
+ if response:
146
+ print(f"\nБот: {response}")
147
+ self.text_to_speech(response)
148
+ else:
149
+ print("\nБот: Я не знаю что ответить на это.")
150
+ self.text_to_speech("Я не знаю что ответить на это")
151
+
152
+ elif choice == "3":
153
+ current_mode = "голос" if current_mode == "текст" else "текст"
154
+ print(f"\nРежим изменен на: {current_mode.upper()}")
155
+
156
+ elif choice == "4":
157
+ print("\nОбучение бота:")
158
+ question = input("Введите вопрос: ")
159
+ answer = input("Введите ответ: ")
160
+ self.add_qa_pair(question, answer)
161
+ print("Бот успешно обучен!")
162
+
163
+ elif choice == "5":
164
+ print("\nЗавершение работы...")
165
+ break
166
+
167
+ else:
168
+ print("\nПожалуйста, выберите вариант от 1 до 5")
169
+
170
+ except KeyboardInterrupt:
171
+ print("\nЗавершение работы...")
172
+ break
173
+
174
+ if __name__ == "__main__":
175
+ # Пример URL датасета (можно заменить на свой)
176
+ DATASET_URL = "https://raw.githubusercontent.com/user/repo/main/qa_data.csv"
177
+
178
+ bot = HybridChatBot(DATASET_URL)
179
+ bot.run()