алгоритм поиска фраз по ключевым парам слов
нужно также проверить папки вложения
и прочитать все тексты которые есть
далее найти фразы в этих текстах по следующему алгоритму:
вводим фразу input ->
большой город будущего умный ИИ наука
разбиваем нашу фразу на пары слов
с учетом склонений и корней слов
больш город
больш будущ
город будущ
город наук
город умный
умн-ый город
будущ ИИ
умный ИИ
больш наук
умн-ый наук
будущ наук
ИИ город
ИИ наук
и так далее ..
ищем фразы в которых есть все эти пары слов
** ->
import os
import re
from collections import defaultdict
def read_txt_files(directory):
texts = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.txt'):
try:
with open(os.path.join(root, file), 'r', encoding='utf-8') as f:
texts.append((file, f.read())) # Сохраняем имя файла и текст
except (UnicodeDecodeError, FileNotFoundError) as e:
print(f"Не удалось прочитать файл {file}: {e}")
return texts
def generate_word_pairs(phrase):
words = phrase.split()
pairs = set()
for i in range(len(words)):
for j in range(i + 1, len(words)):
pairs.add((words[i], words[j]))
pairs.add((words[j], words[i]))
return pairs
def search_phrases_in_texts(texts, pairs):
found_phrases = defaultdict(set) # Используем set для исключения дубликатов
for filename, text in texts:
for word1, word2 in pairs:
# Регулярное выражение для поиска слов рядом друг с другом
pattern = re.escape(word2), re.escape(word2), re.escape(word1)), re.IGNORECASE)
for line in text.splitlines():
if pattern.search(line):
found_phrases[(word1, word2)].add((filename, line.strip())) # Сохраняем имя файла и строку без пробелов
return found_phrases
# Основная функция
def main():
directory = "." # Используем текущую директорию
phrase = input("фраза поиска: ")
texts = read_txt_files(directory)
pairs = generate_word_pairs(phrase)
found_phrases = search_phrases_in_texts(texts, pairs)
for pair, occurrences in found_phrases.items():
for filename, line in occurrences:
print(f"Файл: {filename}\nСтрока: {line}\n")
if __name__ == "__main__":
main()
->
просто поместите эту программу в папку
где у вас много текстов *.txt utf-8
и введите вашу фразу поиска
import os
import re
from collections import defaultdict
def read_txt_files(directory):
texts = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.txt'):
try:
with open(os.path.join(root, file), 'r', encoding='utf-8') as f:
texts.append((root, file, f.read())) # Сохраняем имя папки, имя файла и текст
except (UnicodeDecodeError, FileNotFoundError) as e:
print(f"Не удалось прочитать файл {file}: {e}")
return texts
def generate_word_pairs(phrase):
words = phrase.split()
pairs = set()
for i in range(len(words)):
for j in range(i + 1, len(words)):
pairs.add((words[i], words[j]))
pairs.add((words[j], words[i]))
return pairs
def search_phrases_in_texts(texts, pairs):
found_phrases = defaultdict(set) # Используем set для исключения дубликатов
for folder, filename, text in texts:
for word1, word2 in pairs:
# Регулярное выражение для поиска слов рядом друг с другом
pattern = re.escape(word2), re.escape(word2), re.escape(word1)), re.IGNORECASE)
for line in text.splitlines():
if pattern.search(line):
found_phrases[(word1, word2)].add((folder, filename, line.strip())) # Сохраняем имя папки, имя файла и строку без пробелов
return found_phrases
# Основная функция
def main():
directory = "." # Используем текущую директорию
phrase = input("фраза для поиска: ")
texts = read_txt_files(directory)
pairs = generate_word_pairs(phrase)
found_phrases = search_phrases_in_texts(texts, pairs)
for pair, occurrences in found_phrases.items():
for folder, filename, line in occurrences:
print(f"Папка: {folder}\nФайл: {filename}\nСтрока: {line}\n")
if __name__ == "__main__":
main()
-> здесь программа также выводит имя папки где находится файл с текстом
**
-> программа читает текст голосом
import pyttsx3
def read_text_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
def speak_text(text):
engine = pyttsx3.init()
engine.setProperty('rate', 150) # Скорость речи
engine.setProperty('volume', 1) # Громкость (от 0.0 до 1.0)
engine.say(text)
engine.runAndWait()
if __name__ == "__main__":
file_path = 'текст.txt' # Укажите путь к вашему файлу
text = read_text_file(file_path)
speak_text(text)
-> программа перемешивает тройки слов из текста txt
и выводит их в виде случайного списка
import random
# Чтение текста из файла
with open('текст.txt', 'r', encoding='utf-8') as file:
text = file.read()
# Разделение текста на слова
words = text.split()
# Извлечение троек соседних слов
triplets = []
for i in range(len(words) - 2):
triplet = (words[i], words[i + 1], words[i + 2])
triplets.append(triplet)
# Перемешивание троек
random.shuffle(triplets)
# Вывод троек в случайном порядке
for triplet in triplets:
print(' '.join(triplet))
-> следующий алгоритм ищет фразы в тексте по фразе ввода
import re
import itertools
from pymorphy2 import MorphAnalyzer
# Функция для предобработки текста
def preprocess_text(text):
text = text.lower()
words = re.findall(r'\b\w+\b', text)
return words
# Функция для извлечения корней слов
def get_word_roots(phrase):
morph = MorphAnalyzer()
roots = [morph.parse(word)[0].normal_form for word in phrase.split()]
return roots
# Функция для генерации комбинаций корней
def generate_combinations(roots):
combinations = []
for r in range(1, len(roots) + 1):
combinations.extend([' '.join(comb) for comb in itertools.permutations(roots, r)])
return set(combinations)
# Функция для поиска фраз в тексте
def search_phrases_in_text(phrase, text):
words = preprocess_text(text)
roots = get_word_roots(phrase)
combinations = generate_combinations(roots)
found_phrases = set()
for combination in combinations:
if combination in text:
found_phrases.add(combination)
return found_phrases
# Пример использования
if __name__ == "__main__":
input_phrase = input("Введите фразу поиска: ")
with open("large_text.txt", "r", encoding="utf-8") as file:
large_text = file.read()
results = search_phrases_in_text(input_phrase, large_text)
print("Найденные фразы:", results)
* -> вот ещё другой алгоритм поиска фраз который работает
import re
from collections import Counter
# Функция для предобработки текста
def preprocess_text(text):
return text.lower()
# Функция для извлечения слов из фразы
def get_words(phrase):
return phrase.lower().split()
# Функция для поиска релевантных фраз в тексте
def search_relevant_phrases(phrase, text):
words = get_words(phrase)
pattern = r'\b(?:' + '|'.join(re.escape(word) for word in words) + r')\b'
# Находим все предложения в тексте
sentences = re.split(r'[.!?]', text)
found_phrases = []
for sentence in sentences:
if all(word in sentence for word in words):
found_phrases.append(sentence.strip())
# Сортируем фразы по количеству совпадений слов
counted_phrases = [(sentence, sum(word in sentence for word in words)) for sentence in found_phrases]
counted_phrases.sort(key=lambda x: x[1], reverse=True) # Сортировка по количеству совпадений
# Возвращаем только наиболее релевантные фразы
relevant_phrases = [phrase for phrase, count in counted_phrases if count > 0]
return relevant_phrases
# Пример использования
if __name__ == "__main__":
input_phrase = input("Введите фразу: ")
with open("фразы.txt", "r", encoding="utf-8") as file:
large_text = file.read()
results = search_relevant_phrases(input_phrase, large_text)
# Выводим найденные фразы с переводом строки
print("Найденные фразы:\n" + "\n".join(results))
Свидетельство о публикации №125050705436