группы слов и фраз 4-20

нужен алгоритм, который фразы любого текста делит на группы по 20 штук
(это число можно изменить при необходимости)

у нас есть файл н-слова.txt
в нем есть группы слов в таком формате
слово1 - слово2 - слово3 - слово4
этих групп может быть много
и есть файл текст.txt в котором нужно отсортировать фразы строк на группы
в каждой группе фраз должно быть максимальное число слов из одной из групп слов файла н-слова.txt
( точнее и также корней этих слов )
отсортированные группы фраз записать в файл сорт-фразы.txt


Ниже приведен пример алгоритма, который выполняет необходимые операции нашего алгоритма сортировки фраз текста:

Читает группы слов из файла н-слова.txt.
Читает фразы из файла текст.txt.
Сортирует фразы на группы по 20 штук, основываясь на максимальном количестве совпадений с группами слов.
Записывает отсортированные группы фраз в файл сорт-фразы.txt.


- пример этого кода на питоне:


import re
from collections import defaultdict

def load_word_groups(filename):
    word_groups = []
    with open(filename, 'r', encoding='utf-8') as file:
        for line in file:
            # Разбиваем строку на слова и добавляем в список групп
            words = line.strip().split(' - ')
            word_groups.append(set(words))  # Используем set для быстрого поиска
    return word_groups

def load_phrases(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        return [line.strip() for line in file]

def count_matches(phrase, word_groups):
    # Подсчитываем количество совпадений с группами слов
    phrase_words = set(re.findall(r'\w+', phrase.lower()))  # Извлекаем слова из фразы
    max_count = 0
    for group in word_groups:
        count = len(phrase_words & group)  # Пересечение слов фразы и группы
        max_count = max(max_count, count)
    return max_count

def group_phrases(phrases, word_groups):
    grouped_phrases = defaultdict(list)
   
    for phrase in phrases:
        match_count = count_matches(phrase, word_groups)
        grouped_phrases[match_count].append(phrase)

    # Сортируем группы по количеству совпадений и ограничиваем до 20 фраз в группе
    sorted_groups = []
    for count in sorted(grouped_phrases.keys(), reverse=True):
        phrases = grouped_phrases[count][:20]  # Берем только первые 20 фраз
        if phrases:
            sorted_groups.append(phrases)
   
    return sorted_groups

def save_sorted_phrases(sorted_groups, filename):
    with open(filename, 'w', encoding='utf-8') as file:
        for group in sorted_groups:
            for phrase in group:
                file.write(phrase + '\n')
            file.write('\n')  # Разделяем группы пустой строкой

def main():
    word_groups = load_word_groups('н-слова.txt')
    phrases = load_phrases('текст.txt')
    sorted_groups = group_phrases(phrases, word_groups)
    save_sorted_phrases(sorted_groups, 'сорт-фразы.txt')

if __name__ == '__main__':
    main()




Объяснение кода:
load_word_groups: Загружает группы слов из файла и сохраняет их в списке, используя множества для быстрого поиска.

load_phrases: Загружает фразы из файла.

count_matches: Подсчитывает количество совпадений слов в фразе с группами слов.

group_phrases: Группирует фразы по количеству совпадений и ограничивает каждую группу до 20 фраз.

save_sorted_phrases: Записывает отсортированные группы фраз в файл.

main: Основная функция, которая запускает процесс.


Запуск кода
Сохраните этот код в файл, например, sort_phrases.py, и запустите его, предварительно убедившись, что файлы н-слова.txt и текст.txt находятся в одной директории с вашим скриптом.

Результат с группами фраз будет записан в файл сорт-фразы.txt.





Число созданных групп фраз в представленном алгоритме зависит от следующих факторов:

Количество фраз в файле текст.txt: Чем больше фраз в этом файле, тем больше групп может быть создано. Если, например, в файле 100 фраз, теоретически можно создать до 100 групп, если каждая фраза будет иметь уникальное количество совпадений.

Количество групп слов в файле н-слова.txt: Если в этом файле много групп, то у фраз может быть больше возможностей для совпадений. Это может привести к более разнообразному распределению фраз по группам.

Количество совпадений: Алгоритм группирует фразы по количеству совпадений с группами слов. Если несколько фраз имеют одинаковое количество совпадений, они будут помещены в одну группу. Таким образом, если много фраз имеют одинаковые совпадения, количество групп может уменьшиться.

Лимит на количество фраз в группе: В алгоритме установлено ограничение на 20 фраз в каждой группе. Это означает, что даже если у вас есть много фраз с одинаковым количеством совпадений, в одну группу попадет только 20 из них. Если совпадений много, то это может привести к созданию большего числа групп.

Разнообразие совпадений: Если фразы имеют разнообразное количество совпадений с группами слов, то это также может увеличить количество групп. Например, если у вас есть фразы с 0, 1, 2, 3 и т.д. совпадениями, каждая уникальная цифра будет соответствовать новой группе.

В итоге, число созданных групп фраз зависит от сочетания этих факторов, и оно может варьироваться от запуска к запуску в зависимости от входных данных.


Рецензии