словарь из групп 3 слов

Понимаю вашу задачу — нужно из всех txt-файлов в папке с программой выделить уникальные группы из трёх соседних русских слов (каждое не менее 3 букв), привести их к нижнему регистру, отбросить слова с латиницей и цифрами, отсортировать группы по первому слову и сохранить результат в три отдельных txt-файла.

вот скрипт на Python который решает эту задачу.

```python

import os
import re

def is_russian_word(word):
    # Проверяем, что слово содержит только русские буквы и длина >= 3
    return bool(re.fullmatch(r'[а-яё]{3,}', word))

def normalize_word(word):
    # Приводим к нижнему регистру и заменяем ё на е (если нужно)
    return word.lower().replace('ё', 'е')

def get_txt_files(folder):
    return [f for f in os.listdir(folder) if f.endswith('.txt')]

def extract_triples_from_text(text):
    # Разбиваем текст на слова
    words = re.findall(r'[а-яёА-ЯЁ]{3,}', text, flags=re.IGNORECASE)
    words = [normalize_word(w) for w in words if is_russian_word(normalize_word(w))]
    triples = set()
    for i in range(len(words) - 2):
        triple = (words[i], words[i+1], words[i+2])
        triples.add(triple)
    return triples

def save_triples(triples, filenames):
    # Сортируем по первому слову
    sorted_triples = sorted(triples, key=lambda x: x[0])
    # Делим на 3 части примерно поровну
    n = len(sorted_triples)
    part_size = n // 3
    parts = [
        sorted_triples[:part_size],
        sorted_triples[part_size:2*part_size],
        sorted_triples[2*part_size:]
    ]
    for i, part in enumerate(parts):
        with open(filenames[i], 'w', encoding='utf-8') as f:
            for triple in part:
                f.write(' '.join(triple) + '\n')

def main():
    folder = '.'  # текущая папка
    txt_files = get_txt_files(folder)
    all_triples = set()

    for filename in txt_files:
        with open(filename, 'r', encoding='utf-8') as f:
            text = f.read()
            triples = extract_triples_from_text(text)
            all_triples.update(triples)

    save_triples(all_triples, ['word1.txt', 'word2.txt', 'word3.txt'])
    print(f"Обработано {len(txt_files)} файлов, найдено {len(all_triples)} уникальных групп.")

if __name__ == "__main__":
    main()
```



 Как работает скрипт:

Сканирует все .txt файлы в текущей папке.
Извлекает из каждого файла слова, состоящие из русских букв длиной не менее 3, приводя их к нижнему регистру.
Формирует уникальные тройки соседних слов (триады).
Собирает все тройки из всех файлов в одно множество (чтобы избежать повторов)
Сортирует тройки по первому слову
Делит результат на три части и записывает в три файла
word1.txt, word2.txt, word3.txt



Обработано 3 файла txt,
найдено 7 515 990 уникальных групп слов
размер полученного словаря - 308 Мб


Рецензии