Skip to content

feat(importer): autodetekcja języka pracy także spoza {en,es,pl} (FD#389)#419

Open
mpasternak wants to merge 1 commit into
devfrom
fix-fd389-autodetekcja-jezyka
Open

feat(importer): autodetekcja języka pracy także spoza {en,es,pl} (FD#389)#419
mpasternak wants to merge 1 commit into
devfrom
fix-fd389-autodetekcja-jezyka

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Zgłoszenie

Fixes Freshdesk FD#389https://iplweb.freshdesk.com/a/tickets/389
(Importer publikacji — autodetekcja języka pracy)

Problem

Importer publikacji już wykrywa język pracy (_detect_language
heurystyka polskich znaków diakrytycznych + langdetect). Wykryty (lub
podany przez źródło: CrossRef language, PBN mainLanguage, BibTeX
language) kod był jednak mapowany na obiekt Jezyk wyłącznie przez
Komparator.porownaj_language, które twardo odrzuca każdy kod spoza
statycznego enuma Jezyk.SKROT_CROSSREF = {en, es, pl}
(crossref_bpp/core.py:586).

Skutek: publikacja niemiecka / francuska / rosyjska / ukraińska (częste w
polskich bibliografiach) była wykrywana, ale jej język nie był
przypisywany
— pole zostawało puste, mimo że instalacja miała pasujący
rekord Jezyk. Co ciekawe, ścieżka języka streszczeń już używała
łagodnego dopasowania (_resolve_jezyk), więc zachowanie było niespójne.

Rozwiązanie

W _auto_match_type_and_language (importer_publikacji/tasks.py): gdy
Komparator.porownaj_language nie zwróci dopasowania, dokładamy fallback
do _resolve_jezyk(language_code) — dopasowanie po skrot_crossref, ta
sama logika, której importer używa już dla języka streszczeń.

  • Bez migracji, bez zmiany enuma SKROT_CROSSREF (zmiana TextChoices
    wygenerowałaby migrację).
  • Zachowuje dotychczasowe zachowanie dla {en, es, pl} (komparator nadal
    pierwszy).
  • Język podany przez źródło ma pierwszeństwo nad heurystyką (bez zmian).

Testy (TDD)

Nowy src/importer_publikacji/tests/test_repro_fd389.py — najpierw
czerwony, potem zielony:

  1. język de podany przez źródło + istnieje Jezyk(skrot_crossref="de")
    session.jezyk przypisany,
  2. język de wykryty (patch _detect_language) → przypisany,
  3. regression guard: kod z enuma (en) nadal dopasowuje się przez
    Komparator.

Cała aplikacja: 416 passed, 1 skipped (bez regresji).

🤖 Generated with Claude Code

…389)

Wykrywanie języka pracy w importerze już istniało, ale mapowanie kodu na
obiekt Jezyk szło wyłącznie przez Komparator.porownaj_language, które
twardo odrzuca każdy kod spoza statycznego enuma Jezyk.SKROT_CROSSREF
({en, es, pl}). W efekcie publikacja niemiecka/francuska/rosyjska/
ukraińska była wykrywana, lecz język pozostawał pusty — mimo istnienia
pasującego rekordu Jezyk.

Po porażce komparatora dokładamy łagodny fallback _resolve_jezyk
(dopasowanie po skrot_crossref) — ta sama logika, której importer używa
już dla języka streszczeń. Bez migracji i bez zmiany enuma.

Fixes Freshdesk FD#389
https://iplweb.freshdesk.com/a/tickets/389

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant