поиск нужной фразы в тексте по частоте слов

import re
from collections import Counter
import os

def load_phrases(filename):
    if not os.path.exists(filename):
        return []
    with open(filename, 'r', encoding='utf-8') as f:
        return [line.strip() for line in f.readlines()]

def save_phrase(filename, phrase):
    with open(filename, 'a', encoding='utf-8') as f:
        f.write(phrase + '\n')

def count_word_frequencies(phrases):
    words = []
    for phrase in phrases:
        words.extend(re.findall(r'\b\w+\b', phrase.lower()))
    return Counter(words)

def find_least_frequent_word(phrase, word_freq):
    words = re.findall(r'\b\w+\b', phrase.lower())
    min_freq = min(word_freq[word] for word in words)
    least_frequent_words = [word for word in words if word_freq[word] == min_freq]
    return least_frequent_words[0] if least_frequent_words else None

def find_similar_phrase(phrases, word):
    base_word = re.sub(r'\W+', '', word)
    for phrase in phrases:
        if base_word in phrase.lower():
            return phrase
    return None

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

    while True:
        new_phrase = input("Вы: ").strip()
        if new_phrase in phrases:
            print("фраза уже существует")
            continue
        save_phrase(filename, new_phrase)
        phrases.append(new_phrase)

        word_freq = count_word_frequencies(phrases)
        least_frequent_word = find_least_frequent_word(new_phrase, word_freq)

        if least_frequent_word:
            similar_phrase = find_similar_phrase(phrases, least_frequent_word)
            if similar_phrase:
                print(f"бот: {similar_phrase}")
            else:
                print("Нет такой фразы")
        else:
            print("Нет слов для анализа.")

if __name__ == "__main__":
    main()



  **


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






import random

def load_phrases(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        phrases = file.readlines()
    return [phrase.strip() for phrase in phrases]

def save_phrase(file_path, phrase):
    with open(file_path, 'a', encoding='utf-8') as file:
        file.write(phrase + '\n')

def find_similar_phrases(input_phrase, phrases):
    input_words = set(input_phrase.split())
    similar_phrases = [
        phrase for phrase in phrases
        if any(word in phrase.split() for word in input_words)
    ]
    return similar_phrases[:25]

def get_random_phrase(similar_phrases, input_phrase):
    if not similar_phrases:
        return None
    # Фильтруем фразы, чтобы не повторять вводимую фразу
    filtered_phrases = [phrase for phrase in similar_phrases if phrase != input_phrase]
    if not filtered_phrases:
        return None
    # Находим фразу, длина которой примерно равна длине вводимой
    target_length = len(input_phrase)
    closest_phrase = min(filtered_phrases, key=lambda x: abs(len(x) - target_length))
    return closest_phrase

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

    while True:
        user_input = input("вы: ")
        if user_input.lower() in ['выход', 'exit']:
            break

        # Сохраняем введённую фразу в файл
        save_phrase(file_path, user_input)

        # Находим похожие фразы
        similar_phrases = find_similar_phrases(user_input, phrases)

        # Получаем случайную фразу
        bot_response = get_random_phrase(similar_phrases, user_input)

        if bot_response:
            print(f"бот: {bot_response}")
        else:
            print("бот: Извините, я не нашёл подходящей фразы.")

if __name__ == "__main__":
    main()


 **


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


Рецензии