мой бот ии из фраз
и запоминает их в базе фразы.txt
выбор фраз идёт по корням повторов слов строки
также отслеживаются повторы ответов
вам просто нужно вводить подходящие для ответа фразы
если строка ответа не найдена то выводится случайная строка
*
import re
import random
def extract_roots(phrase):
"""Извлекает корни слов из фразы (упрощённо — обрезает окончания)."""
words = re.findall(r'\b\w+\b', phrase.lower())
roots = set(word[:-i] for word in words for i in range(1, min(4, len(word) + 1)))
return roots
def load_phrases(filename):
"""Загружает фразы из файла."""
try:
with open(filename, 'r', encoding='utf-8') as f:
return [line.strip() for line in f if line.strip()]
except FileNotFoundError:
return []
def save_phrase(filename, phrase):
"""Добавляет фразу в файл."""
with open(filename, 'a', encoding='utf-8') as f:
f.write(phrase + '\n')
def find_random_matching_phrase(phrases, input_phrase, used_responses):
"""Находит случайную фразу: сначала с общим корнем, затем — любую подходящую."""
input_roots = extract_roots(input_phrase)
# ищем все фразы с общими корнями
matching_phrases = []
for phrase in phrases:
if phrase in used_responses or phrase == input_phrase:
continue
phrase_roots = extract_roots(phrase)
if input_roots & phrase_roots:
matching_phrases.append(phrase)
# Если нашли фразы с общими корнями — выбираем случайную
if matching_phrases:
return random.choice(matching_phrases)
# если фраз с общими корнями нет, ищем любую другую фразу
available_phrases = [
phrase for phrase in phrases
if phrase not in used_responses and phrase != input_phrase
]
if available_phrases:
return random.choice(available_phrases)
return None
def main():
filename = 'фразы.txt'
used_responses = set()
while True:
user_input = input('я: ')
# Сначала ищем ответ среди существующих фраз (до добавления новой)
phrases = load_phrases(filename)
response = find_random_matching_phrase(phrases, user_input, used_responses)
# Затем добавляем новую фразу в файл
save_phrase(filename, user_input)
if response:
print(f'> {response}')
used_responses.add(response)
else:
print('> Подходящий ответ не найден.')
if __name__ == '__main__':
main()
Свидетельство о публикации №126042300184