группы слов и фраз 4-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 и т.д. совпадениями, каждая уникальная цифра будет соответствовать новой группе.
В итоге, число созданных групп фраз зависит от сочетания этих факторов, и оно может варьироваться от запуска к запуску в зависимости от входных данных.
Свидетельство о публикации №125051200470