@cyanheads/pubmed-mcp-server 2.10.8 → 2.10.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +4 -3
- package/dist/mcp-server/tools/definitions/_text.d.ts +23 -1
- package/dist/mcp-server/tools/definitions/_text.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_text.js +25 -1
- package/dist/mcp-server/tools/definitions/_text.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +18 -0
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +409 -31
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.d.ts +3 -3
- package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.js +8 -16
- package/dist/services/europe-pmc/europe-pmc-service.js.map +1 -1
- package/dist/services/ncbi/parsing/ordered-xml-parser-options.d.ts +44 -0
- package/dist/services/ncbi/parsing/ordered-xml-parser-options.d.ts.map +1 -0
- package/dist/services/ncbi/parsing/ordered-xml-parser-options.js +41 -0
- package/dist/services/ncbi/parsing/ordered-xml-parser-options.js.map +1 -0
- package/dist/services/ncbi/parsing/pmc-article-parser.d.ts +47 -7
- package/dist/services/ncbi/parsing/pmc-article-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.js +322 -48
- package/dist/services/ncbi/parsing/pmc-article-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts +18 -0
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js +39 -3
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js.map +1 -1
- package/dist/services/ncbi/response-handler.d.ts +3 -9
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +6 -29
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/ncbi/types.d.ts +39 -0
- package/dist/services/ncbi/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* inline children and drops body sections for markup-heavy articles.
|
|
8
8
|
* @module src/services/ncbi/parsing/pmc-article-parser
|
|
9
9
|
*/
|
|
10
|
-
import type { ParsedPmcArticle, ParsedPmcAuthor, ParsedPmcReference, ParsedPmcSection } from '../types.js';
|
|
10
|
+
import type { ParsedPmcArticle, ParsedPmcAuthor, ParsedPmcReference, ParsedPmcSection, ParsedPmcTable } from '../types.js';
|
|
11
11
|
import { type JatsNode } from './pmc-xml-helpers.js';
|
|
12
12
|
/** Extract authors from a single `<contrib-group>` node. Non-author contributors are skipped. */
|
|
13
13
|
export declare function extractJatsAuthors(contribGroup: JatsNode | undefined): ParsedPmcAuthor[];
|
|
@@ -19,13 +19,53 @@ export declare function extractJatsAuthors(contribGroup: JatsNode | undefined):
|
|
|
19
19
|
*/
|
|
20
20
|
export declare function extractBodySections(body: JatsNode | undefined): ParsedPmcSection[];
|
|
21
21
|
/**
|
|
22
|
-
* Extract
|
|
23
|
-
* `<
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
22
|
+
* Extract every `<table-wrap>` under `root` in document order — pass the
|
|
23
|
+
* `<article>` node.
|
|
24
|
+
*
|
|
25
|
+
* The walk covers the whole article rather than `<body>` alone: about a quarter
|
|
26
|
+
* of real tables sit in `<floats-group>`, `<back>/<sec>`, `<table-wrap-group>`
|
|
27
|
+
* or `<app-group>/<app>`, so a body-scoped extractor drops them. Each table
|
|
28
|
+
* names the innermost enclosing `<sec>` wherever that sits — a back-matter or
|
|
29
|
+
* appendix section counts, and naming it is the reader's only positional cue
|
|
30
|
+
* there. Only a table inside no `<sec>` at all, such as a `<floats-group>`
|
|
31
|
+
* deposit, carries no section name.
|
|
32
|
+
*
|
|
33
|
+
* Only XHTML `<tr>`/`<td>`/`<th>` bodies are read. **Decision, not an
|
|
34
|
+
* oversight:** across a 283-table survey of open-access records, 276 were XHTML,
|
|
35
|
+
* 7 were graphic-only deposits and 0 used the CALS `<tgroup>` model. Graphic-only
|
|
36
|
+
* and CALS bodies therefore take the unextractable path — returned with their
|
|
37
|
+
* label and caption and a reason — rather than adding a second table model no
|
|
38
|
+
* observed record needs. Revisit only if CALS shows up in the wild. (#111)
|
|
27
39
|
*/
|
|
28
|
-
export declare function
|
|
40
|
+
export declare function extractPmcTables(root: JatsNode | undefined): ParsedPmcTable[];
|
|
41
|
+
/**
|
|
42
|
+
* Widest grid a single table row may occupy, and the ceiling every declared
|
|
43
|
+
* span is clamped to. Real deposits are far narrower — the widest row observed
|
|
44
|
+
* across a live sample was 15 columns — so this bounds a malformed or hostile
|
|
45
|
+
* span rather than limiting any genuine table: `colspan="99999999"` costs a
|
|
46
|
+
* bounded row instead of an unbounded allocation, and a `rowspan` that large
|
|
47
|
+
* carries a bounded number of rows down. How many rows a table has is set by its
|
|
48
|
+
* source `<tr>` elements and needs no cap of its own. (#111)
|
|
49
|
+
*/
|
|
50
|
+
export declare const MAX_TABLE_COLUMNS = 512;
|
|
51
|
+
/**
|
|
52
|
+
* Extract references from anywhere under `root` — pass the `<article>` node to
|
|
53
|
+
* cover a whole document, or a `<back>` node to scope the search to it.
|
|
54
|
+
*
|
|
55
|
+
* `<ref-list>` placement is not uniform: roughly 60% of Europe PMC deposits nest
|
|
56
|
+
* it under `body/sec/sec` and the rest put it directly under `<back>`, so a
|
|
57
|
+
* search scoped to a direct `<back>` child misses the majority. Every
|
|
58
|
+
* `<ref-list>` descendant is collected in document order instead, and a `<ref>`
|
|
59
|
+
* id already seen is skipped so a document exposing the same list under both
|
|
60
|
+
* containers still yields each reference once. (#116)
|
|
61
|
+
*
|
|
62
|
+
* Prefers `<mixed-citation>` over `<element-citation>`, descending into
|
|
63
|
+
* `<citation-alternatives>` when a ref carries both forms there rather than as
|
|
64
|
+
* direct children of `<ref>`. Both forms are rendered child-by-child so adjacent
|
|
65
|
+
* elements stay separable (see `renderMixedCitation` and
|
|
66
|
+
* `renderElementCitation`).
|
|
67
|
+
*/
|
|
68
|
+
export declare function extractReferences(root: JatsNode | undefined): ParsedPmcReference[];
|
|
29
69
|
/**
|
|
30
70
|
* Parse a single JATS `<article>` node (from PMC EFetch via the ordered parser)
|
|
31
71
|
* into a structured `ParsedPmcArticle`. The input node is the element wrapper
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmc-article-parser.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-article-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,kBAAkB,EAClB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"pmc-article-parser.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-article-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAOL,KAAK,QAAQ,EAMd,MAAM,sBAAsB,CAAC;AA2D9B,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,eAAe,EAAE,CA2BxF;AA2HD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,gBAAgB,EAAE,CA2BlF;AA6BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,EAAE,CAK7E;AA2DD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAkRrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,kBAAkB,EAAE,CAsClF;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,QAAQ,GAAG,gBAAgB,CA6CvE"}
|
|
@@ -7,7 +7,42 @@
|
|
|
7
7
|
* inline children and drops body sections for markup-heavy articles.
|
|
8
8
|
* @module src/services/ncbi/parsing/pmc-article-parser
|
|
9
9
|
*/
|
|
10
|
-
import { attrOf, childrenOf, findAll, findOne, isTextNode, rawTextContent, tagNameOf, textContent, textOf, } from './pmc-xml-helpers.js';
|
|
10
|
+
import { attrOf, childrenOf, findAll, findAllDescendants, findOne, isTextNode, rawTextContent, tagNameOf, textContent, textContentExcluding, textOf, } from './pmc-xml-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Block content extracted into its own field and therefore excluded from the
|
|
13
|
+
* prose a paragraph contributes. A `<table-wrap>` nested inside a `<p>` would
|
|
14
|
+
* otherwise be flattened into the surrounding sentence, concatenating adjacent
|
|
15
|
+
* cell values into numbers that never existed. (#111)
|
|
16
|
+
*/
|
|
17
|
+
const LIFTED_BLOCK_TAGS = new Set(['table-wrap']);
|
|
18
|
+
/** Prose of one `<p>`, with lifted block content left out. */
|
|
19
|
+
function paragraphText(paragraph) {
|
|
20
|
+
return textContentExcluding(paragraph, LIFTED_BLOCK_TAGS);
|
|
21
|
+
}
|
|
22
|
+
/** True when a lifted block sits anywhere in this subtree. */
|
|
23
|
+
function containsLiftedBlock(node) {
|
|
24
|
+
return childrenOf(node).some((child) => LIFTED_BLOCK_TAGS.has(tagNameOf(child) ?? '') || containsLiftedBlock(child));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* True when a `<sec>` carried block content that was extracted into its own
|
|
28
|
+
* field — a `<table-wrap>` sitting beside its paragraphs, or nested inside one.
|
|
29
|
+
*
|
|
30
|
+
* This is what separates a section emptied by the lift from one that never had
|
|
31
|
+
* readable prose. The first is a real heading a reader needs in order to place
|
|
32
|
+
* the table that names it; the second is a structural wrapper — a `<sec>` around
|
|
33
|
+
* a `<ref-list>`, say — which would arrive as a stray empty "References" entry
|
|
34
|
+
* if every empty section survived. Only this section's own children are
|
|
35
|
+
* considered: a `<table-wrap>` deeper down belongs to the nested `<sec>` that
|
|
36
|
+
* holds it, and that section survives on its own account. (#111, #116)
|
|
37
|
+
*/
|
|
38
|
+
function hasLiftedBlockContent(sec) {
|
|
39
|
+
return childrenOf(sec).some((child) => {
|
|
40
|
+
const tag = tagNameOf(child) ?? '';
|
|
41
|
+
if (LIFTED_BLOCK_TAGS.has(tag))
|
|
42
|
+
return true;
|
|
43
|
+
return tag === 'p' && containsLiftedBlock(child);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
11
46
|
// ─── Article IDs ────────────────────────────────────────────────────────────
|
|
12
47
|
function extractArticleId(articleMeta, pubIdType) {
|
|
13
48
|
if (!articleMeta)
|
|
@@ -173,7 +208,7 @@ export function extractBodySections(body) {
|
|
|
173
208
|
for (const child of childrenOf(body)) {
|
|
174
209
|
const tag = tagNameOf(child);
|
|
175
210
|
if (tag === 'p') {
|
|
176
|
-
const text =
|
|
211
|
+
const text = paragraphText(child);
|
|
177
212
|
if (text)
|
|
178
213
|
pendingParagraphs.push(text);
|
|
179
214
|
}
|
|
@@ -190,13 +225,16 @@ export function extractBodySections(body) {
|
|
|
190
225
|
function extractSection(sec) {
|
|
191
226
|
const title = textContent(findOne(sec, 'title')) || undefined;
|
|
192
227
|
const label = textContent(findOne(sec, 'label')) || undefined;
|
|
193
|
-
const
|
|
194
|
-
const textParts = paragraphs.map((p) => textContent(p)).filter(Boolean);
|
|
228
|
+
const textParts = findAll(sec, 'p').map(paragraphText).filter(Boolean);
|
|
195
229
|
const subsections = findAll(sec, 'sec')
|
|
196
230
|
.map(extractSection)
|
|
197
231
|
.filter((s) => s !== null);
|
|
198
232
|
const text = textParts.join('\n\n');
|
|
199
|
-
|
|
233
|
+
// A section left empty *because* its block content was lifted into `tables[]`
|
|
234
|
+
// survives as a heading-only entry: the heading is what places the table for a
|
|
235
|
+
// reader, and dropping it also erased the section from a `sections` filter's
|
|
236
|
+
// reach. A section that never carried prose still drops. (#111)
|
|
237
|
+
if (!text && subsections.length === 0 && !hasLiftedBlockContent(sec))
|
|
200
238
|
return null;
|
|
201
239
|
return {
|
|
202
240
|
...(title && { title }),
|
|
@@ -205,6 +243,179 @@ function extractSection(sec) {
|
|
|
205
243
|
...(subsections.length > 0 && { subsections }),
|
|
206
244
|
};
|
|
207
245
|
}
|
|
246
|
+
// ─── Tables ─────────────────────────────────────────────────────────────────
|
|
247
|
+
/**
|
|
248
|
+
* Extract every `<table-wrap>` under `root` in document order — pass the
|
|
249
|
+
* `<article>` node.
|
|
250
|
+
*
|
|
251
|
+
* The walk covers the whole article rather than `<body>` alone: about a quarter
|
|
252
|
+
* of real tables sit in `<floats-group>`, `<back>/<sec>`, `<table-wrap-group>`
|
|
253
|
+
* or `<app-group>/<app>`, so a body-scoped extractor drops them. Each table
|
|
254
|
+
* names the innermost enclosing `<sec>` wherever that sits — a back-matter or
|
|
255
|
+
* appendix section counts, and naming it is the reader's only positional cue
|
|
256
|
+
* there. Only a table inside no `<sec>` at all, such as a `<floats-group>`
|
|
257
|
+
* deposit, carries no section name.
|
|
258
|
+
*
|
|
259
|
+
* Only XHTML `<tr>`/`<td>`/`<th>` bodies are read. **Decision, not an
|
|
260
|
+
* oversight:** across a 283-table survey of open-access records, 276 were XHTML,
|
|
261
|
+
* 7 were graphic-only deposits and 0 used the CALS `<tgroup>` model. Graphic-only
|
|
262
|
+
* and CALS bodies therefore take the unextractable path — returned with their
|
|
263
|
+
* label and caption and a reason — rather than adding a second table model no
|
|
264
|
+
* observed record needs. Revisit only if CALS shows up in the wild. (#111)
|
|
265
|
+
*/
|
|
266
|
+
export function extractPmcTables(root) {
|
|
267
|
+
if (!root)
|
|
268
|
+
return [];
|
|
269
|
+
const tables = [];
|
|
270
|
+
collectTables(root, undefined, tables);
|
|
271
|
+
return tables;
|
|
272
|
+
}
|
|
273
|
+
function collectTables(node, sectionTitle, out) {
|
|
274
|
+
for (const child of childrenOf(node)) {
|
|
275
|
+
const tag = tagNameOf(child);
|
|
276
|
+
if (!tag)
|
|
277
|
+
continue;
|
|
278
|
+
if (tag === 'table-wrap') {
|
|
279
|
+
out.push(parseTableWrap(child, sectionTitle));
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
// An untitled <sec> keeps its parent's title rather than dropping the
|
|
283
|
+
// reader's only positional cue.
|
|
284
|
+
const nested = tag === 'sec' ? textContent(findOne(child, 'title')) || sectionTitle : sectionTitle;
|
|
285
|
+
collectTables(child, nested, out);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function parseTableWrap(tableWrap, sectionTitle) {
|
|
289
|
+
const id = attrOf(tableWrap, 'id');
|
|
290
|
+
const label = textContent(findOne(tableWrap, 'label')) || undefined;
|
|
291
|
+
const caption = textContent(findOne(tableWrap, 'caption')) || undefined;
|
|
292
|
+
const footnotes = textContent(findOne(tableWrap, 'table-wrap-foot')) || undefined;
|
|
293
|
+
// Some deposits offer both renderings inside <alternatives>; prefer the markup.
|
|
294
|
+
const table = findOne(tableWrap, 'table') ?? findOne(findOne(tableWrap, 'alternatives'), 'table');
|
|
295
|
+
const { rows, headerRowCount } = table
|
|
296
|
+
? extractTableRows(table)
|
|
297
|
+
: { rows: [], headerRowCount: 0 };
|
|
298
|
+
return {
|
|
299
|
+
...(id && { id }),
|
|
300
|
+
...(label && { label }),
|
|
301
|
+
...(caption && { caption }),
|
|
302
|
+
...(sectionTitle && { sectionTitle }),
|
|
303
|
+
headerRowCount,
|
|
304
|
+
rows,
|
|
305
|
+
...(footnotes && { footnotes }),
|
|
306
|
+
...(rows.length === 0 && {
|
|
307
|
+
unextractableReason: classifyUnextractable(tableWrap, table),
|
|
308
|
+
}),
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
function classifyUnextractable(tableWrap, table) {
|
|
312
|
+
if (findOne(tableWrap, 'tgroup') || findOne(table, 'tgroup'))
|
|
313
|
+
return 'cals-tgroup';
|
|
314
|
+
if (findOne(tableWrap, 'graphic') || findOne(findOne(tableWrap, 'alternatives'), 'graphic')) {
|
|
315
|
+
return 'graphic-only';
|
|
316
|
+
}
|
|
317
|
+
return 'no-rows';
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Widest grid a single table row may occupy, and the ceiling every declared
|
|
321
|
+
* span is clamped to. Real deposits are far narrower — the widest row observed
|
|
322
|
+
* across a live sample was 15 columns — so this bounds a malformed or hostile
|
|
323
|
+
* span rather than limiting any genuine table: `colspan="99999999"` costs a
|
|
324
|
+
* bounded row instead of an unbounded allocation, and a `rowspan` that large
|
|
325
|
+
* carries a bounded number of rows down. How many rows a table has is set by its
|
|
326
|
+
* source `<tr>` elements and needs no cap of its own. (#111)
|
|
327
|
+
*/
|
|
328
|
+
export const MAX_TABLE_COLUMNS = 512;
|
|
329
|
+
/** A `colspan`/`rowspan` value, clamped to a sane grid. Anything unparseable is 1. */
|
|
330
|
+
function spanOf(cell, name) {
|
|
331
|
+
const declared = Number.parseInt(attrOf(cell, name) ?? '', 10);
|
|
332
|
+
if (!Number.isFinite(declared) || declared < 1)
|
|
333
|
+
return 1;
|
|
334
|
+
return Math.min(declared, MAX_TABLE_COLUMNS);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Read an XHTML `<table>` into rows of cell text, expanding `colspan` and
|
|
338
|
+
* `rowspan` so every entry in a row is one grid column.
|
|
339
|
+
*
|
|
340
|
+
* A cell covering N columns occupies N entries and one covering M rows occupies
|
|
341
|
+
* its column in the M rows below it, repeating its text across the cells it
|
|
342
|
+
* genuinely covers. Repeating is the honest flattening: the value belongs to
|
|
343
|
+
* each of those positions, and a reader scanning a column finds it there. The
|
|
344
|
+
* alternative — keeping the source cell count — leaves the column a value
|
|
345
|
+
* belongs to unrecoverable downstream, so a renderer padding rows from the left
|
|
346
|
+
* puts values under the wrong headers. (#111)
|
|
347
|
+
*
|
|
348
|
+
* Header rows are those in `<thead>` plus any leading row made entirely of
|
|
349
|
+
* `<th>` in a table that declares no `<thead>`.
|
|
350
|
+
*/
|
|
351
|
+
function extractTableRows(table) {
|
|
352
|
+
const parsed = [];
|
|
353
|
+
/** Live `rowspan` obligations, indexed by grid column. */
|
|
354
|
+
const carried = [];
|
|
355
|
+
/** Consume the carried cells sitting at and after `col`, contiguously. */
|
|
356
|
+
const drainCarried = (row, col) => {
|
|
357
|
+
let at = col;
|
|
358
|
+
while (at < MAX_TABLE_COLUMNS) {
|
|
359
|
+
const carry = carried[at];
|
|
360
|
+
if (!carry)
|
|
361
|
+
return at;
|
|
362
|
+
row[at] = carry.value;
|
|
363
|
+
carry.remaining -= 1;
|
|
364
|
+
if (carry.remaining <= 0)
|
|
365
|
+
carried[at] = undefined;
|
|
366
|
+
at += 1;
|
|
367
|
+
}
|
|
368
|
+
return at;
|
|
369
|
+
};
|
|
370
|
+
const pushRow = (tr, inHead) => {
|
|
371
|
+
const row = [];
|
|
372
|
+
let col = 0;
|
|
373
|
+
let sourceCells = 0;
|
|
374
|
+
let allHeaderCells = true;
|
|
375
|
+
for (const cell of childrenOf(tr)) {
|
|
376
|
+
const tag = tagNameOf(cell);
|
|
377
|
+
if (tag !== 'td' && tag !== 'th')
|
|
378
|
+
continue;
|
|
379
|
+
if (tag === 'td')
|
|
380
|
+
allHeaderCells = false;
|
|
381
|
+
sourceCells += 1;
|
|
382
|
+
col = drainCarried(row, col);
|
|
383
|
+
const value = textContent(cell);
|
|
384
|
+
const rowspan = spanOf(cell, 'rowspan');
|
|
385
|
+
const width = Math.min(spanOf(cell, 'colspan'), MAX_TABLE_COLUMNS - col);
|
|
386
|
+
for (let i = 0; i < width; i++) {
|
|
387
|
+
row[col] = value;
|
|
388
|
+
if (rowspan > 1)
|
|
389
|
+
carried[col] = { remaining: rowspan - 1, value };
|
|
390
|
+
col += 1;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Carried cells past the last source cell still hold their columns. Walk out
|
|
394
|
+
// to the rightmost live obligation so they land where they belong; the gaps
|
|
395
|
+
// in between are columns this row genuinely left empty.
|
|
396
|
+
const rightmost = carried.reduce((last, carry, i) => (carry ? i : last), -1);
|
|
397
|
+
while (col <= rightmost)
|
|
398
|
+
col = carried[col] ? drainCarried(row, col) : col + 1;
|
|
399
|
+
if (sourceCells === 0)
|
|
400
|
+
return;
|
|
401
|
+
for (let i = 0; i < row.length; i++)
|
|
402
|
+
row[i] ??= '';
|
|
403
|
+
parsed.push({ cells: row, header: inHead || allHeaderCells });
|
|
404
|
+
};
|
|
405
|
+
for (const child of childrenOf(table)) {
|
|
406
|
+
const tag = tagNameOf(child);
|
|
407
|
+
if (tag === 'tr')
|
|
408
|
+
pushRow(child, false);
|
|
409
|
+
else if (tag === 'thead' || tag === 'tbody' || tag === 'tfoot') {
|
|
410
|
+
for (const tr of findAll(child, 'tr'))
|
|
411
|
+
pushRow(tr, tag === 'thead');
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
let headerRowCount = 0;
|
|
415
|
+
while (parsed[headerRowCount]?.header)
|
|
416
|
+
headerRowCount++;
|
|
417
|
+
return { headerRowCount, rows: parsed.map((row) => row.cells) };
|
|
418
|
+
}
|
|
208
419
|
// ─── References ─────────────────────────────────────────────────────────────
|
|
209
420
|
/**
|
|
210
421
|
* `pub-id-type` → human label, so the trailing identifiers in a rendered
|
|
@@ -263,6 +474,49 @@ function renderElementCitation(node) {
|
|
|
263
474
|
}
|
|
264
475
|
return parts.join(' ');
|
|
265
476
|
}
|
|
477
|
+
/**
|
|
478
|
+
* Author-name wrappers a `<mixed-citation>` can carry as a direct child. Their
|
|
479
|
+
* parts routinely sit adjacent with zero characters between them, so the
|
|
480
|
+
* sibling-element spacing rule has to reach inside them rather than stopping at
|
|
481
|
+
* the wrapper. Scoped to these three deliberately: recursing into arbitrary
|
|
482
|
+
* elements would change how inline markup inside `<article-title>` and friends
|
|
483
|
+
* renders. (#124)
|
|
484
|
+
*/
|
|
485
|
+
const NAME_WRAPPER_TAGS = new Set(['name', 'string-name', 'person-group']);
|
|
486
|
+
/**
|
|
487
|
+
* Serialize a `<name>` / `<string-name>` / `<person-group>` subtree, applying
|
|
488
|
+
* the same rule `renderMixedCitation` applies to its own children: a single
|
|
489
|
+
* space between two adjacent elements that carry nothing between them, and
|
|
490
|
+
* source text emitted verbatim. `<person-group>` separates its names with real
|
|
491
|
+
* `, ` text nodes and `<string-name>` usually separates surname from given
|
|
492
|
+
* names with a newline, so a fixed separator would double punctuation the
|
|
493
|
+
* source already has — spacing only the zero-gap transitions leaves those
|
|
494
|
+
* records byte-identical. Returns raw text; the caller collapses whitespace
|
|
495
|
+
* once over the finished citation.
|
|
496
|
+
*/
|
|
497
|
+
function renderNameWrapper(node) {
|
|
498
|
+
let rendered = '';
|
|
499
|
+
let prevWasElement = false;
|
|
500
|
+
for (const child of childrenOf(node)) {
|
|
501
|
+
if (isTextNode(child)) {
|
|
502
|
+
const raw = textOf(child);
|
|
503
|
+
if (raw) {
|
|
504
|
+
rendered += raw;
|
|
505
|
+
prevWasElement = false;
|
|
506
|
+
}
|
|
507
|
+
continue;
|
|
508
|
+
}
|
|
509
|
+
const tag = tagNameOf(child) ?? '';
|
|
510
|
+
const part = NAME_WRAPPER_TAGS.has(tag) ? renderNameWrapper(child) : rawTextContent(child);
|
|
511
|
+
if (!part)
|
|
512
|
+
continue;
|
|
513
|
+
if (prevWasElement)
|
|
514
|
+
rendered += ' ';
|
|
515
|
+
rendered += part;
|
|
516
|
+
prevWasElement = true;
|
|
517
|
+
}
|
|
518
|
+
return rendered;
|
|
519
|
+
}
|
|
266
520
|
/**
|
|
267
521
|
* True when the citation text emitted so far already ends with a literal prefix
|
|
268
522
|
* naming this `pub-id-type` (`doi:`, `PMID `, `pmcid.`), so prepending the label
|
|
@@ -276,13 +530,14 @@ function hasLiteralIdPrefix(rendered, pubIdType) {
|
|
|
276
530
|
* Render a `<mixed-citation>` as a readable string.
|
|
277
531
|
*
|
|
278
532
|
* Mixed citations carry their punctuation in the text nodes between elements,
|
|
279
|
-
* so a flat `textContent()` reads correctly almost everywhere.
|
|
280
|
-
* defeat it,
|
|
281
|
-
* `<pub-id>`s fuse into one unreadable token (#115),
|
|
282
|
-
* straight into the volume that follows it (#123)
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
533
|
+
* so a flat `textContent()` reads correctly almost everywhere. Three adjacencies
|
|
534
|
+
* defeat it, all with zero characters between the elements: consecutive typed
|
|
535
|
+
* `<pub-id>`s fuse into one unreadable token (#115), an inline title runs
|
|
536
|
+
* straight into the volume that follows it (#123), and a `<surname>` glues onto
|
|
537
|
+
* the `<given-names>` beside it inside an author-name wrapper (#124). Walk the
|
|
538
|
+
* direct children so those cases can be repaired without touching `textContent`,
|
|
539
|
+
* which abstracts, titles, and body paragraphs share and where zero-gap
|
|
540
|
+
* adjacency is often intentional.
|
|
286
541
|
*
|
|
287
542
|
* Typed `<pub-id>`s are labeled (unless literal prefix text already names the
|
|
288
543
|
* type), and a single space separates two adjacent elements that carry nothing
|
|
@@ -305,9 +560,10 @@ function renderMixedCitation(node) {
|
|
|
305
560
|
}
|
|
306
561
|
continue;
|
|
307
562
|
}
|
|
563
|
+
const tag = tagNameOf(child) ?? '';
|
|
308
564
|
let part;
|
|
309
565
|
let labeled = false;
|
|
310
|
-
if (
|
|
566
|
+
if (tag === 'pub-id') {
|
|
311
567
|
const value = textContent(child);
|
|
312
568
|
if (!value)
|
|
313
569
|
continue;
|
|
@@ -321,6 +577,9 @@ function renderMixedCitation(node) {
|
|
|
321
577
|
part = value;
|
|
322
578
|
}
|
|
323
579
|
}
|
|
580
|
+
else if (NAME_WRAPPER_TAGS.has(tag)) {
|
|
581
|
+
part = renderNameWrapper(child);
|
|
582
|
+
}
|
|
324
583
|
else {
|
|
325
584
|
part = rawTextContent(child);
|
|
326
585
|
}
|
|
@@ -332,43 +591,57 @@ function renderMixedCitation(node) {
|
|
|
332
591
|
return rendered.replace(/\s+/g, ' ').trim();
|
|
333
592
|
}
|
|
334
593
|
/**
|
|
335
|
-
* Extract references from
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
*
|
|
339
|
-
* `
|
|
594
|
+
* Extract references from anywhere under `root` — pass the `<article>` node to
|
|
595
|
+
* cover a whole document, or a `<back>` node to scope the search to it.
|
|
596
|
+
*
|
|
597
|
+
* `<ref-list>` placement is not uniform: roughly 60% of Europe PMC deposits nest
|
|
598
|
+
* it under `body/sec/sec` and the rest put it directly under `<back>`, so a
|
|
599
|
+
* search scoped to a direct `<back>` child misses the majority. Every
|
|
600
|
+
* `<ref-list>` descendant is collected in document order instead, and a `<ref>`
|
|
601
|
+
* id already seen is skipped so a document exposing the same list under both
|
|
602
|
+
* containers still yields each reference once. (#116)
|
|
603
|
+
*
|
|
604
|
+
* Prefers `<mixed-citation>` over `<element-citation>`, descending into
|
|
605
|
+
* `<citation-alternatives>` when a ref carries both forms there rather than as
|
|
606
|
+
* direct children of `<ref>`. Both forms are rendered child-by-child so adjacent
|
|
607
|
+
* elements stay separable (see `renderMixedCitation` and
|
|
608
|
+
* `renderElementCitation`).
|
|
340
609
|
*/
|
|
341
|
-
export function extractReferences(
|
|
342
|
-
if (!
|
|
343
|
-
return [];
|
|
344
|
-
const refList = findOne(back, 'ref-list');
|
|
345
|
-
if (!refList)
|
|
610
|
+
export function extractReferences(root) {
|
|
611
|
+
if (!root)
|
|
346
612
|
return [];
|
|
347
613
|
const results = [];
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
citation =
|
|
614
|
+
const seenIds = new Set();
|
|
615
|
+
for (const refList of findAllDescendants(root, 'ref-list')) {
|
|
616
|
+
for (const ref of findAll(refList, 'ref')) {
|
|
617
|
+
const id = attrOf(ref, 'id');
|
|
618
|
+
if (id && seenIds.has(id))
|
|
619
|
+
continue;
|
|
620
|
+
// JATS wraps the two citation forms in <citation-alternatives> (the NLM
|
|
621
|
+
// construct carrying both a structured <element-citation> and a readable
|
|
622
|
+
// <mixed-citation>). findOne matches direct children only, so resolve that
|
|
623
|
+
// container first; refs with a direct citation node fall through to `ref`.
|
|
624
|
+
const container = findOne(ref, 'citation-alternatives') ?? ref;
|
|
625
|
+
const mixedCitation = findOne(container, 'mixed-citation');
|
|
626
|
+
const elementCitation = findOne(container, 'element-citation');
|
|
627
|
+
let citation = '';
|
|
628
|
+
if (mixedCitation) {
|
|
629
|
+
citation = renderMixedCitation(mixedCitation);
|
|
630
|
+
}
|
|
631
|
+
else if (elementCitation) {
|
|
632
|
+
citation = renderElementCitation(elementCitation);
|
|
633
|
+
}
|
|
634
|
+
if (!citation)
|
|
635
|
+
continue;
|
|
636
|
+
if (id)
|
|
637
|
+
seenIds.add(id);
|
|
638
|
+
const label = textContent(findOne(ref, 'label')) || undefined;
|
|
639
|
+
results.push({
|
|
640
|
+
...(id && { id }),
|
|
641
|
+
...(label && { label }),
|
|
642
|
+
citation,
|
|
643
|
+
});
|
|
362
644
|
}
|
|
363
|
-
if (!citation)
|
|
364
|
-
continue;
|
|
365
|
-
const id = attrOf(ref, 'id');
|
|
366
|
-
const label = textContent(findOne(ref, 'label')) || undefined;
|
|
367
|
-
results.push({
|
|
368
|
-
...(id && { id }),
|
|
369
|
-
...(label && { label }),
|
|
370
|
-
citation,
|
|
371
|
-
});
|
|
372
645
|
}
|
|
373
646
|
return results;
|
|
374
647
|
}
|
|
@@ -384,7 +657,6 @@ export function parsePmcArticle(articleNode) {
|
|
|
384
657
|
const articleMeta = findOne(front, 'article-meta');
|
|
385
658
|
const journalMeta = findOne(front, 'journal-meta');
|
|
386
659
|
const body = findOne(articleNode, 'body');
|
|
387
|
-
const back = findOne(articleNode, 'back');
|
|
388
660
|
const pmcId = extractArticleId(articleMeta, 'pmcid') ?? extractArticleId(articleMeta, 'pmc-uid') ?? '';
|
|
389
661
|
const pmid = extractArticleId(articleMeta, 'pmid');
|
|
390
662
|
const doi = extractArticleId(articleMeta, 'doi');
|
|
@@ -397,7 +669,8 @@ export function parsePmcArticle(articleNode) {
|
|
|
397
669
|
const abstract = extractAbstract(articleMeta);
|
|
398
670
|
const keywords = extractKeywords(articleMeta);
|
|
399
671
|
const sections = extractBodySections(body);
|
|
400
|
-
const references = extractReferences(
|
|
672
|
+
const references = extractReferences(articleNode);
|
|
673
|
+
const tables = extractPmcTables(articleNode);
|
|
401
674
|
const normalizedPmcId = !pmcId ? '' : pmcId.startsWith('PMC') ? pmcId : `PMC${pmcId}`;
|
|
402
675
|
const articleType = attrOf(articleNode, 'article-type');
|
|
403
676
|
return {
|
|
@@ -413,6 +686,7 @@ export function parsePmcArticle(articleNode) {
|
|
|
413
686
|
...(keywords.length > 0 && { keywords }),
|
|
414
687
|
sections,
|
|
415
688
|
...(references.length > 0 && { references }),
|
|
689
|
+
...(tables.length > 0 && { tables }),
|
|
416
690
|
...(articleType && { articleType }),
|
|
417
691
|
pmcUrl: `https://www.ncbi.nlm.nih.gov/pmc/articles/${normalizedPmcId}/`,
|
|
418
692
|
...(pmid && { pubmedUrl: `https://pubmed.ncbi.nlm.nih.gov/${pmid}/` }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmc-article-parser.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-article-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,EAEV,cAAc,EACd,SAAS,EACT,WAAW,EACX,MAAM,GACP,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAE/E,SAAS,gBAAgB,CACvB,WAAiC,EACjC,SAAiB;IAEjB,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO;AACT,CAAC;AAED,+EAA+E;AAE/E,iGAAiG;AACjG,MAAM,UAAU,kBAAkB,CAAC,YAAkC;IACnE,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACpD,IAAI,WAAW,IAAI,WAAW,KAAK,QAAQ;YAAE,SAAS;QAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,cAAc;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC;YACxE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,SAAS,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7B,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAiC;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAE/E,SAAS,cAAc,CACrB,WAAiC,EACjC,WAAiC;IAEjC,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC/D,MAAM,KAAK,GACT,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACjD,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAClD,SAAS,CAAC;IAEZ,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChG,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;IAExE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO;IAE3D,OAAO;QACL,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;QACzB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,WAAiC;IAEjC,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,MAAM,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,MAAM,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC;QACnD,KAAK,CAAC,CAAC,CAAC,CAAC;IAEX,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;IAChE,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,SAAS,eAAe,CAAC,WAAiC;IACxD,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,KAAK,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;iBAC9C,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAChD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,UAAU;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAC1B,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,WAAiC;IACxD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA0B;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,IAAI,iBAAiB,GAAa,EAAE,CAAC;IAErC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxD,iBAAiB,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI;gBAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACzB,YAAY,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,YAAY,EAAE,CAAC;IAEf,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,GAAa;IACnC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;IAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;SACpC,GAAG,CAAC,cAAc,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnD,OAAO;QACL,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,IAAI;QACJ,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,aAAa,GAAqC;IACtD,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,+EAA+E;AAC/E,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,IAAc;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,oEAAoE;YACpE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;IAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/D,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,mBAAmB,CAAC,IAAc;IACzC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE,CAAC;gBACR,QAAQ,IAAI,GAAG,CAAC;gBAChB,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAY,CAAC;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBACjD,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,IAAI,OAAO;YAAE,QAAQ,IAAI,GAAG,CAAC;QAC/C,QAAQ,IAAI,IAAI,CAAC;QACjB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA0B;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1C,wEAAwE;QACxE,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,IAAI,GAAG,CAAC;QAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE/D,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,aAAa,EAAE,CAAC;YAClB,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,QAAQ,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAqB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE1C,MAAM,KAAK,GACT,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,IAAI,SAAS,CAAC;IAE7E,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;IACtF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAExD,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QACtC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QAChD,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC;QAC3C,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxC,QAAQ;QACR,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;QAC5C,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;QACnC,MAAM,EAAE,6CAA6C,eAAe,GAAG;QACvE,GAAG,CAAC,IAAI,IAAI,EAAE,SAAS,EAAE,mCAAmC,IAAI,GAAG,EAAE,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,cAAc,CAAC,WAAiC;IACvD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"pmc-article-parser.js","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/pmc-article-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,8 +45,26 @@ export declare function rawTextContent(input: JatsNode | JatsNodeList | undefine
|
|
|
45
45
|
* children must read back in the order they appear in the source.
|
|
46
46
|
*/
|
|
47
47
|
export declare function textContent(input: JatsNode | JatsNodeList | undefined): string;
|
|
48
|
+
/**
|
|
49
|
+
* {@link textContent}, with the subtree of any element named in `excludedTags`
|
|
50
|
+
* left out. Block content a publisher nests inside a `<p>` — a `<table-wrap>` in
|
|
51
|
+
* particular — would otherwise be flattened into the paragraph, running every
|
|
52
|
+
* cell together into values that never existed. Such content is extracted
|
|
53
|
+
* separately and must not appear in the prose twice.
|
|
54
|
+
*/
|
|
55
|
+
export declare function textContentExcluding(input: JatsNode | JatsNodeList | undefined, excludedTags: ReadonlySet<string>): string;
|
|
48
56
|
/** First direct child with the given tag name. */
|
|
49
57
|
export declare function findOne(input: JatsNode | JatsNodeList | undefined, tagName: string): JatsNode | undefined;
|
|
50
58
|
/** All direct children with the given tag name. */
|
|
51
59
|
export declare function findAll(input: JatsNode | JatsNodeList | undefined, tagName: string): JatsNode[];
|
|
60
|
+
/**
|
|
61
|
+
* Every descendant element with the given tag name, in document order.
|
|
62
|
+
* {@link findAll} matches direct children only, which is right for reading a
|
|
63
|
+
* known JATS shape; this is for containers publishers place at varying depths
|
|
64
|
+
* (a `<ref-list>` under `<back>` in one deposit and under `body/sec/sec` in the
|
|
65
|
+
* next). The walk keeps descending through a match, so a container nested
|
|
66
|
+
* inside another of the same tag is reported too. Each node is visited once, so
|
|
67
|
+
* the result never repeats a node.
|
|
68
|
+
*/
|
|
69
|
+
export declare function findAllDescendants(input: JatsNode | JatsNodeList | undefined, tagName: string): JatsNode[];
|
|
52
70
|
//# sourceMappingURL=pmc-xml-helpers.d.ts.map
|