программа для диалога из фраз

 у меня есть файл txt utf-8 в нём много небольших фраз для диалогов
я ввожу новую фразу через команду input и программа добавляет эту фразу в мой файл txt
мне нужно сделать программу которая сможет выбрать по словам
похожую по смыслу фразу
и вывести её как ответ на ту фразу которую я ввёл через input
затем я ввожу новую фразу - и так далее по смыслу того что есть в базе
так -  чтобы возникла некоторая связь между этими фразами и словами из которых они состоят





Для реализации вашей задачи мы можем использовать Python и библиотеку nltk (Natural Language Toolkit) для обработки естественного языка.

Мы будем загружать фразы из текстового файла, добавлять новые фразы, а затем находить наиболее похожие по смыслу фразы на основе общего количества слов.

Вот пример кода, который выполняет описанные вами шаги алгоритма


   **


import nltk
from nltk.tokenize import word_tokenize
from nltk.metrics import jaccard_distance
from nltk import FreqDist
import os

# Убедитесь, что у вас установлена библиотека nltk и загружены необходимые ресурсы
nltk.download('punkt')




       

       


------>


Как это работает:
Загрузка фраз: Функция load_phrases загружает фразы из текстового файла.
Сохранение фраз: Функция save_phrase добавляет новую фразу в файл.

Поиск похожих фраз: Функция find_similar_phrase использует расстояние Жаккара для определения схожести между введенной фразой и уже существующими фразами.
Основной цикл: В main() программа запрашивает ввод новой фразы, сохраняет её и ищет похожую фразу.

Установка библиотеки nltk

Если у вас еще не установлена библиотека nltk, вы можете установить её с помощью следующей команды:

pip install nltk
Запуск программы
Сохраните код в файл, например, dialog_bot.py, и запустите его.
Вы можете вводить фразы, и программа будет находить похожие фразы на основе введенного текста.


Этот код является базовым примером, и его можно улучшить, добавив более сложные алгоритмы обработки текста, такие как использование векторных представлений слов (например, Word2Vec или GloVe) для более точного определения семантической схожести.



 **



import nltk
from nltk.tokenize import word_tokenize
from nltk.metrics import jaccard_distance
from nltk import FreqDist
import os

# нужна библиотека nltk и загружены необходимые ресурсы
nltk.download('punkt')

# Функция для загрузки фраз из файла
def load_phrases(filename):
    if not os.path.exists(filename):
        return []
    with open(filename, 'r', encoding='utf-8') as file:
        return [line.strip() for line in file.readlines()]

# Функция для сохранения фраз в файл
def save_phrase(filename, phrase):
    with open(filename, 'a', encoding='utf-8') as file:
        file.write(phrase + '\n')

# Функция для поиска наиболее похожей фразы
def find_similar_phrase(input_phrase, phrases):
    input_tokens = set(word_tokenize(input_phrase.lower()))
    max_similarity = -1
    most_similar_phrase = None

    for phrase in phrases:
        phrase_tokens = set(word_tokenize(phrase.lower()))
        similarity = 1 - jaccard_distance(input_tokens, phrase_tokens)
      
        if similarity > max_similarity:
            max_similarity = similarity
            most_similar_phrase = phrase

    return most_similar_phrase

def main():
    filename = 'фраз.txt'
    phrases = load_phrases(filename)

    while True:
        input_phrase = input("фраза: ")
        if input_phrase.lower() == 'exit':
            break
      
        # Сохранение новой фразы в файл
        save_phrase(filename, input_phrase)
      
        # Поиск похожей фразы
        if phrases:
            similar_phrase = find_similar_phrase(input_phrase, phrases)
            if similar_phrase:
                print(f"ответ: {similar_phrase}")
            else:
                print("Похожих фраз не найдено.")

        # Обновление списка фраз
        phrases.append(input_phrase)

if __name__ == "__main__":
    main()










[nltk_data] Downloading package punkt to
[nltk_data]     C:\Users\MSI\AppData\Roaming\nltk_data...
[nltk_data]   Package punkt is already up-to-date!
фраза: мне хочется узнать как связаны слова в этой строке данных ии
ответ: мне нужна твоя помощь в том как работает оптимизация данных этой программы
фраза: это наверно не так всё может быть и сложно
ответ: наверно это и не так всё сложно
фраза: но почему ты думаешь именно так а не по другому
ответ: а почему ты думаешь именно так а не по другому
фраза: это довольно похоже на то что уже здесь было до этого
ответ: но это не хуже того что уже было до этого
фраза: возможно что это так и есть - тебе это виднее
ответ: возможно что это так и есть
фраза: это немного странный ответ но я его могу принять
ответ: это кажется немного был странный ответ
фраза: и что это может означать в таком случае
ответ: и что ты думаешь что в данном случае это может работать лучше
фраза: я примерно так об этом и думал
ответ: я так и подумал об этом
фраза: тогда скажи мне почему ты не смог понять смысла этой фразы с первого раза
ответ: не я -  а ты должен понять  смысл этой новой фразы
фраза: я кажется понял что ты здесь имеешь ввиду и почему ты так думаешь
ответ: Что конкретно ты имел ввиду  я кажется  так  и  не понял
фраза: если ты это не смог понять - то значит тебе для этого просто нужно немного больше времени
ответ: если тебе не сложно - то сделай это для меня
фраза: скоро мы узнаем как это может работать в данном случае
ответ: как это сделать  скоро мы это узнаем
фраза: ты думаешь что мы должны поступить именно так как мы это делали до этого
ответ: почему тогда ты думаешь что это всё работает именно так
фраза: я так не думаю - я просто предполагаю что это возможно сделать или понять в принципе
ответ: как это возможно сделать - понять не так просто
фраза: наверно не просто - но всё же как то можно понять - если ты это так хочешь сделать
ответ: это не так просто понять - но наверно всё же можно это сделать
фраза: здесь должна быть новая фраза для программы ИИ


Рецензии