Привет и у меня есть скрипт но там есть проблема. В этой срочке: new string[] { "что ты делаешь", "что делаешь", "что сейчас делаешь" }, "Да так ничего." }, повторяются 2 ключевых слова "что" и "делаешь" и можешь переписать скрипт чтобы можео было написать только эти в пропуска и если они есть в предложении то выводить ответ. (но это только 1 примет таких будет много и нужно сделать это удобно)


using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChatBot : MonoBehaviour
{
    public InputField inputField; // Ссылка на InputField
    public Button submitButton; // Ссылка на кнопку
    public Text chatText; // Ссылка на Text для отображения диалога

    private Dictionary<string[], string> answers = new Dictionary<string[], string>(new StringArrayComparer())
{
{ new string[] { "здр", "хай", "прив","здар" }, "Привет!" },
{ new string[] { "Как дела", "как ты", "как пожива" , "как здоровье", "как сам", "как настрое" }, "У меня всё отлично, спасибо!" },
{ new string[] { "что ты делаешь", "что делаешь", "что сейчас делаешь" }, "Да так ничего." },
};

    void Start()
    {
        submitButton.onClick.AddListener(OnSubmit);
        inputField.onEndEdit.AddListener(OnEnterPressed);
    }

    void OnSubmit()
    {
        ProcessInput();
    }

    void OnEnterPressed(string input)
    {
        if (Input.GetKeyDown(KeyCode.Return))
        {
            ProcessInput();
        }
    }

    void ProcessInput()
    {
        string userQuestion = inputField.text.Trim();
        if (!string.IsNullOrEmpty(userQuestion))
        {
            // Добавляем текст пользователя в чат
            chatText.text += "Вы: " + userQuestion + "\n";


            string botResponse = GetBotResponse(userQuestion);
            chatText.text += botResponse;

            // Очистка поля ввода после отправки
            inputField.text = "";
            inputField.ActivateInputField(); // Активировать поле ввода для следующего вопроса
        }
    }

    private string GetBotResponse(string userQuestion)
    {
        // Очистка пользовательского ввода от пробелов и знаков пунктуации
        string normalizedUserQuestion = NormalizeInput(userQuestion);


        foreach (var entry in answers)
        {
            foreach (var key in entry.Key)
            {
                // Очистка ключа от пробелов и знаков пунктуации перед сравнением
                string normalizedKey = NormalizeInput(key);

                // Проверяем на полное совпадение или наличие в строке
                if (normalizedKey.Equals(normalizedUserQuestion, StringComparison.OrdinalIgnoreCase) ||
                    normalizedUserQuestion.Contains(normalizedKey))
                {
                    return "Бот: " + entry.Value + "\n";
                }
            }
        }

        // Ответ, если вопроса нет
        return "Бот: Извините, я не знаю ответа на этот вопрос.\n";
    }

    // Метод для очистки ввода от пробелов и знаков пунктуации
    private string NormalizeInput(string input)
    {
        char[] punctuations = { ' ', ',', '.', '-', '!', '?', '"', '„', '“', ':', ';' };
        string cleanedInput = input.Trim().ToLowerInvariant();
        foreach (char punctuation in punctuations)
        {
            cleanedInput = cleanedInput.Replace(punctuation.ToString(), "");
        }
        return cleanedInput;
    }

    private class StringArrayComparer : IEqualityComparer<string[]>
    {
        public bool Equals(string[] x, string[] y)
        {
            if (x.Length != y.Length) return false;


            for (int i = 0; i < x.Length; i++)
            {
                if (!x[i].Equals(y[i], StringComparison.OrdinalIgnoreCase))
                    return false;
            }
            return true;
        }

        public int GetHashCode(string[] obj)
        {
            int hash = 17;
            foreach (string str in obj)
            {
                hash = hash * 31 + (str?.ToLower().GetHashCode() ?? 0);
            }
            return hash;
        }
    }
}