сортировка фраз файла по ключевым словам
сортировка фраз по контенту содержания их ключевых слов в тексте
имеем список тем текста по контенту в файле - темы. txt
формат данных файла такой :
название темы
набор ключевых слов (через пробел)
название темы
набор ключевых слов
файл с текстом и набором фраз в каждой строке - фразы txt
если программа находит ключевые слова в строке нашего файла с текстом
хотя бы два слова или их корни
тогда она добавляет эту строку в данную тему
таким образом на выходе получаем список
1 название темы
набор фраз
2 название темы
набор других фраз
и так далее пока не проверим все строки на наличие групп ключевых фраз
по каждой теме из файла с ключевыми словами в файле - темы. txt
Для решения вашей задачи можно написать программу на Python, которая будет читать данные из двух файлов и сортировать фразы по темам на основе ключевых слов.
Вот пример реализации данного алгоритма :
*
import re
from collections import defaultdict
def load_topics(filename):
topics = {}
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
for i in range(0, len(lines), 2):
topic_name = lines[i].strip()
keywords = lines[i + 1].strip().split()
topics[topic_name] = keywords
return topics
def load_phrases(filename):
with open(filename, 'r', encoding='utf-8') as file:
phrases = [line.strip() for line in file.readlines()]
return phrases
def find_matching_phrases(topics, phrases):
sorted_phrases = defaultdict(list)
for phrase in phrases:
for topic, keywords in topics.items():
# Проверяем, сколько ключевых слов присутствует в фразе
matches = sum(1 for keyword in keywords if re.search(r'\b' + re.escape(keyword) + r'\b', phrase, re.IGNORECASE))
if matches >= 2: # Если найдено хотя бы 2 ключевых слова
sorted_phrases[topic].append(phrase)
return sorted_phrases
def main():
topics_file = 'темы.txt'
phrases_file = 'фразы.txt'
topics = load_topics(topics_file)
phrases = load_phrases(phrases_file)
sorted_phrases = find_matching_phrases(topics, phrases)
# Выводим результат
for topic, phrases in sorted_phrases.items():
print(f"Тема: {topic}")
for phrase in phrases:
print(f" - {phrase}")
print()
if __name__ == "__main__":
main()
Объяснение содержания этого кода:
load_topics:
Эта функция загружает темы и ключевые слова из файла темы.txt. Она читает файл построчно и создает словарь, где ключами являются названия тем, а значениями — списки ключевых слов.
load_phrases:
Эта функция загружает фразы из файла фразы.txt и возвращает их в виде списка.
find_matching_phrases:
Эта функция сравнивает каждую фразу с ключевыми словами каждой темы.
Если в фразе найдены хотя бы два ключевых слова, она добавляет эту фразу в список соответствующей темы.
main: Основная функция, которая объединяет все части. Она загружает темы и фразы, находит совпадающие фразы и выводит результат на экран.
Использование:
Создайте файл темы.txt с темами и ключевыми словами в описанном вами формате.
Создайте файл фразы.txt с фразами, которые нужно отсортировать.
Запустите программу, и она выведет отсортированные фразы по темам.
Не забудьте установить Python и создать необходимые файлы перед запуском кода.
можно немного усложнить данный код
чтобы программа искала фразы в нескольких файлах с текстом txt
которые находятся в этой же папке где и сама программа
*
Мы можем модифицировать программу так, чтобы она искала фразы в нескольких текстовых файлах, находящихся в той же папке, что и сама программа. Мы будем использовать модуль os для получения списка всех файлов с расширением .txt в текущей директории.
Вот обновленный код нашей программы :
*
import re
import os
from collections import defaultdict
def load_topics(filename):
topics = {}
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
for i in range(0, len(lines), 2):
topic_name = lines[i].strip()
keywords = lines[i + 1].strip().split()
topics[topic_name] = keywords
return topics
def load_phrases_from_files(directory):
phrases = []
# Получаем список всех файлов .txt в указанной директории
for filename in os.listdir(directory):
if filename.endswith('.txt') and filename != 'темы.txt':
with open(os.path.join(directory, filename), 'r', encoding='utf-8') as file:
phrases.extend([line.strip() for line in file.readlines()])
return phrases
def find_matching_phrases(topics, phrases):
sorted_phrases = defaultdict(list)
for phrase in phrases:
for topic, keywords in topics.items():
# Проверяем, сколько ключевых слов присутствует в фразе
matches = sum(1 for keyword in keywords if re.search(r'\b' + re.escape(keyword) + r'\b', phrase, re.IGNORECASE))
if matches >= 2: # Если найдено хотя бы 2 ключевых слова
sorted_phrases[topic].append(phrase)
return sorted_phrases
def main():
topics_file = 'темы.txt'
directory = '.' # Текущая директория
topics = load_topics(topics_file)
phrases = load_phrases_from_files(directory)
sorted_phrases = find_matching_phrases(topics, phrases)
# Выводим результат
for topic, phrases in sorted_phrases.items():
print(f"Тема: {topic}")
for phrase in phrases:
print(f" - {phrase}")
print()
if __name__ == "__main__":
main()
Объяснение изменений в коде :
load_phrases_from_files:
Эта новая функция загружает фразы из всех файлов с расширением .txt в указанной директории (в данном случае, текущей директории).
Она игнорирует файл темы.txt, чтобы избежать его обработки как текстового файла с фразами.
Использование модуля os: Мы используем os.listdir(directory) для получения списка всех файлов в директории и проверяем, заканчивается ли имя файла на .txt.
Основная логика осталась прежней: Мы загружаем темы из файла темы.txt, загружаем фразы из всех текстовых файлов и сортируем их по темам, как и прежде.
Использование:
Создайте файл темы.txt с темами и ключевыми словами.
Поместите несколько файлов с фразами в ту же папку, что и скрипт.
Запустите программу, и она выведет отсортированные фразы по темам.
Свидетельство о публикации №124111706507