диалог на основе поиска пар слов текста
я ввожу новую фразу текста через input
программа находит в каждой фразе все возможные пары слов и также их корней
далее она ищет эти пары слов в тексте который находится в файле фразы txt ( utf-8)
затем программа выводит случайно одну из найденных фраз в тексте с парой слов из тех которые были введены
новая фраза ввода добавляется в файл фразы. txt
затем вводится новая (новая 2) фраза через input
при поиске новых фраз в файле учитываются все слова которые были введены через input в ходе каждого диалога с ботом
выходить из цикла диалога не нужно - я это могу сделать сам
программа сохраняет пары слов диалога в файле - словарь пар слов txt
------ ** ------>
import os
import random
import nltk
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
# Убедитесь, что необходимые ресурсы nltk загружены
nltk.download('punkt')
# Инициализация стеммера
stemmer = PorterStemmer()
# Файлы для хранения фраз и пар слов
phrases_file = 'фразы.txt'
pairs_file = 'словарь пар слов.txt'
# Функция для получения всех пар слов из фразы
def get_word_pairs(phrase):
words = word_tokenize(phrase)
pairs = []
for i in range(len(words)):
for j in range(i + 1, len(words)):
pairs.append((words[i], words[j]))
return pairs
# Функция для получения корней слов
def get_stemmed_pairs(pairs):
return [(stemmer.stem(word1), stemmer.stem(word2)) for word1, word2 in pairs]
# Функция для поиска фраз в файле
def find_phrases_with_pairs(pairs, phrases):
found_phrases = []
for phrase in phrases:
for word1, word2 in pairs:
if word1 in phrase and word2 in phrase:
found_phrases.append(phrase)
break
return found_phrases
# Основной цикл программы
while True:
# Ввод новой фразы
new_phrase = input("Ввод: ")
# Получение пар слов и их корней
word_pairs = get_word_pairs(new_phrase)
stemmed_pairs = get_stemmed_pairs(word_pairs)
# Чтение фраз из файла
if os.path.exists(phrases_file):
with open(phrases_file, 'r', encoding='utf-8') as f:
phrases = f.readlines()
phrases = [phrase.strip() for phrase in phrases]
else:
phrases = []
# Поиск фраз с парами слов
found_phrases = find_phrases_with_pairs(word_pairs, phrases)
# Вывод случайной найденной фразы
if found_phrases:
print("Бот:", random.choice(found_phrases))
else:
print("нужные фразы из слов не найдены.")
# Сохранение новой фразы в файл
with open(phrases_file, 'a', encoding='utf-8') as f:
f.write(new_phrase + '\n')
# Сохранение пар слов в словарь
with open(pairs_file, 'a', encoding='utf-8') as f:
for pair in word_pairs:
f.write(f"{pair[0]} {pair[1]}\n")
= ------ >
этот алгоритм можно усложнить если искать не просто набор пар слов
а также учитывать разные комбинации из этих пар слов
Свидетельство о публикации №124103000828