Skip to content

Commit ea4853a

Browse files
author
Ang
committed
fix: two-layer scoring (#27/#3), simplify identifier routing + DataCite fallback (#23), clarify template semantics (#16)
1 parent 06c7abf commit ea4853a

11 files changed

Lines changed: 199 additions & 432 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ OneCite solves this by accepting **any mix of identifiers and text queries** and
6969
| **Multi-Source Lookup** | Queries CrossRef, arXiv, PubMed, Semantic Scholar, Google Books, and others for every entry. |
7070
| **Many Identifier Types** | Accepts DOI, PMID, arXiv ID, ISBN, GitHub URL, Zenodo DOI, or plain text queries. |
7171
| 🎛️ **Interactive Mode** | Manually select the correct entry when multiple potential matches are found. |
72-
| **Custom Templates** | YAML-based templates to control which fields are collected and how entries are typed. |
72+
| **Custom Templates** | YAML-based presets that provide a fallback BibTeX entry type when auto-detection is inconclusive. |
7373

7474

7575
## 🌐 Data Sources

onecite/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def create_parser() -> argparse.ArgumentParser:
8181
process_parser.add_argument(
8282
'--template',
8383
default='journal_article_full',
84-
help='Template to use (default: journal_article_full)'
84+
help='Fallback BibTeX entry-type preset when auto-detection is inconclusive (default: journal_article_full)'
8585
)
8686
process_parser.add_argument(
8787
'--output-format',

onecite/core.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ class CompletedEntry(TypedDict, total=False):
5555

5656

5757
class TemplateLoader:
58-
"""Loads YAML template files that control citation field collection.
58+
"""Loads YAML template files that provide fallback BibTeX entry types.
5959
60-
Templates define which bibliographic fields to collect and how
61-
entries are typed (e.g. article, inproceedings).
60+
Templates are used when auto-detection cannot determine the entry type
61+
from metadata. They specify which entry_type (e.g. @article, @book)
62+
to use as a fallback and which fields are expected.
6263
"""
6364

6465
def __init__(self, templates_dir: Optional[str] = None):
@@ -84,7 +85,8 @@ def load_template(self, template_name: str) -> Dict[str, Any]:
8485
8586
Returns:
8687
A dictionary describing the template with keys ``name``,
87-
``entry_type``, and ``fields``.
88+
``entry_type``, and ``fields``. The template provides a
89+
fallback entry type when auto-detection is inconclusive.
8890
"""
8991
template_path = os.path.join(self.templates_dir, f"{template_name}.yaml")
9092

@@ -110,11 +112,11 @@ def _get_default_template(self) -> Dict[str, Any]:
110112
{'name': 'title', 'required': True},
111113
{'name': 'journal', 'required': True},
112114
{'name': 'year', 'required': True},
113-
{'name': 'volume', 'required': False, 'source_priority': ['crossref_api', 'user_prompt']},
114-
{'name': 'number', 'required': False, 'source_priority': ['crossref_api', 'user_prompt']},
115-
{'name': 'pages', 'required': False, 'source_priority': ['crossref_api', 'google_scholar_scraper']},
116-
{'name': 'publisher', 'required': False, 'source_priority': ['crossref_api', 'user_prompt']},
117-
{'name': 'doi', 'required': False, 'source_priority': ['crossref_api']},
115+
{'name': 'volume', 'required': False},
116+
{'name': 'number', 'required': False},
117+
{'name': 'pages', 'required': False},
118+
{'name': 'publisher', 'required': False},
119+
{'name': 'doi', 'required': False},
118120
]
119121
}
120122

onecite/pipeline.py

Lines changed: 186 additions & 337 deletions
Large diffs are not rendered by default.

onecite/templates/book.yaml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,12 @@ fields:
1111
required: true
1212
- name: edition
1313
required: false
14-
source_priority:
15-
- crossref_api
16-
- google_books_api
17-
- user_prompt
1814
- name: isbn
1915
required: false
20-
source_priority:
21-
- crossref_api
22-
- google_books_api
2316
- name: address
2417
required: false
25-
source_priority:
26-
- crossref_api
27-
- google_books_api
28-
- user_prompt
2918
- name: pages
3019
required: false
31-
source_priority:
32-
- crossref_api
33-
- google_books_api
3420
- name: doi
3521
required: false
36-
source_priority:
37-
- crossref_api
3822

onecite/templates/conference_paper.yaml

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,9 @@ fields:
1111
required: true
1212
- name: pages
1313
required: false
14-
source_priority:
15-
- crossref_api
16-
- google_scholar_scraper
1714
- name: organization
1815
required: false
19-
source_priority:
20-
- crossref_api
21-
- user_prompt
2216
- name: publisher
2317
required: false
24-
source_priority:
25-
- crossref_api
26-
- user_prompt
2718
- name: doi
2819
required: false
29-
source_priority:
30-
- crossref_api

onecite/templates/dataset.yaml

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,9 @@ fields:
1111
required: true
1212
- name: doi
1313
required: false
14-
source_priority:
15-
- zenodo_api
16-
- datacite_api
17-
- figshare_api
1814
- name: url
1915
required: false
20-
source_priority:
21-
- zenodo_api
22-
- figshare_api
23-
- datacite_api
2416
- name: version
2517
required: false
26-
source_priority:
27-
- zenodo_api
28-
- figshare_api
2918
- name: note
3019
required: false

onecite/templates/journal_article_full.yaml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,11 @@ fields:
1111
required: true
1212
- name: volume
1313
required: false
14-
source_priority:
15-
- crossref_api
16-
- user_prompt
1714
- name: number
1815
required: false
19-
source_priority:
20-
- crossref_api
21-
- user_prompt
2216
- name: pages
2317
required: false
24-
source_priority:
25-
- crossref_api
26-
- google_scholar_scraper
2718
- name: publisher
2819
required: false
29-
source_priority:
30-
- crossref_api
31-
- user_prompt
3220
- name: doi
3321
required: false
34-
source_priority:
35-
- crossref_api

onecite/templates/journal_article_with_abstract.yaml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,13 @@ fields:
1111
required: true
1212
- name: abstract
1313
required: false
14-
source_priority:
15-
- crossref_api
16-
- pubmed_api
1714
- name: volume
1815
required: false
19-
source_priority:
20-
- crossref_api
21-
- user_prompt
2216
- name: number
2317
required: false
24-
source_priority:
25-
- crossref_api
26-
- user_prompt
2718
- name: pages
2819
required: false
29-
source_priority:
30-
- crossref_api
31-
- google_scholar_scraper
3220
- name: publisher
3321
required: false
34-
source_priority:
35-
- crossref_api
36-
- user_prompt
3722
- name: doi
3823
required: false
39-
source_priority:
40-
- crossref_api

onecite/templates/software.yaml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,11 @@ fields:
99
required: true
1010
- name: version
1111
required: false
12-
source_priority:
13-
- github_api
14-
- zenodo_api
1512
- name: url
1613
required: false
17-
source_priority:
18-
- github_api
19-
- zenodo_api
2014
- name: doi
2115
required: false
22-
source_priority:
23-
- zenodo_api
24-
- crossref_api
2516
- name: publisher
2617
required: false
27-
source_priority:
28-
- github_api
29-
- zenodo_api
3018
- name: note
3119
required: false

0 commit comments

Comments
 (0)