feat(ops): углубление индексации КиберЛенинки + общий store_full_text
Проверка глубины вскрыла главную слабость корпуса: 99 883 документа
КиберЛенинки (56% базы) имеют в среднем 30 отпечатков — заголовок с
аннотацией. Списывание из тела русской статьи L1 не находит, хотя сервис
рассчитан именно на русских студентов. У PMC и arXiv глубина 97% и 94%.
Отдельно: мерить глубину по minio_key оказалось неверно — PMC кладёт тело
статьи в отпечатки при заливке, не сохраняя файл, поэтому «27.5% с полным
текстом» занижало картину для одних источников и скрывало провал у другой.
Честный показатель — число отпечатков на документ, по нему всё и пересчитано.
- backfill_cyberleninka_pdf.py: PDF берётся прямым адресом {url}/pdf (докачка
по обычному url бесполезна — там HTML, замер 0 из 8). Проверено на 50:
углублено 44, в среднем 23 тыс. символов, глубина 30 → 1453 отпечатка;
- backfill_pmc_fulltext.py: сохранение тела статьи из API в MinIO (отпечатки
там уже глубокие — скрипт нужен для отчётов и подсветки, не для детекции);
- store_full_text вынесен из index.enrich_full_text: один путь «текст получен →
MinIO + пересчёт L1 + обновление L2» для задачи докачки и для бэкфиллов.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,21 +12,32 @@
|
||||
1490 из 1500 на источник): прирост дают только новые публикации. Реальный
|
||||
рост корпуса — поднятый `limit` или новые темы, а не повторный запуск.
|
||||
|
||||
### Глубина корпуса — чем реально располагает детекция (замер 2026-08-28)
|
||||
### Глубина индексации — чем реально располагает детекция (замер 2026-08-28)
|
||||
|
||||
| Что | Значение | Следствие |
|
||||
|-----|----------|-----------|
|
||||
| Документов | 177 147 | — |
|
||||
| С полным текстом в MinIO | 48 848 (27.5%) | arXiv 93.7%, КиберЛенинка 27.8%, PMC 17.0%, OpenAlex 12.7% |
|
||||
| Отпечатков < 500 на документ | 128 246 (79%) | по этим документам L1 сравнивает фактически аннотацию, а не тело статьи |
|
||||
| Векторов в индексе (L3) | 93 053 (52.5%) | остальные документы семантический поиск не видит |
|
||||
| Ложных отметок `faiss_id` | 60 993 | вектора нет, но документ считается векторизованным — см. `faiss_reconcile.py` |
|
||||
Мерить глубину по `minio_key` (сохранён ли текст в MinIO) **нельзя**: PMC,
|
||||
например, кладёт тело статьи в отпечатки прямо при заливке, не сохраняя файл.
|
||||
Честный показатель — **число отпечатков на документ**: аннотация даёт десятки,
|
||||
полный текст — тысячи.
|
||||
|
||||
Это не поломка, а честная граница возможностей: **система ловит списывание из
|
||||
того, что у неё есть целиком.** Скопированное из тела статьи, от которой в базе
|
||||
только аннотация, L1 не найдёт. Рычаги углубления: `FETCH_FULL_TEXT=true`
|
||||
(докачка OA-PDF, уже включена), приоритет источников с полным текстом (PMC,
|
||||
arXiv), и добор эмбеддингов для L3.
|
||||
| Источник | Документов | Глубоко (≥500 отпечатков) | Среднее отпечатков |
|
||||
|----------|-----------:|--------------------------:|-------------------:|
|
||||
| КиберЛенинка | 99 883 | 0 (0.0%) | **30** |
|
||||
| OpenAlex | 49 276 | 6 240 (12.7%) | 907 |
|
||||
| PMC | 14 910 | 14 519 (97.4%) | 2 208 |
|
||||
| arXiv | 13 077 | 12 236 (93.6%) | 4 035 |
|
||||
|
||||
**Главная слабость — русская часть корпуса.** 56% базы (КиберЛенинка) в индексе
|
||||
представлено заголовком и аннотацией: списывание из тела русской статьи L1 не
|
||||
найдёт, хотя сервис рассчитан именно на русских студентов. Причина не в
|
||||
алгоритме: search API отдаёт только аннотацию и OCR-фрагмент (~700 символов), а
|
||||
`url` ведёт на HTML-страницу — докачка по нему бесполезна (замер: 0 из 8).
|
||||
Лечится `scripts/ops/backfill_cyberleninka_pdf.py`: PDF доступен прямым адресом
|
||||
`{url}/pdf` (проверено: 44 из 50, в среднем 23 тыс. символов, глубина 30 → ~1450
|
||||
отпечатков). Полный прогон — около 48 часов при вежливом 1 req/s и порядка
|
||||
+220 млн строк в `fingerprints` (~22 ГБ; место на сервере БД проверять заранее).
|
||||
|
||||
Покрытие L3 на ту же дату — 93 053 вектора (52.5% корпуса); ещё 60 993 документа
|
||||
числились векторизованными ошибочно, отметки сброшены `faiss_reconcile.py`.
|
||||
- OpenAlex при массовом запуске упирается в лимит вежливого пула (10 req/s
|
||||
на mailto, общий для всех воркеров) — пауза между страницами поднята до 1с.
|
||||
- Добавлен 4-й парсер — **PMC** (PubMed Central, `scripts/parsers/pmc.py`),
|
||||
|
||||
Reference in New Issue
Block a user