поиск релевантных фраз в файлах txt
и также есть файл текст.txt с тестовым текстом
нужно взять из тестового текста наборы троек соседних слов или их корней
и найти фразы в доступных файлах которые содержат эти группы слов
затем вывести эти найденные фразы
если фразы не найдены тогда искать не тройки а пары слов в тестовом тексте
вот пример кода такой программы =>
import os
import re
from collections import defaultdict
def extract_ngrams(text, n):
words = re.findall(r'\b\w+\b', text.lower())
return set(tuple(words[i:i+n]) for i in range(len(words) - n + 1))
def find_sentences_with_ngrams(text, ngrams):
sentences = re.split(r'(?<=[.!?]) +', text) # Разделяем текст на предложения
found_sentences = []
for sentence in sentences:
for ngram in ngrams:
pattern = r'\b' + r'\s+'.join(ngram) + r'\b'
if re.search(pattern, sentence):
found_sentences.append(sentence.strip())
print(f" {sentence.strip()}") # Отладочная информация
break # Если нашли хотя бы одно совпадение, переходим к следующему предложению
return found_sentences
def search_phrases_in_files(ngrams, directory):
found_phrases = defaultdict(list)
for filename in os.listdir(directory):
if filename.endswith('.txt') and filename != 'текст.txt':
print(f"Чтение файла: {filename}") # Отладочная информация
with open(os.path.join(directory, filename), 'r', encoding='utf-8') as f:
content = f.read().lower()
sentences_with_ngrams = find_sentences_with_ngrams(content, ngrams)
if sentences_with_ngrams:
found_phrases[filename].extend(sentences_with_ngrams)
return found_phrases
def main():
directory = '.'
# Считываем тестовый текст
with open(os.path.join(directory, 'текст.txt'), 'r', encoding='utf-8') as f:
test_text = f.read()
print("Тестовый текст считан.") # Отладочная информация
# Извлекаем тройки и пары слов
trigrams = extract_ngrams(test_text, 3)
bigrams = extract_ngrams(test_text, 2)
print(f"Тройки: {trigrams}") # Отладочная информация
print(f"Пары: {bigrams}") # Отладочная информация
# Ищем фразы с тройками
found_phrases = search_phrases_in_files(trigrams, directory)
# Если не нашли фразы с тройками, ищем с парами
if not any(found_phrases.values()):
print("Фразы с тройками не найдены, ищем пары...")
found_phrases = search_phrases_in_files(bigrams, directory)
# Выводим результаты
if not any(found_phrases.values()):
print("Фразы не найдены ни в одном из файлов.")
else:
for filename, phrases in found_phrases.items():
print(f'Файл: {filename}')
for phrase in phrases:
print(f'Найдена фраза: {phrase}')
if __name__ == '__main__':
main()
Свидетельство о публикации №125051607823