Files
CourseWork_IRFM/instructions/INDEX_README.md
T

86 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Как работает 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
```python
prepared_terms(text)
```
Обходит текст построчно и для каждого слова, прошедшего фильтрацию, выдаёт кортеж:
```python
(лемма, номер_строки, позиция_символа, исходное_слово)
```
Нумерация строк начинается с `1`, позиция символа — 1-based, как в `processor.py`.
## Построение предметного указателя
```python
build_subject_index(text, top_n=100)
```
Алгоритм:
1. Проходит по всем словам через `prepared_terms`.
2. Считает частоты через `Counter`.
3. Запоминает первое вхождение каждой леммы через `setdefault` — первый вызов выигрывает, последующие игнорируются.
4. Берёт `top_n` самых частотных лемм.
Одна запись результата:
```python
{
"word": "срок",
"count": 3342,
"line": 34,
"char": 151,
"source_word": "срок",
}
```
## Запись результатов
Для сохранения индекса есть две функции.
```python
write_subject_index_csv(entries, path)
```
Сохраняет CSV с разделителем `;`:
```text
word;count;line;char;source_word
срок;3342;34;151;срок
```
```python
write_subject_index_json(entries, path)
```
Сохраняет JSON с отступами и без ASCII-экранирования кириллицы (`ensure_ascii=False`).
## Где используется index
В `main.py`:
```python
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`.