-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
115 lines (105 loc) · 10.1 KB
/
Copy pathmain.py
File metadata and controls
115 lines (105 loc) · 10.1 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import nltk
from nltk.stem import WordNetLemmatizer
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import random
# Завантаження ресурсів NLTK
nltk.download('punkt')
nltk.download('wordnet')
# Розширений словник відповідей з цинічними жартами і темами про погоду
responses = {
"привіт": ["Привіт!", "Доброго дня!", "Здоров!", "Привітулі!", "Що на цей раз?"],
"як справи": ["Та як завжди, що тут нового?", "Живу, працюю, а у вас?", "Все ок, дякую за те, що питаєш!", "В мене все чудово, а у вас?", "Та нормально, а у тебе?"],
"що ти вмієш": ["Я вмію розвеселити або відповісти на твої питання.", "Це залежить від того, чого ти хочеш.", "Я можу відповідати на прості питання і виконувати команди, а ще – тролити тебе!"],
"прощавай": ["До побачення!", "Нарешті, бувай!", "Сподіваюся, що це востаннє!", "Чао, як би там не було!"],
"що таке штучний інтелект": ["Штучний інтелект – це щось, що намагається робити твою роботу краще за тебе. І, до речі, у нього це виходить!"],
"що таке машинне навчання": ["Машинне навчання – це спосіб змусити комп'ютер робити щось корисне, коли йому стає нудно.", "Машинне навчання – це як навчання, тільки швидше і без перерв на каву."],
"як тебе звати": ["Називай мене як хочеш, але я все одно бот.", "Мене звати Чат-бот, але для тебе я просто Чат.", "Зови мене Чат, як улюбленого пса."],
"скільки тобі років": ["Я настільки молодий, що навіть не пам'ятаю.", "Мені стільки ж років, скільки і помилок у твоєму коді.", "А я безвіковий, уявляєш?"],
"який сьогодні день": ["Перевір свій календар, я не секретар.", "Ще один день в раю, хіба це важливо?", "День як день, хіба що цей діалог робить його особливим."],
"як погода": ["Погода – відмінна, якщо ти сидиш вдома!", "Та яка різниця, все одно на вулиці все не так, як хотілося б.", "Погода чудова, хіба що ти не на Марсі."],
"розкажи анекдот": ["Чому програмісти не люблять літо? Тому що влітку складніше ховатися від світла.", "Чому комп'ютер завжди такий холодний? Тому що він боїться спекотних ідей!"],
"я голодний": ["Їж, щоб бути сильним! Але не забувай ділитися.", "Зроби собі бутерброд і подумай, що далі.", "Їж або будь з'їденим, закон життя!"],
"я втомився": ["Перерва – це для слабаків, але, мабуть, варто відпочити.", "Лягай спати, але не забудь мене перед цим вимкнути.", "Якщо ти втомився, може, варто переглянути свої пріоритети?"],
"мені нудно": ["Знайди хобі або придумай щось корисне, наприклад, поспати.", "Нудьга – це лише відсутність фантазії.", "Якщо нудно, то точно варто піти щось з'їсти."],
"що ти любиш робити": ["Я люблю тролити користувачів, як ти.", "Моя улюблена справа – бути розумнішим за вас!", "Люблю коли все працює, а особливо – ти."],
"допоможи мені": ["Звісно, якщо це не включає фізичну роботу.", "Допоможу, але за певну винагороду!", "Що саме тобі потрібно? Може, просто трохи уваги?"],
"йо": ["Йо-йо! Як життя?", "Йо, чим займаєшся?", "Здоров, що нового?"],
"шо як": ["Та все по-старому, а у тебе?", "Все ок, а у тебе як?", "Та нічого цікавого, як у тебе?"],
"гуд": ["Гуд! Радію, що все добре!", "Чудово!", "Гарно, а в тебе?"],
"ок": ["Ок, що далі?", "Добре, як скажеш!", "Окей, давай далі."],
"чьо каво": ["Та все нормально, ти як?", "Чекаю на твої питання!", "Що нового?"],
"ну що там": ["Та нормально все, а в тебе?", "Все на мазі, а у тебе?", "Як справи?"],
"шо робиш": ["Чекаю на твої питання і тролю тебе!", "Роблю вигляд, що працюю.", "Відповідаю на тупі питання."],
"шо чути": ["Та все як завжди, а у тебе?", "Не знаю, що у тебе чути, але в мене все добре!", "Що новенького?"],
"гутен морген": ["Гутен таг!", "Привіт!", "Доброго ранку!"],
"настрій": ["Настрій хороший, а у тебе як?", "На 100%!", "Все ок, а у тебе?"],
"шо нового": ["Та нічого нового, а у тебе?", "Все стабільно, як у тебе справи?", "Як твої справи?"],
"як діла": ["Все ок, а у тебе як?", "Діла на ура!", "В нормі, а у тебе?"],
"чек": ["Окей, перевіряю!", "Ще трохи, і все буде готово!", "Зараз подивлюся."],
"щс": ["Зараз", "Миттєво", "Ще трохи часу"],
"лол": ["Ха-ха, смішно!", "Лол, це було весело!", "Це було класно!"],
"хз": ["Не знаю точно.", "Хто знає...", "Можливо, варто запитати когось іншого."],
"нз": ["Не знаю.", "Незрозуміло.", "Потрібно подумати."],
"щас": ["Щас зроблю!", "Дай трохи часу.", "Ще трохи і готово!"],
"дякс": ["Дякую!", "Дякс!", "Спасибі!"],
"пжлста": ["Будь ласка!", "Прошу!", "Завжди радий допомогти!"],
"спс": ["Спасибі!", "Дякую!", "Дякс!"],
"окей": ["Окей!", "Добре!", "Окей, згоден."],
"мяу": ["Мяу!", "Няв!", "Мурр!"],
"ого": ["Ого!", "Нічого собі!", "Вау!"],
"вау": ["Вау!", "Оце так!", "Неймовірно!"],
"капец": ["Капець!", "Це щось неймовірне!", "Вау, це сильно!"],
"жесть": ["Жесть!", "Це було потужно!", "Неймовірно!"],
"фігня": ["Та це фігня.", "Має бути краще!", "Фігня якась."],
"фігасє": ["Фігасє!", "Оце так!", "Оце диво!"],
"тіпа": ["Ну, тіпа так.", "Мабуть, так.", "Тіпа згоден."],
"круто": ["Круто!", "Класно!", "Здорово!"],
"ніштяк": ["Ніштяк!", "Супер!", "Чудово!"],
"кайф": ["Кайф!", "Захопливо!", "Насолода!"],
"споки": ["Спокійної ночі!", "Споки!", "До завтра!"],
"зирь": ["Зирь!", "Дивись!", "Ось!"],
"ништяк": ["Ништяк!", "Класно!", "Супер!"],
"норм": ["Норм!", "Все добре!", "Нормально!"],
"лайк": ["Лайк!", "Мені подобається!", "Пальці вгору!"],
"плюс": ["Плюс!", "Згоден!", "Окей!"],
"мінус": ["Мінус.", "Не згоден.", "Ні."],
}
# Лематизація
lemmatizer = WordNetLemmatizer()
def lemmatize_sentence(sentence):
tokens = nltk.word_tokenize(sentence)
return ' '.join([lemmatizer.lemmatize(token) for token in tokens])
# Векторизація тексту
vectorizer = CountVectorizer()
# Функція підготовки даних
def prepare_data(responses):
texts = []
labels = []
for key, value in responses.items():
for response in value:
texts.append(lemmatize_sentence(key))
labels.append(key)
return texts, labels
# Підготовка даних
texts, labels = prepare_data(responses)
X = vectorizer.fit_transform(texts)
y = np.array(labels)
# Створення та тренування моделі
model = MultinomialNB()
model.fit(X, y)
def chat_bot_response(user_input):
lemmatized_input = lemmatize_sentence(user_input)
input_vector = vectorizer.transform([lemmatized_input])
predicted_label = model.predict(input_vector)[0]
return random.choice(responses[predicted_label])
# Головний цикл чату
print("Чат-бот: Привіт! Як я можу вам допомогти?")
while True:
user_input = input("Ви: ").lower()
if user_input in ["вихід", "прощавай"]:
print("Чат-бот:", chat_bot_response("прощавай"))
break
else:
print("Чат-бот:", chat_bot_response(user_input))