сортировка фраз файла по ключевым словам

ИИ - Как вам помочь сегодня?



сортировка фраз по контенту содержания их ключевых слов в тексте

имеем список тем текста по контенту в файле - темы. 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 с темами и ключевыми словами.
Поместите несколько файлов с фразами в ту же папку, что и скрипт.
Запустите программу, и она выведет отсортированные фразы по темам.


Рецензии