стемминг и поиск слов в тексте

import re
from nltk.stem import SnowballStemmer

# Инициализируем стеммер
stemmer = SnowballStemmer("russian")

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

def get_stemmed_words(text):
    words = re.findall(r'\b\w+\b', text.lower())
    return set(stemmer.stem(word) for word in words)

def find_similar_phrases(input_phrase, phrases, used_phrases):
    input_stems = get_stemmed_words(input_phrase)
    for phrase in phrases:
        if phrase in used_phrases:
            continue
        phrase_stems = get_stemmed_words(phrase)
        if input_stems & phrase_stems:  # Если есть пересечение корней
            used_phrases.add(phrase)
            return phrase
    return " фразы не найдены"

# Путь к файлу с набором фраз
file_path = 'фразы.txt'

# Загружаем фразы из файла
phrases = load_phrases(file_path)

# Множество для отслеживания уже выведенных фраз
used_phrases = set()

while True:
    # Ввод фразы пользователем
    input_phrase = input("ввод: ")


 **


поиск слов здесь происходит в файле фразы.txt и вывод одной из найденных фраз


ввод: я сначала думал что это просто так
>  ты мне говорил много но я не всё из этого смог сразу понять
ввод: я тебе ничего из этого не говорил
>  как это работает - только не во всех деталях программы
ввод: ты кажется понимаешь меня
>  ты это постоянно меняешь по ходу дела
ввод: я просто так думаю об этом
>  скажи мне это попроще  или  покороче  чтобы главное было понятно мне
ввод: разве я делаю не это
>  я и сам уже не знаю
ввод: ты должен знать всё это
>  Может, всё же ответ на мой вопрос - "да"?
ввод: я так и подумал сейчас  об этом
>  я этого не знаю пока - но это может быть и не так важно на данном этапе
ввод: это всё достаточно может быть в нашем случае и вероятно
>  Я и сам уже не знаю.  что нам делать с такими данными на входе текста
ввод: так устроен наш мир видимо или что то ещё на выходе
>  и поэтому я так часто говорю тебе слово - Нет
ввод: а ты говори что то другое мне
>  но чем это нам лучше того что мы уже имели до этого
ввод: это наверно слишком простой алгоритм действий
>  ну тогда как хочешь - я не знаю что это может значить
ввод: давай подумаем как это можно всё использовать немного лучше
>  что это может значить на самом деле в реальности нашей жизни
ввод: это лишь некоторая вероятность наших повседневных событий
>  Но разве это так много ?
ввод: это может быть и не так просто как это было до этого
>  да я это могу сделать
ввод: тогда уже делай что- нибудь что можешь в этом смысле
>  а зачем тебе это нужно
ввод: это нужно наверно не только мне
>  это нам так интересно -
ввод: тогда дай мне знать когда твои мысли обретут реальные очертания в твоей жизни
>  наверно ты прав в этом
ввод: это что такой перебор новых фраз
>  а ты разве этого хочешь
ввод: я то хочу главное чтобы этого хотел и ты тоже
>  но что ты там видишь ? -
ввод: я не знаю о чём ты мне говоришь
>  ты пойми просто что ничего ещё не всё
ввод: при чём ещё здесь это не понимаю тебя
>  маска это как интересно
ввод: ничего такого в этом я сейчас не вижу пока что
>  я этого сделать не могу
ввод: я что ты хотел сделать скажи пожалуйста
>  Скажи, кукушка, пропой!
ввод: зачем нам это нужно вообще
>  а ты всё таки скажи это
ввод: это слишком простой не нужный вывод в этом смысле понимания новых вещей
>  убери эту команду отсюда
ввод: это мне не так может быть интересно в этом случае
..





рифмы строк стихов -



def count_vowels(sentence):
    vowels = 'аеёиоуыэюяAEЁИОУЫЭЮЯ'
    return sum(1 for char in sentence if char in vowels)

def get_last_word(sentence):
    words = sentence.split()
    if words:
        return words[-1]
    return ""

def have_rhyme(word1, word2):
    # Получаем последние три буквы каждого слова
    last_3_word1 = set(word1[-3:])
    last_3_word2 = set(word2[-3:])
    # Проверяем, есть ли общие буквы
    return not last_3_word1.isdisjoint(last_3_word2)

def find_matching_lines(input_text, file_path):
    input_vowel_count = count_vowels(input_text)
    input_last_word = get_last_word(input_text).lower()
   
    with open(file_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()
       
    matching_lines = []
    for line in lines:
        line = line.strip()
        if count_vowels(line) == input_vowel_count:
            line_last_word = get_last_word(line).lower()
            if have_rhyme(input_last_word, line_last_word):
                matching_lines.append(line)
   
    return matching_lines

file_path = 'стихи.txt'

while True:
    input_text = input("ввод: ")
    if not input_text:
        break
   
    matching_lines = find_matching_lines(input_text, file_path)
    if matching_lines:
        print("Найдено: ")
        for line in matching_lines:
            print(line)
    else:
        print("Не найдено нужных строк")




вывод ->
ввод: это всё так просто словно

Найдено:
Ведь теперь нам всё возможно
на деле или на словах
миров неведомых порыв
среди безмолвия живых
всё обретает свой резон
что слышат время в унисон
искать напрасно свой исход
бог озаряет небосвод
нельзя найти исход простой
дарует бог нам разум свой
мы обретём тот свет миров
понять небес заветный дом
Ему дано увы не много
как будто знаем мы исход
день сознаём что вещий год
это всё не так и плохо
может нам давно знакомо
дай мне номер телефона

ввод: мне это нужно просто знай

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


Рецензии