feat(parsers): CyberLeninka full_text из OCR-фрагментов поиска (без доп. запросов)
Поисковый API КиберЛенинки отдаёт поле "ocr" — список OCR-фрагментов текста статьи (начало + фрагмент с ключевыми словами), прямо в ответе search. Раньше transform() игнорировал его (full_text всегда None), и Winnowing-отпечатки (L1) считались только по короткой annotation (~150 симв.) либо не считались вовсе, если аннотации не было. Теперь ocr (список) склеивается, чистится (<b>/сущности) и идёт в full_text — add_document уже умеет: `text = full_text or abstract`. Даёт заметно более точные L1-отпечатки для ВСЕХ будущих CyberLeninka-документов бесплатно — 0 доп. HTTP- запросов, работает и там, где annotation вообще пустая (проверено вживую). 2 новых теста (ocr→full_text, отсутствие ocr→None). Тестов в файле: 7. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -51,3 +51,14 @@ def test_transform_handles_string_authors():
|
||||
|
||||
def test_transform_empty_without_id_or_link():
|
||||
assert CyberLeninkaParser().transform({"name": "x"}) == {}
|
||||
|
||||
|
||||
def test_transform_uses_ocr_as_full_text():
|
||||
raw = dict(SAMPLE, ocr=["Первый <b>фрагмент</b> статьи.", "Второй & фрагмент."])
|
||||
t = CyberLeninkaParser().transform(raw)
|
||||
assert t["full_text"] == "Первый фрагмент статьи. Второй & фрагмент."
|
||||
|
||||
|
||||
def test_transform_full_text_none_without_ocr():
|
||||
assert CyberLeninkaParser().transform(SAMPLE)["full_text"] is None
|
||||
assert CyberLeninkaParser().transform(dict(SAMPLE, ocr=[]))["full_text"] is None
|
||||
|
||||
Reference in New Issue
Block a user