Proposal: enrich existing Pure publications with multi-source metadata
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- python
- Lĩnh vực
- backend, data-engineering
Hướng nghiên cứu
Bắt đầu bằng cách đọc backend/app/services/pure_enrichment.py, đặc biệt là _apply_publication_updates và _set_volume, sau đó kiểm tra các loại job hiện có và luồng của bảng review. Một cột mốc đầu tiên là dry run không ghi dữ liệu, báo cáo các trường còn thiếu, các giá trị nguồn và những điểm không khớp với Pure cho từng ấn phẩm; phạm vi triển khai phụ thuộc vào các quyết định về chính sách ghi, mức độ tin cậy của nguồn, việc chọn bản ghi và vị trí đặt lớp connector.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Idea
doi_resolver compares publication metadata across several scholarly sources (Crossref, OpenAlex, DataCite, Europe PMC, Unpaywall, CORE), keeps provenance for every value, and can write selected values back to Pure. Today that runs one DOI at a time through a UI.
Proposal: a BackToPure job that does the same for existing Pure publications in bulk — filling gaps in records that are already there.
Sibling of #6 (which covers full-text PDFs). Depends on #2, #3 and #5.
What doi_resolver already enriches
_apply_publication_updates (backend/app/services/pure_enrichment.py:755) maps these fields onto Pure:
title, journal, abstract, volume, issue (→ journalNumber), pages, open_access_status, license, keywords, subjects, language, published_year, published_date
It also handles identifiers, and matches persons and organizations against existing Pure entities, reporting what matched and what was skipped and why.
The important risk: this overwrites
The setters replace the value in Pure whenever it differs. _set_volume (:955) is representative — it returns early only if the incoming value is identical, otherwise it writes.
That is fine in doi_resolver, where a person looks at one DOI and picks each value deliberately. It is not fine in a bulk job: a run across a faculty could silently overwrite curated Pure data with a worse value from an external source.
This needs a deliberate decision before any implementation:
- Fill-only — write only where Pure has no value. Safe, and probably the right default.
- Overwrite with review — propose differences, require a human to accept each one via the
NEEDS_REVIEW/ review-table flow. - Overwrite on trust rules — e.g. trust Crossref over OpenAlex for
pages. Most useful, most work, needs agreement on the ranking.
Recommend starting fill-only, with a dry-run report showing where sources disagree with Pure. That disagreement report is valuable on its own as a data-quality signal, separately from whether anything is written.
Scope: avoid duplicating existing jobs
BackToPure already has EXTERNAL_PERSONS and EXTERNAL_ORGS job types that enrich persons and organisations. doi_resolver's person/organisation matching overlaps with those.
This issue should therefore cover publication-level metadata only — the scalar fields and identifiers listed above. Person and organisation enrichment stays with the existing jobs unless there is a clear reason to merge them, which would be its own issue.
Fit with the job architecture
As with #6: a new JobType, identity_columns=("doi",), NEEDS_REVIEW plus the review-table for the human check, and apply / rollback for the write phase. Rollback matters more here than usual, since this touches existing curated records rather than adding new ones.
Where should this functionality live? (decide later)
#6 argues for porting code out of doi_resolver rather than depending on it, because the PDF code is small and the dependency is heavy. That reasoning does not automatically carry over here: the connector layer is six sources plus provenance and merge logic, which is a lot to maintain in two places.
There is a third option worth keeping open — BackToPure may simply be the better long-term home for this functionality.
Arguments for consolidating it here:
- BackToPure is what colleagues actually run.
doi_resolveris not in general use. - The job architecture already provides what bulk enrichment needs: a job registry,
NEEDS_REVIEWwith a review table, apply/rollback, logs, artifacts and cancellation.doi_resolverwould have to grow all of that to do this at scale. - Multi-source comparison with provenance is useful to every job type here, not only to this one. As a shared capability inside BackToPure it could also improve the research-outputs import, which currently relies on OpenAlex alone.
Arguments against, or at least for care:
doi_resolver's single-DOI UI is genuinely useful for interactive quality control, and that use case should not be lost.- It is a working, tested codebase; moving it is not free.
Possible shapes, if consolidation wins: move the connector layer into BackToPure and leave doi_resolver as a thin UI over it; or move it and retire doi_resolver; or keep both and accept the duplication.
No decision needed now. Flagging it so the choice is made deliberately when this issue is picked up, rather than defaulted into by whoever writes the first line of code.
Open questions
- Fill-only or overwrite? (see above — needs a decision before implementation)
- Which sources are trusted for which fields?
- Which Pure records are in scope — a faculty, a date range, or records missing specific fields?
- Port, depend, or consolidate? See the section above — this is the significant architectural decision in this issue, and it is deliberately left open.
Suggested first step
A dry-run job that reports, per publication: which fields Pure is missing, what each source offers, and where sources contradict Pure. No writes. That gives a concrete picture of how much this would actually improve the data before anyone commits to the write path.
- Ngôn ngữ chính
- Python
- Star
- 0
- Fork
- 0
- Merge trung bình
- 6 giờ 3 phút
- Pull request đã merge (30 ngày)
- 9
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của UtrechtUniversity/BackToPure
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
UtrechtUniversity/BackToPure#19 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
UtrechtUniversity/BackToPure#6 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
UtrechtUniversity/BackToPure#1 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của UtrechtUniversity/BackToPure
Issue tương tự
-
intake mcp-intake needs-ac needs-human-review priority:medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
Ikalus1988/MisakaNet#3848 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
521xueweihan/HelloGitHub#4105 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
igormcsouza/bookloud#54 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
aws-samples/sample-per-model-bedrock#526 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
ok-oldking/ok-wuthering-waves#1802 ·
Maintainer thường phản hồi trong vòng 2 ngày