диалог на основе поиска пар слов текста

 алгоритм программы на языке питон
 я ввожу новую фразу текста через 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")




 = ------ >



этот алгоритм можно усложнить если искать не просто набор пар слов
а также учитывать разные комбинации из этих пар слов


Рецензии