File size: 2,199 Bytes
dc8ce6b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import json
import random
import re
from difflib import get_close_matches

try:
    with open("patterns.json", "r", encoding="utf-8") as f:
        PATTERNS = json.load(f)
except Exception as e:
    PATTERNS = {"default": [f"Ошибка загрузки: {e}"]}

# === Логика обработки ===
KEYWORDS = {
    "привет": ["привет", "здравствуй", "хай", "прив"],
    "как дела": ["дела", "как ты", "настроение"],
    "имя": ["имя", "кто ты", "зовут"],
    "школа": ["школа", "урок", "задача", "математика"],
    "пока": ["пока", "выход", "до свидания"],
    "knowledge": ["что такое", "как приготовить", "расскажи про"]
}

def preprocess(text):
    return re.sub(r'[^а-яё\s]', ' ', text.lower()).strip()

def find_response(user_input):
    clean = preprocess(user_input)
    if not clean:
        return "Пожалуйста, напиши что-нибудь!"
    if any(w in clean for w in ["пока", "выход", "стоп"]):
        return "До свидания! Возвращайся скорее! 😊"
    
    knowledge = PATTERNS.get("knowledge", {})
    if clean in knowledge:
        return knowledge[clean]
    matches = get_close_matches(clean, knowledge.keys(), n=1, cutoff=0.6)
    if matches:
        return knowledge[matches[0]]

    all_keywords = []
    keyword_to_intent = {}
    for intent, words in KEYWORDS.items():
        if intent == "knowledge": continue
        for word in words:
            all_keywords.append(word)
            keyword_to_intent[word] = intent

    for token in clean.split():
        matches = get_close_matches(token, all_keywords, n=1, cutoff=0.6)
        if matches:
            return random.choice(PATTERNS[keyword_to_intent[matches[0]]])
    return random.choice(PATTERNS["default"])

gr.Interface(
    fn=find_response,
    inputs="text",
    outputs="text",
    title="Newton Micro - теперь умнее! ;)",
    description="Сверхлёгкий ИИ на Python. Поддерживает опечатки и рецепты."
).launch()