простой бот на повторах групп букв слов

def count_repeats(text, n):
    counts = {}
    for i in range(len(text) - n + 1):
        group = text[i:i+n]
        if group in counts:
            counts[group] += 1
        else:
            counts[group] = 1
    return counts

def find_phrase_with_most_repeats(filename, shown_phrases, last_phrase):
    max_repeats = 0
    best_phrase = ""
   
    with open(filename, 'r', encoding='utf-8') as file:
        for line in file:
            line = line.strip()
            if line in shown_phrases or line == last_phrase:
                continue

            repeats_3 = count_repeats(line, 3)
            repeats_2 = count_repeats(line, 2)
            
            total_repeats = sum(count for count in repeats_3.values() if count > 1) + \
                sum(count for count in repeats_2.values() if count > 1)
            
            if total_repeats > max_repeats:
                max_repeats = total_repeats
                best_phrase = line
   
    return best_phrase

def main():
    filename = 'текст.txt'
    shown_phrases = set()
   
    while True:
        phrase = input("ввод: ")
       
        best_phrase = find_phrase_with_most_repeats(filename, shown_phrases, phrase)
       
        if best_phrase:
            print(f"вывод: {best_phrase}")
            shown_phrases.add(best_phrase)
        else:
            print("Нет новых фраз -")
       
        with open(filename, 'a', encoding='utf-8') as file:
            file.write(phrase + '\n')

if __name__ == "__main__":
    main()


 ----------------------------->



 файл с фразами ответов -  текст.txt



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



*
добавлен вывод случайной строки  else:  если новых строк нет


import random

def count_repeats(text, n):
    counts = {}
    for i in range(len(text) - n + 1):
        group = text[i:i+n]
        if group in counts:
            counts[group] += 1
        else:
            counts[group] = 1
    return counts

def find_phrase_with_most_repeats(filename, shown_phrases, last_phrase):
    max_repeats = 0
    best_phrase = ""
   
    with open(filename, 'r', encoding='utf-8') as file:
        for line in file:
            line = line.strip()
            if line in shown_phrases or line == last_phrase:
                continue

            repeats_3 = count_repeats(line, 3)
            repeats_2 = count_repeats(line, 2)
            
            total_repeats = sum(count for count in repeats_3.values() if count > 1) + \
                sum(count for count in repeats_2.values() if count > 1)
            
            if total_repeats > max_repeats:
                max_repeats = total_repeats
                best_phrase = line
   
    return best_phrase

def main():
    filename = 'текст.txt'
    shown_phrases = set()
   
    while True:
        phrase = input("ввод: ")
       
        best_phrase = find_phrase_with_most_repeats(filename, shown_phrases, phrase)
       
        if best_phrase:
            print(f"вывод: {best_phrase}")
            shown_phrases.add(best_phrase)
        else:
            with open(filename, 'r', encoding='utf-8') as file:
                lines = file.readlines()
                random_line = random.choice(lines).strip()
                print(f"вывод: {random_line}")
               
        with open(filename, 'a', encoding='utf-8') as file:
            file.write(phrase + '\n')

if __name__ == "__main__":
    main()





--------------------------------------------------->





поиск текстов в папках рабочего стола по словам


import os
import fnmatch

def find_text_in_files(search_words, start_dir):
    # Разделяем введённые слова
    search_words = search_words.lower().split()
   
    # Проходим по всем файлам в указанной директории и её поддиректориях
    for root, dirs, files in os.walk(start_dir):
        for filename in fnmatch.filter(files, '*.txt'):
            file_path = os.path.join(root, filename)
            
            try:
                with open(file_path, 'r', encoding='utf-8') as file:
                for line in file:
                line_lower = line.lower()
                # Проверяем, содержатся ли все слова в строке
                if all(word in line_lower for word in search_words):
                print(f"Найдены слова в файле: {file_path}")
                break  # Останавливаемся, если нашли хотя бы одну такую строку
            except Exception as e:
                print(f"Не удалось прочитать файл {file_path}: {e}")

# Пример использования
search_words = input("Введите пару слов для поиска: ")
desktop_path = r"C:\Users\MSI\Desktop"
find_text_in_files(search_words, desktop_path)







похожий код  поиска текста -

import os
import fnmatch

def find_text_in_files(search_words, start_dir):
    # Разделяем введённые слова
    search_words = search_words.lower().split()
   
    # Проходим по всем файлам в указанной директории и её поддиректориях
    for root, dirs, files in os.walk(start_dir):
        for filename in fnmatch.filter(files, '*.txt'):
            file_path = os.path.join(root, filename)
            
            try:
                with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read().lower()
                # Проверяем, содержатся ли все слова в файле
                if all(word in content for word in search_words):
                print(f"Найдены слова в файле: {file_path}")
            except Exception as e:
                print(f"Не удалось прочитать файл {file_path}: {e}")

# Пример использования
search_words = input("Введите пару слов для поиска: ")
desktop_path = r"C:\Users\MSI\Desktop"
find_text_in_files(search_words, desktop_path)


Рецензии