программа для диалога из фраз
я ввожу новую фразу через команду 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!
фраза: мне хочется узнать как связаны слова в этой строке данных ии
ответ: мне нужна твоя помощь в том как работает оптимизация данных этой программы
фраза: это наверно не так всё может быть и сложно
ответ: наверно это и не так всё сложно
фраза: но почему ты думаешь именно так а не по другому
ответ: а почему ты думаешь именно так а не по другому
фраза: это довольно похоже на то что уже здесь было до этого
ответ: но это не хуже того что уже было до этого
фраза: возможно что это так и есть - тебе это виднее
ответ: возможно что это так и есть
фраза: это немного странный ответ но я его могу принять
ответ: это кажется немного был странный ответ
фраза: и что это может означать в таком случае
ответ: и что ты думаешь что в данном случае это может работать лучше
фраза: я примерно так об этом и думал
ответ: я так и подумал об этом
фраза: тогда скажи мне почему ты не смог понять смысла этой фразы с первого раза
ответ: не я - а ты должен понять смысл этой новой фразы
фраза: я кажется понял что ты здесь имеешь ввиду и почему ты так думаешь
ответ: Что конкретно ты имел ввиду я кажется так и не понял
фраза: если ты это не смог понять - то значит тебе для этого просто нужно немного больше времени
ответ: если тебе не сложно - то сделай это для меня
фраза: скоро мы узнаем как это может работать в данном случае
ответ: как это сделать скоро мы это узнаем
фраза: ты думаешь что мы должны поступить именно так как мы это делали до этого
ответ: почему тогда ты думаешь что это всё работает именно так
фраза: я так не думаю - я просто предполагаю что это возможно сделать или понять в принципе
ответ: как это возможно сделать - понять не так просто
фраза: наверно не просто - но всё же как то можно понять - если ты это так хочешь сделать
ответ: это не так просто понять - но наверно всё же можно это сделать
фраза: здесь должна быть новая фраза для программы ИИ
Свидетельство о публикации №124102600846