You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: align README and architecture output examples with v0.2 (0.9.23) (#8)
Update the embedded output examples to match what extraction actually
produces:
- publisher and publicationYear shown as null (platform-owned, set at publish)
- rightsList removed (stripped from output); publisher dropped from the ROR
canonicalisation note and the pipeline-uses list
- descriptionType shown as Other (set deterministically; no longer asked of
the model)
- affiliation identifier casing corrected to schemeURI
- formats added (derived from the file extension)
- architecture caption examples fixed to the {id, caption} shape
Docs only; patch bump to 0.9.23.
Copy file name to clipboardExpand all lines: README.md
+10-18Lines changed: 10 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,8 +63,7 @@ The pipeline uses:
63
63
-**Qwen2-VL-7B** for vision-based OCR of image posters
64
64
-**pdfplumber** for layout-aware PDF text extraction
65
65
-**lingua-language-detector** for ISO 639-1 language detection on body text (overrides any value the model emits — body text beats metadata-fragment guessing)
66
-
-**ROR** (`https://api.ror.org`) for affiliation and publisher canonicalisation; matched names get a ROR identifier attached
67
-
-**SPDX** matching (with integer-exact version handling) for license normalisation in `rightsList`
66
+
-**ROR** (`https://api.ror.org`) for affiliation canonicalisation; matched names get a ROR identifier attached
68
67
69
68
## Quick Start
70
69
@@ -124,34 +123,25 @@ Output conforms to the [poster-json-schema](https://github.com/fairdataihub/post
-`language` is detected from the raw body text (lingua heuristic). Returns null when text is too short (<200 chars / <50 non-ASCII codepoints) or the detector is unsure.
169
160
-`researchField` must be one of the four OpenAlex top-level domains: `Health Sciences`, `Life Sciences`, `Physical Sciences`, `Social Sciences`. Null when the model can't pick one confidently.
170
-
-`affiliation` and `publisher` get ROR enrichment when the matcher returns a high-confidence chosen result. Strings without a confident match pass through unchanged. Set `POSTER2JSON_ROR=0` to disable.
171
-
-`rightsList` entries are matched against an SPDX table; the matcher is conservative on version numbers (e.g. `CC-BY-4.0` and `CC-BY-4.1` are never confused).
161
+
-`affiliation` gets ROR enrichment when the matcher returns a high-confidence chosen result. Strings without a confident match pass through unchanged. Set `POSTER2JSON_ROR=0` to disable.
162
+
-`publisher` and `publicationYear` are always emitted as `null`. They are platform-owned and set when the poster is published, not by extraction.
163
+
-`formats` is derived from the input file's extension, not the model.
Copy file name to clipboardExpand all lines: docs/architecture.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -127,23 +127,23 @@ ORCIDs are extracted from poster text via regex, then matched to the appropriate
127
127
128
128
### ROR enrichment
129
129
130
-
Affiliation names are looked up against the [ROR API](https://ror.org). When a match is found, `affiliationIdentifier`, `affiliationIdentifierScheme`, and `schemeUri` are populated.
130
+
Affiliation names are looked up against the [ROR API](https://ror.org). When a match is found, `affiliationIdentifier`, `affiliationIdentifierScheme`, and `schemeURI` are populated.
131
131
132
-
### Publisher enrichment
132
+
### Publisher
133
133
134
-
If a publisher name is extracted, it is also looked up against ROR to populate `publisherIdentifier`, `publisherIdentifierScheme`, and `schemeURI`.
134
+
`publisher` is always emitted as `null`. It is platform-owned and assigned when the poster is published (the hosting repository), so extraction does not populate or enrich it.
135
135
136
136
### Language detection
137
137
138
138
The `language` field is detected from the raw poster text using the `lingua` language detector, overwriting any value the LLM may have produced. The result is an ISO 639-1 code (e.g., "en"), or null when the text is too short (<200 chars / <50 non-ASCII codepoints) or the detector is unsure.
139
139
140
140
### Description type
141
141
142
-
The LLM prompt instructs the model to classify `descriptionType` based on poster content. It defaults to "Abstract" for poster summaries, but the model can choose from the full set of DataCite description types (Abstract, Methods, SeriesInformation, TableOfContents, TechnicalInfo, Other).
142
+
`descriptionType` is not requested from the model; it is set deterministically to `"Other"`, since the description is a machine-generated summary. `"Abstract"` is reserved for an author-provided formal abstract, which the platform attaches downstream.
143
143
144
-
### Rights normalization
144
+
### Rights
145
145
146
-
License strings from the LLM are canonicalized to SPDX form. This includes alias matching, Creative Commons URL parsing, and fuzzy matching (Levenshtein distance 1). Junk entries like funding acknowledgments or boilerplate text are filtered out.
146
+
`rightsList` is stripped from the output. The license is chosen by the user at publish time rather than inferred from the poster.
147
147
148
148
### Funding normalization
149
149
@@ -185,10 +185,10 @@ Outputs conform to [poster-json-schema](https://github.com/fairdataihub/poster-j
0 commit comments