Files
CourseWork_IRFM/instructions/INDEX_README.md
T

3.0 KiB
Raw Blame History

Как работает index

Index находится в modules/index.py. Его задача: взять исходный текст УК РФ и построить предметный указатель — топ-N наиболее частотных лемм с позицией первого вхождения.

Модуль использует good_words_from_line из modules/processor.py и ничего не знает о загрузке или обходе страниц.

Что делает index

  1. Обходит текст построчно и извлекает «хорошие» слова через processor.py.
  2. Считает частоту каждой леммы.
  3. Запоминает, где лемма встретилась впервые.
  4. Возвращает топ-N по частоте.
  5. Сохраняет результат в CSV и JSON.

Генератор prepared_terms

prepared_terms(text)

Обходит текст построчно и для каждого слова, прошедшего фильтрацию, выдаёт кортеж:

(лемма, номер_строки, позиция_символа, исходное_слово)

Нумерация строк начинается с 1, позиция символа — 1-based, как в processor.py.

Построение предметного указателя

build_subject_index(text, top_n=100)

Алгоритм:

  1. Проходит по всем словам через prepared_terms.
  2. Считает частоты через Counter.
  3. Запоминает первое вхождение каждой леммы через setdefault — первый вызов выигрывает, последующие игнорируются.
  4. Берёт top_n самых частотных лемм.

Одна запись результата:

{
    "word": "срок",
    "count": 3342,
    "line": 34,
    "char": 151,
    "source_word": "срок",
}

Запись результатов

Для сохранения индекса есть две функции.

write_subject_index_csv(entries, path)

Сохраняет CSV с разделителем ;:

word;count;line;char;source_word
срок;3342;34;151;срок
write_subject_index_json(entries, path)

Сохраняет JSON с отступами и без ASCII-экранирования кириллицы (ensure_ascii=False).

Где используется index

В main.py:

subject_index = build_subject_index(original_text, top_n=100)
write_subject_index_csv(subject_index, output_dir / "uk_rf_subject_index.csv")
write_subject_index_json(subject_index, output_dir / "uk_rf_subject_index.json")

Входные данные — исходный текст статей до лемматизации (original_text), а не подготовленный. Лемматизация происходит внутри через processor.py.