From 9e48e5d27b769c1b7aeed11c00ed2c81d98546c5 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Sun, 26 Jul 2026 19:53:34 +0200 Subject: [PATCH 01/16] feat: honor the InlineGroup whitespace contract in the backends Inline runs carry their own significant whitespace and the docling-core serializers now concatenate them faithfully, so producers must stop stripping run boundaries. Previously each backend relied on the serializer's hard `" "` join, which invented spaces (`H 2 O`, `x 2 + y 3`, `(strong) .`) and made the real boundary unrecoverable. HTML: collapse whitespace without trimming at the extraction origin (`" ".join(s.split())` did both), then normalize once per block across the whole run list -- per-node collapsing cannot see that `["a ", " ", " b"]` is one boundary. `simplify_text_elements` merges same-format neighbours without a separator, `to_single_text_element` concatenates verbatim, and the emitters no longer strip individual runs. The single-char compactor skips candidates carrying edge whitespace, or it would glue words in rendered span soup. `_is_rich_table_cell` consumes the normalized list too: inter-tag whitespace in `\n

x

\n` otherwise counts as two extra runs and misclassifies the cell. A boundary never lands inside a `` ` `` delimiter, because the serializers hoist whitespace out of emphasis but not out of code. It goes on whichever neighbour is plain; when both sides are code it becomes an unformatted run of its own, since `` `a`` b` `` is corrupt either way. The emitters therefore keep whitespace-only runs: normalization has already trimmed the block edges, so one that survives is significant. `
` is preformatted, so it is taken verbatim and only its block edges are
trimmed. Stripping each fragment merged `
See x first
` into one word once the join stopped compensating. The one-code-item-per-fragment shape of `
` with inline markup is a separate pre-existing issue and is left alone.

MS Word: group runs by format without stripping, then trim only the paragraph
edges. `_add_inline_equations_to_parent` builds its own InlineGroup outside that
path and stripped the fragment after the last equation, merging the formula into
the next word (`$A= \pi r^{2}$is the area formula`); it now trims group edges
only. JATS: `_strip_segments` becomes `_trim_segment_edges`. Markdown: keep the
raw Marko `RawText` fragments and emit a space for a soft line break, which is
how a soft-wrapped paragraph renders and which the join used to supply.

Goldens are re-baselined. `textbox.docx` is left untouched: its output varies
between identical runs, and its test is already `xfail(strict=False)`, so
regenerating it would only bless nondeterministic data.

Ships as a minor, not a major: `feat!:` would make python-semantic-release
(7.34.6) bump to 3.0, and a 3.0 is not affordable here. Needs a docling-core
floor bump to the release that carries the faithful join, once that number exists
-- an older docling-core with these backends produces double spaces (cosmetic),
but a newer docling-core under older backends merges words.
---
 docling/backend/html_backend.py               |  152 +-
 docling/backend/md_backend.py                 |   27 +-
 docling/backend/msword_backend.py             |   84 +-
 docling/backend/xml/jats_backend.py           |   28 +-
 .../boxnote/groundtruth/sample.boxnote.json   |    2 +-
 .../boxnote/groundtruth/sample.boxnote.md     |    2 +-
 .../groundtruth/csv-comma-in-cell.csv.json    |    2 +-
 tests/data/csv/groundtruth/csv-comma.csv.json |    2 +-
 .../csv-inconsistent-header.csv.json          |    2 +-
 tests/data/csv/groundtruth/csv-pipe.csv.json  |    2 +-
 .../csv/groundtruth/csv-semicolon.csv.json    |    2 +-
 .../groundtruth/csv-single-column.csv.json    |    2 +-
 tests/data/csv/groundtruth/csv-tab.csv.json   |    2 +-
 .../groundtruth/csv-too-few-columns.csv.json  |    2 +-
 .../groundtruth/csv-too-many-columns.csv.json |    2 +-
 tests/data/docx/groundtruth/Strict.docx.json  |    2 +-
 .../docx/groundtruth/Transitional.docx.json   |    2 +-
 .../groundtruth/docx_checkboxes.docx.json     |    2 +-
 .../groundtruth/docx_code_blocks.docx.json    |    2 +-
 .../docx/groundtruth/docx_comments.docx.json  |    2 +-
 .../groundtruth/docx_external_image.docx.json |    2 +-
 .../groundtruth/docx_grouped_images.docx.json |    2 +-
 .../docx/groundtruth/docx_lists.docx.json     |    2 +-
 .../groundtruth/docx_rich_cells.docx.html     |   18 +-
 .../groundtruth/docx_rich_cells.docx.itxt     |   32 +-
 .../groundtruth/docx_rich_cells.docx.json     |   66 +-
 .../docx/groundtruth/docx_rich_cells.docx.md  |    6 +-
 .../groundtruth/docx_rich_tables_01.docx.itxt |    4 +-
 .../groundtruth/docx_rich_tables_01.docx.json |   10 +-
 .../groundtruth/docx_vml_images.docx.json     |    2 +-
 .../data/docx/groundtruth/equations.docx.itxt |    6 +-
 .../data/docx/groundtruth/equations.docx.json |   14 +-
 tests/data/docx/groundtruth/equations.docx.md |   12 +-
 .../list_after_num_headers.docx.json          |    2 +-
 .../list_after_num_headers.docx.md            |   10 +-
 .../docx/groundtruth/lorem_ipsum.docx.json    |    2 +-
 .../omml_frac_superscript.docx.json           |    2 +-
 .../docx/groundtruth/omml_func_log.docx.json  |    2 +-
 .../omml_multi_equation_paragraph.docx.json   |    2 +-
 .../omml_text_escapes_in_math.docx.json       |    2 +-
 .../table_with_equations.docx.json            |    2 +-
 .../data/docx/groundtruth/tablecell.docx.json |    2 +-
 .../docx/groundtruth/test_emf_docx.docx.json  |    2 +-
 .../unit_test_formatting.docx.itxt            |   22 +-
 .../unit_test_formatting.docx.json            |   54 +-
 .../groundtruth/unit_test_headers.docx.json   |    2 +-
 .../unit_test_headers_numbered.docx.json      |    2 +-
 .../groundtruth/word_image_anchors.docx.itxt  |    4 +-
 .../groundtruth/word_image_anchors.docx.json  |   10 +-
 .../groundtruth/word_image_anchors.docx.md    |    2 +-
 .../docx/groundtruth/word_sample.docx.json    |    2 +-
 .../docx/groundtruth/word_tables.docx.json    |    2 +-
 .../groundtruth/epub_purvis_poetry.epub.itxt  |   80 +-
 .../groundtruth/epub_purvis_poetry.epub.json  |  154 +-
 .../groundtruth/epub_purvis_poetry.epub.md    |   38 +-
 .../html/groundtruth/example_01.html.json     |    2 +-
 .../groundtruth/example_01_images.html.json   |    2 +-
 .../html/groundtruth/example_02.html.json     |    2 +-
 .../html/groundtruth/example_03.html.json     |    2 +-
 .../html/groundtruth/example_04.html.json     |    2 +-
 .../html/groundtruth/example_05.html.json     |    2 +-
 .../html/groundtruth/example_06.html.itxt     |    4 +-
 .../html/groundtruth/example_06.html.json     |   10 +-
 .../html/groundtruth/example_07.html.json     |    2 +-
 .../html/groundtruth/example_08.html.json     |    2 +-
 .../html/groundtruth/formatting.html.itxt     |   44 +-
 .../html/groundtruth/formatting.html.json     |   90 +-
 .../data/html/groundtruth/formatting.html.md  |   12 +-
 .../groundtruth/html_code_snippets.html.itxt  |   24 +-
 .../groundtruth/html_code_snippets.html.json  |   50 +-
 .../groundtruth/html_code_snippets.html.md    |    8 +-
 .../html_description_list.html.itxt           |    4 +-
 .../html_description_list.html.json           |   10 +-
 .../groundtruth/html_heading_in_p.html.json   |    2 +-
 .../html_inline_group_in_table_cell.html.itxt |   18 +-
 .../html_inline_group_in_table_cell.html.json |   38 +-
 .../html_inline_group_in_table_cell.html.md   |    2 +-
 .../html_nested_block_in_list_item.html.itxt  |    8 +-
 .../html_nested_block_in_list_item.html.json  |   18 +-
 .../html_rich_table_cells.html.itxt           |    6 +-
 .../html_rich_table_cells.html.json           |   14 +-
 .../groundtruth/html_rich_table_cells.html.md |    4 +-
 .../html/groundtruth/hyperlink_01.html.itxt   |    4 +-
 .../html/groundtruth/hyperlink_01.html.json   |   10 +-
 .../html/groundtruth/hyperlink_02.html.json   |    2 +-
 .../html/groundtruth/hyperlink_03.html.itxt   |    6 +-
 .../html/groundtruth/hyperlink_03.html.json   |   14 +-
 .../html/groundtruth/hyperlink_04.html.json   |    2 +-
 .../html/groundtruth/hyperlink_05.html.json   |    2 +-
 .../html/groundtruth/hyperlink_06.html.itxt   |    8 +-
 .../html/groundtruth/hyperlink_06.html.json   |   18 +-
 .../html/groundtruth/hyperlink_06.html.md     |    4 +-
 .../groundtruth/kvp_data_example.html.json    |    2 +-
 .../data/html/groundtruth/table_01.html.json  |    2 +-
 .../data/html/groundtruth/table_02.html.json  |    2 +-
 .../data/html/groundtruth/table_03.html.json  |    2 +-
 .../data/html/groundtruth/table_04.html.json  |    2 +-
 .../data/html/groundtruth/table_05.html.json  |    2 +-
 .../data/html/groundtruth/table_06.html.json  |    2 +-
 .../table_with_heading_01.html.json           |    2 +-
 .../table_with_heading_02.html.json           |    2 +-
 .../html/groundtruth/unit_test_01.html.json   |    2 +-
 .../data/html/groundtruth/wiki_duck.html.itxt | 1140 ++++----
 .../data/html/groundtruth/wiki_duck.html.json | 2286 ++++++++---------
 tests/data/html/groundtruth/wiki_duck.html.md |  230 +-
 .../jats/groundtruth/elife-56337.nxml.itxt    |   44 +-
 .../jats/groundtruth/elife-56337.nxml.json    |   90 +-
 .../data/jats/groundtruth/elife-56337.nxml.md |   16 +-
 .../jats/groundtruth/pntd.0008301.nxml.itxt   |   72 +-
 .../jats/groundtruth/pntd.0008301.nxml.json   |  146 +-
 .../jats/groundtruth/pntd.0008301.nxml.md     |   16 +-
 .../jats/groundtruth/pone.0234687.nxml.itxt   |  150 +-
 .../jats/groundtruth/pone.0234687.nxml.json   |  302 +--
 .../jats/groundtruth/pone.0234687.nxml.md     |   54 +-
 tests/data/jats/groundtruth/ptag100.xml.itxt  |  352 +--
 tests/data/jats/groundtruth/ptag100.xml.json  |  706 ++---
 tests/data/jats/groundtruth/ptag100.xml.md    |   62 +-
 .../md/groundtruth/escaped_characters.md.json |    8 +-
 .../md/groundtruth/escaped_characters.md.md   |    2 +-
 .../groundtruth/inline_and_formatting.md.md   |   16 +-
 .../groundtruth/inline_and_formatting.md.yaml |  228 +-
 .../md/groundtruth/mixed_without_h1.md.md     |    2 +-
 .../md/groundtruth/mixed_without_h1.md.yaml   |    8 +-
 .../md/groundtruth/signature_stamp_01.md.json |    2 +-
 .../groundtruth/webvtt_example_01.vtt.json    |    2 +-
 .../groundtruth/webvtt_example_02.vtt.json    |    2 +-
 .../groundtruth/webvtt_example_02.vtt.md      |    4 +-
 .../groundtruth/webvtt_example_03.vtt.json    |    2 +-
 .../groundtruth/webvtt_example_04.vtt.json    |    2 +-
 .../groundtruth/webvtt_example_04.vtt.md      |    4 +-
 .../xbrl/groundtruth/grve_10q_htm.xml.json    |    2 +-
 .../data/xbrl/groundtruth/grve_10q_htm.xml.md |    2 +-
 .../xbrl/groundtruth/mlac-20251231.xml.itxt   |   12 +-
 .../xbrl/groundtruth/mlac-20251231.xml.json   |   30 +-
 .../xbrl/groundtruth/mlac-20251231.xml.md     |    6 +-
 tests/test_backend_email.py                   |    3 +-
 tests/test_backend_html.py                    |   52 +
 tests/test_backend_jats.py                    |   67 +-
 tests/test_backend_markdown.py                |   31 +
 tests/test_backend_msword.py                  |    6 +-
 tests/test_inline_whitespace_contract.py      |  151 ++
 141 files changed, 4047 insertions(+), 3634 deletions(-)
 create mode 100644 tests/test_inline_whitespace_contract.py

diff --git a/docling/backend/html_backend.py b/docling/backend/html_backend.py
index aec3d93645..850fc556f4 100644
--- a/docling/backend/html_backend.py
+++ b/docling/backend/html_backend.py
@@ -82,6 +82,10 @@
 # Using Unicode Private Use Area to avoid conflicts with actual content
 _BR_SENTINEL = "\ue000"
 
+# Any run of whitespace in normal HTML flow renders as a single space. The sentinel is not
+# whitespace, so an explicit 
survives the collapse. +_WHITESPACE_RUN: Final = re.compile(r"\s+") + DEFAULT_IMAGE_WIDTH = 128 DEFAULT_IMAGE_HEIGHT = 128 @@ -293,7 +297,9 @@ def to_single_text_element(self) -> AnnotatedText: f = at.formatting c = at.code s = at.source_tag_id - current_text += t.strip() + " " + # Faithful concatenation: stripping each run and re-joining with " " invented + # separators the source never had. Boundary whitespace is already in the run text. + current_text += t if f is not None and current_f is None: current_f = f elif f is not None and current_f is not None and f != current_f: @@ -337,7 +343,6 @@ def simplify_text_elements(self) -> AnnotatedTextList: formatting = self[0].formatting code = self[0].code source_tag_id = self[0].source_tag_id - last_elm = text for i in range(1, len(self)): if ( hyperlink == self[i].hyperlink @@ -345,11 +350,9 @@ def simplify_text_elements(self) -> AnnotatedTextList: and code == self[i].code and source_tag_id == self[i].source_tag_id ): - sep = " " - if not self[i].text.strip() or not last_elm.strip(): - sep = "" - text += sep + self[i].text - last_elm = self[i].text + # Same-format neighbours merge faithfully: any whitespace between them is + # already in the run text, so a separator here would duplicate it. + text += self[i].text else: simplified.append( AnnotatedText( @@ -361,7 +364,6 @@ def simplify_text_elements(self) -> AnnotatedTextList: ) ) text = self[i].text - last_elm = text hyperlink = self[i].hyperlink formatting = self[i].formatting code = self[i].code @@ -378,6 +380,45 @@ def simplify_text_elements(self) -> AnnotatedTextList: ) return simplified + def normalize_whitespace(self) -> AnnotatedTextList: + """Collapse boundary whitespace across runs and trim the block edge. + + Per-node collapsing is not enough: `["a ", " ", " b"]` is three separate nodes whose + faithful concatenation is `"a b"`. Whitespace at a run boundary -- in either run, or in + a whitespace-only run between them -- collapses to exactly one space, carried by the left + run so it sits outside the right run's formatting. The block's outer edges are trimmed + once, here, so no downstream emitter needs to strip anything. + + Not for preformatted content, where every space and newline is significant. + """ + kept: AnnotatedTextList = AnnotatedTextList() + space_pending = False + for at in self: + if not at.text: + continue + core = at.text.strip() + if not core: + # A whitespace-only run contributes a boundary, nothing else. + space_pending = True + continue + if (space_pending or at.text[:1].isspace()) and kept: + # A code run is wrapped in `` ` `` downstream, and the serializers hoist + # whitespace out of emphasis but not out of a code delimiter. Keep the boundary + # space outside both delimiters. + if not kept[-1].code: + kept[-1] = kept[-1].model_copy(update={"text": kept[-1].text + " "}) + elif not at.code: + core = " " + core + else: + # Both sides are code: either delimiter would swallow it (`a`` b`), so the + # boundary becomes an unformatted run of its own between them. + kept.append(AnnotatedText(text=" ", source_tag_id=at.source_tag_id)) + # A trailing space is only significant if something follows; the loop ending here + # leaves it dropped, which is the block-edge trim. + space_pending = at.text[-1:].isspace() + kept.append(at.model_copy(update={"text": core})) + return kept + def split_by_newline(self) -> list[Self]: """Split text elements on multiple consecutive line breaks (from
tags). @@ -1191,24 +1232,31 @@ def _are_source_tag_ids_inline_neighbors( def _compact_adjacent_single_char_parts( self, parts: AnnotatedTextList ) -> list[tuple[AnnotatedText, list[str]]]: + def single_char(part: AnnotatedText) -> Optional[str]: + """Return the lone character of *part*, or None if it cannot be compacted. + + A run carrying edge whitespace is a word boundary in rendered span soup, so + compacting across it would glue words together. Only bare characters qualify. + """ + cleaned = HTMLDocumentBackend._clean_unicode(part.text) + return cleaned if len(cleaned) == 1 and not cleaned.isspace() else None + compacted: list[tuple[AnnotatedText, list[str]]] = [] idx = 0 while idx < len(parts): current = parts[idx] - current_text = HTMLDocumentBackend._clean_unicode(current.text.strip()) + current_text = single_char(current) - if len(current_text) == 1 and current.source_tag_id is not None: + if current_text is not None and current.source_tag_id is not None: run_chars: list[str] = [] run_source_ids: list[str] = [] prev_source_id: Optional[str] = None run_end = idx while run_end < len(parts): candidate = parts[run_end] - candidate_text = HTMLDocumentBackend._clean_unicode( - candidate.text.strip() - ) + candidate_text = single_char(candidate) if ( - len(candidate_text) != 1 + candidate_text is None or candidate.hyperlink != current.hyperlink or candidate.formatting != current.formatting or candidate.code != current.code @@ -1445,9 +1493,11 @@ def _is_rich_table_cell(self, table_cell: Tag) -> bool: ] is_rich = len(content) > 1 else: + # Normalized, or the inter-tag whitespace of `\n

x

\n` counts as two + # extra runs and the cell is misclassified as rich. annotations = self._extract_text_and_hyperlink_recursively( table_cell, find_parent_annotation=True - ) + ).normalize_whitespace() if not annotations: is_rich = bool( item for item in children if item.name in {"img", "input"} @@ -1622,6 +1672,9 @@ def _flush_buffer() -> None: return for annotated_text_list in parts: + # One normalization per block: resolves boundaries across runs and trims the + # block edge, so nothing below strips individual runs. + annotated_text_list = annotated_text_list.normalize_whitespace() compacted_parts = self._compact_adjacent_single_char_parts( annotated_text_list ) @@ -1634,9 +1687,12 @@ def _flush_buffer() -> None: annotated_text_list, doc, force=force_inline_group ) as inline_ref: for annotated_text, source_tag_ids in compacted_parts: - if annotated_text.text.strip(): + # Keep whitespace-only runs: normalization already trimmed the block + # edges, so one that survives is a significant boundary (it carries the + # space between two adjacent code spans). + if annotated_text.text: seg_clean = HTMLDocumentBackend._clean_unicode( - annotated_text.text.strip() + annotated_text.text ) if annotated_text.code: prov = self._make_text_prov_for_source_tag_ids( @@ -1873,12 +1929,17 @@ def _extract_text_and_hyperlink_recursively( return AnnotatedTextList() if keep_newlines: - text: str = item.strip() + # Preformatted content: every space and newline is significant, so take it + # verbatim. Stripping each string used to be masked by the serializer's `" "` + # join; with a faithful join it merges words (`
See x first
`). + text: str = str(item) else: - # For normal content, collapse newlines to spaces (HTML spec behavior) - # but preserve the sentinel character for explicit
tags - text = item.replace("\n", " ").replace("\r", " ") - text = " ".join(text.split()) + # For normal content, collapse runs of whitespace to a single space (HTML spec + # behavior) but preserve the sentinel character for explicit
tags. + # Collapse only, never trim: `" ".join(s.split())` also stripped the edges, and + # that is where the run boundary lives -- `H2O` vs `x2 + y` + # are indistinguishable once it is gone. + text = _WHITESPACE_RUN.sub(" ", item) code = any(code_tag in self.format_tags for code_tag in _CODE_TAG_SET) source_tag_id = ( @@ -2164,7 +2225,9 @@ def _handle_heading(self, tag: Tag, doc: DoclingDocument) -> list[RefItem]: annotated_text_list = self._extract_text_and_hyperlink_recursively( tag, find_parent_annotation=True ) - annotated_text = annotated_text_list.to_single_text_element() + annotated_text = ( + annotated_text_list.normalize_whitespace().to_single_text_element() + ) text_clean = HTMLDocumentBackend._clean_unicode(annotated_text.text) prov = self._make_text_prov( text=text_clean, @@ -2319,10 +2382,8 @@ def _add_list_item_with_content( parts = self._extract_text_and_hyperlink_recursively( tag, ignore_list=True, find_parent_annotation=True ) - min_parts = parts.simplify_text_elements() - item_text = re.sub( - r"\s+|\n+", " ", "".join([el.text for el in min_parts]) - ).strip() + min_parts = parts.simplify_text_elements().normalize_whitespace() + item_text = "".join([el.text for el in min_parts]) if not item_text: return None @@ -2344,8 +2405,8 @@ def _add_list_item_with_content( with self._use_inline_group(min_parts, doc): compacted_parts = self._compact_adjacent_single_char_parts(min_parts) for annotated_text, source_tag_ids in compacted_parts: - text_part = re.sub(r"\s+|\n+", " ", annotated_text.text).strip() - clean_text = HTMLDocumentBackend._clean_unicode(text_part) + # Already normalized as one block above -- no per-run strip. + clean_text = HTMLDocumentBackend._clean_unicode(annotated_text.text) # Apply extra formatting if provided formatting = annotated_text.formatting @@ -2646,11 +2707,15 @@ def _handle_block(self, tag: Tag, doc: DoclingDocument) -> list[RefItem]: # noq ) annotated_texts: AnnotatedTextList = text_list.simplify_text_elements() for part in annotated_texts.split_by_newline(): + part = part.normalize_whitespace() compacted_part = self._compact_adjacent_single_char_parts(part) with self._use_inline_group(part, doc) as inline_ref: for annotated_text, source_tag_ids in compacted_part: - if seg := annotated_text.text.strip(): - seg_clean = HTMLDocumentBackend._clean_unicode(seg) + # See above: a surviving whitespace-only run is a significant boundary. + if annotated_text.text: + seg_clean = HTMLDocumentBackend._clean_unicode( + annotated_text.text + ) if annotated_text.code: prov = self._make_text_prov_for_source_tag_ids( text=seg_clean, @@ -2744,12 +2809,25 @@ def _handle_block(self, tag: Tag, doc: DoclingDocument) -> list[RefItem]: # noq tag, find_parent_annotation=True, keep_newlines=True ) annotated_texts = text_list.simplify_text_elements() + # Preformatted content: every interior space is significant, so trim the block + # edges once (HTML drops the newline right after `
`) instead of stripping each
+            # fragment. Stripping them merged `
See x first
` into one word + # once the serializer stopped inserting a separator. + if annotated_texts: + head = annotated_texts[0] + annotated_texts[0] = head.model_copy( + update={"text": head.text.lstrip("\n")} + ) + tail = annotated_texts[-1] + annotated_texts[-1] = tail.model_copy( + update={"text": tail.text.rstrip()} + ) language_hint = self._code_language_hint(tag) with self._use_inline_group(annotated_texts, doc) as inline_ref: for annotated_text in annotated_texts: - text_clean = HTMLDocumentBackend._clean_unicode( - annotated_text.text.strip() - ) + if not annotated_text.text: + continue + text_clean = HTMLDocumentBackend._clean_unicode(annotated_text.text) prov = self._make_prov( text=text_clean, tag=tag, @@ -4438,13 +4516,11 @@ def get_img_hyperlink(img_tag): caption = AnnotatedTextList([AnnotatedText(text=img_tag.get("alt"))]) caption_prov_tag = img_tag - caption_anno_text = caption.to_single_text_element() + caption_anno_text = caption.normalize_whitespace().to_single_text_element() caption_item: Optional[TextItem] = None if caption_anno_text.text: - text_clean = HTMLDocumentBackend._clean_unicode( - caption_anno_text.text.strip() - ) + text_clean = HTMLDocumentBackend._clean_unicode(caption_anno_text.text) prov = self._make_prov( text=text_clean, tag=caption_prov_tag or img_tag, diff --git a/docling/backend/md_backend.py b/docling/backend/md_backend.py index 67cbfba619..e6d53b2cc1 100644 --- a/docling/backend/md_backend.py +++ b/docling/backend/md_backend.py @@ -566,20 +566,25 @@ def _iterate_elements( # noqa: C901 original_text = ( element.children if isinstance(element.children, str) else "" ) - snippet_text = unescape(original_text.strip()) - is_table_row = bool(snippet_text) and ( + # Keep the raw fragment: whitespace at a `RawText` edge is the boundary between + # inline runs (`Foo *emph* bar` -> `"Foo "`, `"emph"`, `" bar"`) and the serializers + # concatenate faithfully. Marko has already trimmed the block edges for us. + # Table parsing stays on the stripped text -- it works on whole source lines. + snippet_text = unescape(original_text) + stripped_text = unescape(original_text.strip()) + is_table_row = bool(stripped_text) and ( # A header cell in bold or a link arrives as its own node with # no pipe in it, so once the paragraph is known to be a table, # every piece of it belongs to that table, pipe or not. self.in_pipeless_table or ( - "|" in snippet_text + "|" in stripped_text and (self.in_table or original_text.lstrip().startswith("|")) ) ) if is_table_row: self.in_table = True - if self.in_table and snippet_text: + if self.in_table and stripped_text: snippet_text = self._unescape_except_pipe(original_text.strip()) # If we're in a table, keep adding text (for formatted content in cells) if self.md_table_buffer: @@ -591,10 +596,11 @@ def _iterate_elements( # noqa: C901 self._close_table(doc) if creation_stack: + # Headings and list items become one item's own text, not a run: trim. parent_item = self._flush_creation_stack( doc=doc, creation_stack=creation_stack, - snippet_text=snippet_text, + snippet_text=stripped_text, parent_item=parent_item, list_ordered_flag_by_ref=list_ordered_flag_by_ref, list_last_item_by_ref=list_last_item_by_ref, @@ -656,6 +662,17 @@ def _iterate_elements( # noqa: C901 if self.in_table: _log.debug("Line break in a table") self.md_table_buffer.append("") + elif element.soft: + # A soft-wrapped paragraph renders as one line with a space at the wrap point. + # Dropping it used to be masked by the serializer's `" "` join between runs; + # with a faithful join it merges the words across the wrap. + doc.add_text( + label=DocItemLabel.TEXT, + parent=parent_item, + text=" ", + formatting=formatting, + hyperlink=hyperlink, + ) elif isinstance(element, marko.block.HTMLBlock): self._html_blocks += 1 diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 74b3679357..547725858a 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -163,6 +163,29 @@ """OOXML numFmt values that produce visible list/heading markers.""" +def _trim_run_edges( + runs: list[tuple[str, Formatting | None, AnyUrl | Path | None]], +) -> list[tuple[str, Formatting | None, AnyUrl | Path | None]]: + """Trim only the outer edges of a run sequence, leaving interior whitespace intact. + + Same shape as the ODF backend's ``_normalize_odf_text_runs``: leading and trailing + whitespace belongs to the block, whitespace between runs belongs to the text. + """ + while runs and not runs[0][0].strip(): + runs.pop(0) + if runs: + text, formatting, hyperlink = runs[0] + runs[0] = (text.lstrip(), formatting, hyperlink) + + while runs and not runs[-1][0].strip(): + runs.pop() + if runs: + text, formatting, hyperlink = runs[-1] + runs[-1] = (text.rstrip(), formatting, hyperlink) + + return [run for run in runs if run[0]] + + def _strict_ns_to_transitional(strict_ns: str) -> str: """Map a single Strict OOXML namespace/relationship URI to its Transitional form.""" if strict_ns in _STRICT_OOXML_NS_OVERRIDES: @@ -1593,21 +1616,22 @@ def _get_paragraph_elements(self, paragraph: Paragraph): group_text = "" previous_format = None - # Iterate over the runs of the paragraph and group them by format + # Group the runs by format, concatenating faithfully: in DOCX the boundary space very + # often lives inside a formatted run, and it is the run's own text (see + # `DoclingDocument.add_inline_group`). Stripping each group here is what forced the + # serializers to invent separators. for text, format, hyperlink in self._iter_paragraph_content(paragraph): if (len(text.strip()) and format != previous_format) or ( hyperlink is not None ): # If the style changes for a non empty text, add the previous group - if len(group_text.strip()) > 0: - paragraph_elements.append( - (group_text.strip(), previous_format, None) - ) + if group_text: + paragraph_elements.append((group_text, previous_format, None)) group_text = "" # If there is a hyperlink, add it immediately if hyperlink is not None: - paragraph_elements.append((text.strip(), format, hyperlink)) + paragraph_elements.append((text, format, hyperlink)) text = "" else: previous_format = format @@ -1615,10 +1639,10 @@ def _get_paragraph_elements(self, paragraph: Paragraph): group_text += text # Format the last group - if len(group_text.strip()) > 0: - paragraph_elements.append((group_text.strip(), previous_format, None)) + if group_text: + paragraph_elements.append((group_text, previous_format, None)) - return paragraph_elements + return _trim_run_edges(paragraph_elements) def _has_checkbox(self, element: BaseOxmlElement) -> bool: """Check if a paragraph element contains a checkbox. @@ -2423,6 +2447,7 @@ def _add_inline_equations_to_parent( equations: List of equation strings with markers (e.g., ["A=B", ...]). elem_ref: Optional list to append created element references to. """ + runs: list[tuple[DocItemLabel, str]] = [] text_tmp = text for eq in equations: if len(text_tmp) == 0: @@ -2434,33 +2459,34 @@ def _add_inline_equations_to_parent( text_tmp = "" if len(split_text_tmp) == 1 else split_text_tmp[1] if len(pre_eq_text) > 0: - e1 = doc.add_text( - label=DocItemLabel.TEXT, - parent=parent, - text=pre_eq_text, - content_layer=self.content_layer, - ) - if elem_ref is not None: - elem_ref.append(e1.get_ref()) - - e2 = doc.add_text( - label=DocItemLabel.FORMULA, - parent=parent, - text=eq.replace("", "").replace("", ""), - content_layer=self.content_layer, + runs.append((DocItemLabel.TEXT, pre_eq_text)) + runs.append( + (DocItemLabel.FORMULA, eq.replace("", "").replace("", "")) ) - if elem_ref is not None: - elem_ref.append(e2.get_ref()) if len(text_tmp) > 0: - e3 = doc.add_text( - label=DocItemLabel.TEXT, + runs.append((DocItemLabel.TEXT, text_tmp)) + + # Trim the paragraph's outer edges only. The whitespace around an inline equation is a + # significant run boundary: stripping the fragment after the last equation merged it + # into the formula (`$A=\pi r^{2}$is the area formula`) once the serializer stopped + # inventing a separator. + if runs and runs[0][0] == DocItemLabel.TEXT: + runs[0] = (DocItemLabel.TEXT, runs[0][1].lstrip()) + if runs and runs[-1][0] == DocItemLabel.TEXT: + runs[-1] = (DocItemLabel.TEXT, runs[-1][1].rstrip()) + + for label, run_text in runs: + if label == DocItemLabel.TEXT and not run_text: + continue + item = doc.add_text( + label=label, parent=parent, - text=text_tmp.strip(), + text=run_text, content_layer=self.content_layer, ) if elem_ref is not None: - elem_ref.append(e3.get_ref()) + elem_ref.append(item.get_ref()) def _manage_list_structure( self, diff --git a/docling/backend/xml/jats_backend.py b/docling/backend/xml/jats_backend.py index 43dcaee9ba..fca5d6e4b6 100755 --- a/docling/backend/xml/jats_backend.py +++ b/docling/backend/xml/jats_backend.py @@ -696,13 +696,25 @@ def _merge_formatting(formatting: Formatting | None, tag: str) -> Formatting | N return base.model_copy(update=_JATS_FORMAT_TAG_MAP[tag]) @staticmethod - def _strip_segments(segments: list[InlineSegment]) -> list[InlineSegment]: - stripped: list[InlineSegment] = [] - for segment in segments: - text = segment.text.strip() - if text: - stripped.append(replace(segment, text=text)) - return stripped + def _trim_segment_edges(segments: list[InlineSegment]) -> list[InlineSegment]: + """Trim the outer edges of a segment sequence, keeping interior whitespace. + + Stripping *every* segment destroyed the run boundaries, forcing the serializers to + invent a separator. Adjacent equal-format runs are already coalesced by + ``_append_run``, so only the block edges need trimming (as in the ODF backend). + """ + trimmed = list(segments) + while trimmed and not trimmed[0].text.strip(): + trimmed.pop(0) + if trimmed: + trimmed[0] = replace(trimmed[0], text=trimmed[0].text.lstrip()) + + while trimmed and not trimmed[-1].text.strip(): + trimmed.pop() + if trimmed: + trimmed[-1] = replace(trimmed[-1], text=trimmed[-1].text.rstrip()) + + return [segment for segment in trimmed if segment.text] @staticmethod def _walk_inline_formula( @@ -780,7 +792,7 @@ def _emit_inline( doc: DoclingDocument, parent: NodeItem, segments: list[InlineSegment] ) -> None: """Emit inline segments under ``parent``, wrapping many in an inline group.""" - segments = JatsDocumentBackend._strip_segments(segments) + segments = JatsDocumentBackend._trim_segment_edges(segments) if not segments: return container = doc.add_inline_group(parent=parent) if len(segments) > 1 else parent diff --git a/tests/data/boxnote/groundtruth/sample.boxnote.json b/tests/data/boxnote/groundtruth/sample.boxnote.json index 1ca83676dc..ca97378d8f 100644 --- a/tests/data/boxnote/groundtruth/sample.boxnote.json +++ b/tests/data/boxnote/groundtruth/sample.boxnote.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "sample", "origin": { "mimetype": "application/vnd.box.boxnote", diff --git a/tests/data/boxnote/groundtruth/sample.boxnote.md b/tests/data/boxnote/groundtruth/sample.boxnote.md index fbfd63746c..5d7d304ffd 100644 --- a/tests/data/boxnote/groundtruth/sample.boxnote.md +++ b/tests/data/boxnote/groundtruth/sample.boxnote.md @@ -1,6 +1,6 @@ # Release notes -We shipped a **new** parser. See the [docs](https://example.com/docs) for details. +We shipped a **new** parser. See the [docs](https://example.com/docs) for details. ## Highlights diff --git a/tests/data/csv/groundtruth/csv-comma-in-cell.csv.json b/tests/data/csv/groundtruth/csv-comma-in-cell.csv.json index f6d93d5b3d..0295bb2837 100644 --- a/tests/data/csv/groundtruth/csv-comma-in-cell.csv.json +++ b/tests/data/csv/groundtruth/csv-comma-in-cell.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-comma-in-cell", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-comma.csv.json b/tests/data/csv/groundtruth/csv-comma.csv.json index 1dcd456dd6..70332d65e4 100644 --- a/tests/data/csv/groundtruth/csv-comma.csv.json +++ b/tests/data/csv/groundtruth/csv-comma.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-comma", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-inconsistent-header.csv.json b/tests/data/csv/groundtruth/csv-inconsistent-header.csv.json index 3787d72318..1fbd4b3dad 100644 --- a/tests/data/csv/groundtruth/csv-inconsistent-header.csv.json +++ b/tests/data/csv/groundtruth/csv-inconsistent-header.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-inconsistent-header", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-pipe.csv.json b/tests/data/csv/groundtruth/csv-pipe.csv.json index 28540eac96..260c38ce9d 100644 --- a/tests/data/csv/groundtruth/csv-pipe.csv.json +++ b/tests/data/csv/groundtruth/csv-pipe.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-pipe", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-semicolon.csv.json b/tests/data/csv/groundtruth/csv-semicolon.csv.json index 7aa1ed2b27..2c907b92b1 100644 --- a/tests/data/csv/groundtruth/csv-semicolon.csv.json +++ b/tests/data/csv/groundtruth/csv-semicolon.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-semicolon", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-single-column.csv.json b/tests/data/csv/groundtruth/csv-single-column.csv.json index 8835fc1461..4ea4f43a74 100644 --- a/tests/data/csv/groundtruth/csv-single-column.csv.json +++ b/tests/data/csv/groundtruth/csv-single-column.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-single-column", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-tab.csv.json b/tests/data/csv/groundtruth/csv-tab.csv.json index 8a7a2d121a..c41d9957f7 100644 --- a/tests/data/csv/groundtruth/csv-tab.csv.json +++ b/tests/data/csv/groundtruth/csv-tab.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-tab", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-too-few-columns.csv.json b/tests/data/csv/groundtruth/csv-too-few-columns.csv.json index 89ced8476c..1ca69f2a5f 100644 --- a/tests/data/csv/groundtruth/csv-too-few-columns.csv.json +++ b/tests/data/csv/groundtruth/csv-too-few-columns.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-too-few-columns", "origin": { "mimetype": "text/csv", diff --git a/tests/data/csv/groundtruth/csv-too-many-columns.csv.json b/tests/data/csv/groundtruth/csv-too-many-columns.csv.json index ad19eee691..5a322d4aed 100644 --- a/tests/data/csv/groundtruth/csv-too-many-columns.csv.json +++ b/tests/data/csv/groundtruth/csv-too-many-columns.csv.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "csv-too-many-columns", "origin": { "mimetype": "text/csv", diff --git a/tests/data/docx/groundtruth/Strict.docx.json b/tests/data/docx/groundtruth/Strict.docx.json index 4a72b86920..05ab08e5a9 100644 --- a/tests/data/docx/groundtruth/Strict.docx.json +++ b/tests/data/docx/groundtruth/Strict.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "Strict", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/Transitional.docx.json b/tests/data/docx/groundtruth/Transitional.docx.json index f932b1f6e5..14b45d09cc 100644 --- a/tests/data/docx/groundtruth/Transitional.docx.json +++ b/tests/data/docx/groundtruth/Transitional.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "Transitional", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_checkboxes.docx.json b/tests/data/docx/groundtruth/docx_checkboxes.docx.json index 13e02a1f2c..3b5f626156 100644 --- a/tests/data/docx/groundtruth/docx_checkboxes.docx.json +++ b/tests/data/docx/groundtruth/docx_checkboxes.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_checkboxes", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_code_blocks.docx.json b/tests/data/docx/groundtruth/docx_code_blocks.docx.json index d7d9d2524c..5ad3b59b06 100644 --- a/tests/data/docx/groundtruth/docx_code_blocks.docx.json +++ b/tests/data/docx/groundtruth/docx_code_blocks.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_code_blocks", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_comments.docx.json b/tests/data/docx/groundtruth/docx_comments.docx.json index 670c1f76fd..581cc24675 100644 --- a/tests/data/docx/groundtruth/docx_comments.docx.json +++ b/tests/data/docx/groundtruth/docx_comments.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_comments", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_external_image.docx.json b/tests/data/docx/groundtruth/docx_external_image.docx.json index 7cd9fc3b2f..5bef8dd10c 100644 --- a/tests/data/docx/groundtruth/docx_external_image.docx.json +++ b/tests/data/docx/groundtruth/docx_external_image.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_external_image", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_grouped_images.docx.json b/tests/data/docx/groundtruth/docx_grouped_images.docx.json index d63ec6b90f..1bb3a9e65e 100644 --- a/tests/data/docx/groundtruth/docx_grouped_images.docx.json +++ b/tests/data/docx/groundtruth/docx_grouped_images.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_grouped_images", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_lists.docx.json b/tests/data/docx/groundtruth/docx_lists.docx.json index 27bed7e7e9..1cc75da228 100644 --- a/tests/data/docx/groundtruth/docx_lists.docx.json +++ b/tests/data/docx/groundtruth/docx_lists.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_lists", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.html b/tests/data/docx/groundtruth/docx_rich_cells.docx.html index be69ab91e7..f275b8e303 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.html +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.html @@ -196,30 +196,30 @@

Table with rich cells

  • Number one
  • Number two
  • Number three
  • -

    This is simple text with

    +

    This is simple text with

    bold

    -

    ,

    +

    ,

    strikethrough

    -

    and

    +

    and

    italic

    -

    formatting with x

    +

    formatting with x

    2

    -

    and H

    +

    and H

    2

    O

    This is a paragraph

    This is another paragraph

    Table with nested table

    Before table

    -
    Column AColumn B
    Simple cell upper left

    Simple cell with

    +
    Column AColumn B
    Simple cell upper left

    Simple cell with

    bold

    -

    and

    +

    and

    italic

    -

    text

    ABC

    Cell 1

    Cell 2

    Cell 3

    +

    text

    ABC

    Cell 1

    Cell 2

    Cell 3

    Rich cell
    A nested table

    ABC

    Cell 1

    Cell 2

    Cell 3

    -After table with bold , underline , strikethrough , and italic formatting +After table with bold, underline, strikethrough, and italic formatting

    Table with pictures

    diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.itxt b/tests/data/docx/groundtruth/docx_rich_cells.docx.itxt index 406fe7873f..d55f186d64 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.itxt +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.itxt @@ -14,15 +14,15 @@ item-0 at level 0: unspecified: group _root_ item-13 at level 6: list: group list item-14 at level 7: list_item: item-15 at level 8: inline: group group - item-16 at level 9: text: B + item-16 at level 9: text: B item-17 at level 9: text: First item-18 at level 7: list_item: item-19 at level 8: inline: group group - item-20 at level 9: text: B + item-20 at level 9: text: B item-21 at level 9: text: Second item-22 at level 7: list_item: item-23 at level 8: inline: group group - item-24 at level 9: text: B + item-24 at level 9: text: B item-25 at level 9: text: Third item-26 at level 5: unspecified: group rich_cell_group_1_0_2 item-27 at level 6: text: First Paragraph @@ -34,15 +34,15 @@ Second Paragraph item-31 at level 7: list_item: Number two item-32 at level 7: list_item: Number three item-33 at level 5: unspecified: group rich_cell_group_1_1_2 - item-34 at level 6: text: This is simple text with + item-34 at level 6: text: This is simple text with item-35 at level 6: text: bold - item-36 at level 6: text: , + item-36 at level 6: text: , item-37 at level 6: text: strikethrough - item-38 at level 6: text: and + item-38 at level 6: text: and item-39 at level 6: text: italic - item-40 at level 6: text: formatting with x + item-40 at level 6: text: formatting with x item-41 at level 6: text: 2 - item-42 at level 6: text: and H + item-42 at level 6: text: and H item-43 at level 6: text: 2 item-44 at level 6: text: O item-45 at level 5: unspecified: group rich_cell_group_1_0_3 @@ -54,11 +54,11 @@ Second Paragraph item-51 at level 4: text: Before table item-52 at level 4: table with [3x2] item-53 at level 5: unspecified: group rich_cell_group_2_1_1 - item-54 at level 6: text: Simple cell with + item-54 at level 6: text: Simple cell with item-55 at level 6: text: bold - item-56 at level 6: text: and + item-56 at level 6: text: and item-57 at level 6: text: italic - item-58 at level 6: text: text + item-58 at level 6: text: text item-59 at level 5: unspecified: group rich_cell_group_3_0_2 item-60 at level 6: table with [2x3] item-61 at level 7: unspecified: group rich_cell_group_3_0_1 @@ -81,15 +81,15 @@ A nested table item-77 at level 6: text: item-78 at level 4: inline: group group item-79 at level 4: inline: group group - item-80 at level 5: text: After table with + item-80 at level 5: text: After table with item-81 at level 5: text: bold - item-82 at level 5: text: , + item-82 at level 5: text: , item-83 at level 5: text: underline - item-84 at level 5: text: , + item-84 at level 5: text: , item-85 at level 5: text: strikethrough - item-86 at level 5: text: , and + item-86 at level 5: text: , and item-87 at level 5: text: italic - item-88 at level 5: text: formatting + item-88 at level 5: text: formatting item-89 at level 4: text: item-90 at level 3: section_header: Table with pictures item-91 at level 4: text: diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.json b/tests/data/docx/groundtruth/docx_rich_cells.docx.json index c3295f878e..fc91e6e8e1 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.json +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_rich_cells", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -966,8 +966,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "B", - "text": "B", + "orig": "B ", + "text": "B ", "formatting": { "bold": false, "italic": false, @@ -1022,8 +1022,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "B", - "text": "B", + "orig": "B ", + "text": "B ", "formatting": { "bold": false, "italic": false, @@ -1078,8 +1078,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "B", - "text": "B", + "orig": "B ", + "text": "B ", "formatting": { "bold": false, "italic": false, @@ -1217,8 +1217,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is simple text with", - "text": "This is simple text with", + "orig": "This is simple text with ", + "text": "This is simple text with ", "formatting": { "bold": false, "italic": false, @@ -1255,8 +1255,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": ",", + "orig": ", ", + "text": ", ", "formatting": { "bold": false, "italic": false, @@ -1293,8 +1293,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and", + "orig": " and ", + "text": " and ", "formatting": { "bold": false, "italic": false, @@ -1331,8 +1331,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "formatting with x", - "text": "formatting with x", + "orig": " formatting with x", + "text": " formatting with x", "formatting": { "bold": false, "italic": false, @@ -1369,8 +1369,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and H", - "text": "and H", + "orig": " and H", + "text": " and H", "formatting": { "bold": false, "italic": false, @@ -1524,8 +1524,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Simple cell with", - "text": "Simple cell with", + "orig": "Simple cell with ", + "text": "Simple cell with ", "formatting": { "bold": false, "italic": false, @@ -1562,8 +1562,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and", + "orig": " and ", + "text": " and ", "formatting": { "bold": false, "italic": false, @@ -1600,8 +1600,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "text", - "text": "text", + "orig": " text", + "text": " text", "formatting": { "bold": false, "italic": false, @@ -1776,8 +1776,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "After table with", - "text": "After table with", + "orig": "After table with ", + "text": "After table with ", "formatting": { "bold": false, "italic": false, @@ -1814,8 +1814,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": ",", + "orig": ", ", + "text": ", ", "formatting": { "bold": false, "italic": false, @@ -1852,8 +1852,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": ",", + "orig": ", ", + "text": ", ", "formatting": { "bold": false, "italic": false, @@ -1890,8 +1890,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and", - "text": ", and", + "orig": ", and ", + "text": ", and ", "formatting": { "bold": false, "italic": false, @@ -1928,8 +1928,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "formatting", - "text": "formatting", + "orig": " formatting", + "text": " formatting", "formatting": { "bold": false, "italic": false, diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.md b/tests/data/docx/groundtruth/docx_rich_cells.docx.md index 7617de3f1c..f3a8ab279a 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.md +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.md @@ -3,7 +3,7 @@ | Column A | Column B | | - | - | | This is a list: - A First - A Second - A Third | This is a formatted list: - B **First** - B *Second* - B Third | -| First Paragraph Second Paragraph Third paragraph before a numbered list 1. Number one 2. Number two 3. Number three | This is simple text with **bold** , ~~strikethrough~~ and *italic* formatting with x 2 and H 2 O | +| First Paragraph Second Paragraph Third paragraph before a numbered list 1. Number one 2. Number two 3. Number three | This is simple text with **bold** , ~~strikethrough~~ and *italic* formatting with x 2 and H 2 O | | This is a paragraph This is another paragraph | | ### Table with nested table @@ -12,10 +12,10 @@ Before table | Column A | Column B | | - | - | -| Simple cell upper left | Simple cell with **bold** and *italic* text | +| Simple cell upper left | Simple cell with **bold** and *italic* text | | A B C Cell 1 Cell 2 Cell 3 | Rich cell A nested table A B C Cell 1 Cell 2 Cell 3 | -After table with **bold** , underline , ~~strikethrough~~ , and *italic* formatting +After table with **bold**, underline, ~~strikethrough~~, and *italic* formatting ### Table with pictures diff --git a/tests/data/docx/groundtruth/docx_rich_tables_01.docx.itxt b/tests/data/docx/groundtruth/docx_rich_tables_01.docx.itxt index 320b6815ba..02aec52f7b 100644 --- a/tests/data/docx/groundtruth/docx_rich_tables_01.docx.itxt +++ b/tests/data/docx/groundtruth/docx_rich_tables_01.docx.itxt @@ -8,11 +8,11 @@ item-0 at level 0: unspecified: group _root_ item-7 at level 2: list_item: item-8 at level 3: inline: group group item-9 at level 4: text: Phase 1 - item-10 at level 4: text: (Macro-Level Structural Realignm ... ISO verbal forms (shall, should, may). + item-10 at level 4: text: (Macro-Level Structural Realign ... ISO verbal forms (shall, should, may). item-11 at level 2: list_item: item-12 at level 3: inline: group group item-13 at level 4: text: Phase 2 - item-14 at level 4: text: (Micro-Level Editorial Optimizat ... it passes the final publishing system. + item-14 at level 4: text: (Micro-Level Editorial Optimiza ... it passes the final publishing system. item-15 at level 1: text: item-16 at level 1: text: Phase 1 item-17 at level 1: table with [24x3] diff --git a/tests/data/docx/groundtruth/docx_rich_tables_01.docx.json b/tests/data/docx/groundtruth/docx_rich_tables_01.docx.json index 7d741ac593..8fb366451b 100644 --- a/tests/data/docx/groundtruth/docx_rich_tables_01.docx.json +++ b/tests/data/docx/groundtruth/docx_rich_tables_01.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_rich_tables_01", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -400,8 +400,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Macro-Level Structural Realignment) fixes the document's main layout. It forces the strict standard clause order, removes forbidden company and author names, cuts out critiques of competing formats, and changes all casual requirement language or uppercase tokens into standard lowercase ISO verbal forms (shall, should, may).", - "text": "(Macro-Level Structural Realignment) fixes the document's main layout. It forces the strict standard clause order, removes forbidden company and author names, cuts out critiques of competing formats, and changes all casual requirement language or uppercase tokens into standard lowercase ISO verbal forms (shall, should, may).", + "orig": " (Macro-Level Structural Realignment) fixes the document's main layout. It forces the strict standard clause order, removes forbidden company and author names, cuts out critiques of competing formats, and changes all casual requirement language or uppercase tokens into standard lowercase ISO verbal forms (shall, should, may).", + "text": " (Macro-Level Structural Realignment) fixes the document's main layout. It forces the strict standard clause order, removes forbidden company and author names, cuts out critiques of competing formats, and changes all casual requirement language or uppercase tokens into standard lowercase ISO verbal forms (shall, should, may).", "formatting": { "bold": false, "italic": false, @@ -456,8 +456,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Micro-Level Editorial Optimization) cleans up the small details required by the ISO House Style. This fixes layout bugs like ha nging paragraphs, adds spaces to large numbers (e.g., 65 535), writes out printable web links for physical paper copies, uses proper math subscript formatting, and limits all typography to standard fonts so it passes the final publishing system.", - "text": "(Micro-Level Editorial Optimization) cleans up the small details required by the ISO House Style. This fixes layout bugs like ha nging paragraphs, adds spaces to large numbers (e.g., 65 535), writes out printable web links for physical paper copies, uses proper math subscript formatting, and limits all typography to standard fonts so it passes the final publishing system.", + "orig": " (Micro-Level Editorial Optimization) cleans up the small details required by the ISO House Style. This fixes layout bugs like ha nging paragraphs, adds spaces to large numbers (e.g., 65 535), writes out printable web links for physical paper copies, uses proper math subscript formatting, and limits all typography to standard fonts so it passes the final publishing system.", + "text": " (Micro-Level Editorial Optimization) cleans up the small details required by the ISO House Style. This fixes layout bugs like ha nging paragraphs, adds spaces to large numbers (e.g., 65 535), writes out printable web links for physical paper copies, uses proper math subscript formatting, and limits all typography to standard fonts so it passes the final publishing system.", "formatting": { "bold": false, "italic": false, diff --git a/tests/data/docx/groundtruth/docx_vml_images.docx.json b/tests/data/docx/groundtruth/docx_vml_images.docx.json index ccda20001e..10da90f47e 100644 --- a/tests/data/docx/groundtruth/docx_vml_images.docx.json +++ b/tests/data/docx/groundtruth/docx_vml_images.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_vml_images", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/equations.docx.itxt b/tests/data/docx/groundtruth/equations.docx.itxt index 74482ddae5..4ff5ff819d 100644 --- a/tests/data/docx/groundtruth/equations.docx.itxt +++ b/tests/data/docx/groundtruth/equations.docx.itxt @@ -8,19 +8,19 @@ item-0 at level 0: unspecified: group _root_ item-7 at level 3: inline: group group item-8 at level 4: text: First item with inline equation: item-9 at level 4: formula: A= \pi r^{2} - item-10 at level 4: text: is the area formula. + item-10 at level 4: text: is the area formula. item-11 at level 2: list_item: item-12 at level 3: inline: group group item-13 at level 4: text: Second item with equations: item-14 at level 4: formula: E=mc^{2} item-15 at level 4: text: and item-16 at level 4: formula: F=ma - item-17 at level 4: text: are physics formulas. + item-17 at level 4: text: are physics formulas. item-18 at level 2: list_item: item-19 at level 3: inline: group group item-20 at level 4: text: The formula item-21 at level 4: formula: a^{2}+b^{2}=c^{2} - item-22 at level 4: text: is the Pythagorean theorem. + item-22 at level 4: text: is the Pythagorean theorem. item-23 at level 1: text: If instead, I want an equation by line, I can do this: item-24 at level 1: text: item-25 at level 1: formula: a^{2}+b^{2}=c^{2} \times 23 diff --git a/tests/data/docx/groundtruth/equations.docx.json b/tests/data/docx/groundtruth/equations.docx.json index 23659d5067..2ff593fa82 100644 --- a/tests/data/docx/groundtruth/equations.docx.json +++ b/tests/data/docx/groundtruth/equations.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "equations", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -447,8 +447,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the area formula.", - "text": "is the area formula." + "orig": " is the area formula.", + "text": " is the area formula." }, { "self_ref": "#/texts/7", @@ -525,8 +525,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are physics formulas.", - "text": "are physics formulas." + "orig": " are physics formulas.", + "text": " are physics formulas." }, { "self_ref": "#/texts/13", @@ -579,8 +579,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the Pythagorean theorem.", - "text": "is the Pythagorean theorem." + "orig": " is the Pythagorean theorem.", + "text": " is the Pythagorean theorem." }, { "self_ref": "#/texts/17", diff --git a/tests/data/docx/groundtruth/equations.docx.md b/tests/data/docx/groundtruth/equations.docx.md index 6f6b9a5fd9..a47349f066 100644 --- a/tests/data/docx/groundtruth/equations.docx.md +++ b/tests/data/docx/groundtruth/equations.docx.md @@ -1,8 +1,8 @@ -This is a word document and this is an inline equation: $A= \pi r^{2}$ . +This is a word document and this is an inline equation: $A= \pi r^{2}$. -- First item with inline equation: $A= \pi r^{2}$ is the area formula. -- Second item with equations: $E=mc^{2}$ and $F=ma$ are physics formulas. -- The formula $a^{2}+b^{2}=c^{2}$ is the Pythagorean theorem. +- First item with inline equation: $A= \pi r^{2}$ is the area formula. +- Second item with equations: $E=mc^{2}$ and $F=ma$ are physics formulas. +- The formula $a^{2}+b^{2}=c^{2}$ is the Pythagorean theorem. If instead, I want an equation by line, I can do this: @@ -16,7 +16,7 @@ $$f\left(x\right)=a_{0}+\sum_{n=1}^{ \infty }\left(a_{n}\cos(\frac{n \pi x}{L})+ This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. -This is a word document and this is an inline equation: $A= \pi r^{2}$ . If instead, I want an equation by line, I can do this: +This is a word document and this is an inline equation: $A= \pi r^{2}$. If instead, I want an equation by line, I can do this: $$\left(x+a\right)^{n}=\sum_{k=0}^{n}\left(\genfrac{}{}{0pt}{}{n}{k}\right)x^{k}a^{n-k}$$ @@ -28,7 +28,7 @@ $$\left(1+x\right)^{n}=1+\frac{nx}{1!}+\frac{n\left(n-1\right)x^{2}}{2!}+ \text{ This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. This is text. -This is a word document and these are inline equations: $N_{s}^{H}$ / $N_{s}^{P}$ ​. If instead, I want an equation by line, I can do this: +This is a word document and these are inline equations: $N_{s}^{H}$/$N_{s}^{P}$​. If instead, I want an equation by line, I can do this: $$e^{x}=1+\frac{x}{1!}+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+ \text{ \textellipsis } , - \infty < x < \infty$$ diff --git a/tests/data/docx/groundtruth/list_after_num_headers.docx.json b/tests/data/docx/groundtruth/list_after_num_headers.docx.json index 694f8ed85b..1becb8fe91 100644 --- a/tests/data/docx/groundtruth/list_after_num_headers.docx.json +++ b/tests/data/docx/groundtruth/list_after_num_headers.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "list_after_num_headers", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/list_after_num_headers.docx.md b/tests/data/docx/groundtruth/list_after_num_headers.docx.md index d10fbcab53..7618e8fd10 100644 --- a/tests/data/docx/groundtruth/list_after_num_headers.docx.md +++ b/tests/data/docx/groundtruth/list_after_num_headers.docx.md @@ -7,8 +7,8 @@ ### 1 Glosario -- **Term 1** : Definition 1 -- **Term 2** : Definition 2 -- **Term 3** : Definition 3 -- **Term 4** : Definition 4 -- **Term 5** : Definition 5 \ No newline at end of file +- **Term 1**: Definition 1 +- **Term 2**: Definition 2 +- **Term 3**: Definition 3 +- **Term 4**: Definition 4 +- **Term 5**: Definition 5 \ No newline at end of file diff --git a/tests/data/docx/groundtruth/lorem_ipsum.docx.json b/tests/data/docx/groundtruth/lorem_ipsum.docx.json index f353f24c5e..976c288ad0 100644 --- a/tests/data/docx/groundtruth/lorem_ipsum.docx.json +++ b/tests/data/docx/groundtruth/lorem_ipsum.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "lorem_ipsum", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/omml_frac_superscript.docx.json b/tests/data/docx/groundtruth/omml_frac_superscript.docx.json index 09eae91a23..b8db9546f1 100644 --- a/tests/data/docx/groundtruth/omml_frac_superscript.docx.json +++ b/tests/data/docx/groundtruth/omml_frac_superscript.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "omml_frac_superscript", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/omml_func_log.docx.json b/tests/data/docx/groundtruth/omml_func_log.docx.json index dbefec2c48..0af14978de 100644 --- a/tests/data/docx/groundtruth/omml_func_log.docx.json +++ b/tests/data/docx/groundtruth/omml_func_log.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "omml_func_log", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/omml_multi_equation_paragraph.docx.json b/tests/data/docx/groundtruth/omml_multi_equation_paragraph.docx.json index a399d94e48..ba31341fcd 100644 --- a/tests/data/docx/groundtruth/omml_multi_equation_paragraph.docx.json +++ b/tests/data/docx/groundtruth/omml_multi_equation_paragraph.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "omml_multi_equation_paragraph", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/omml_text_escapes_in_math.docx.json b/tests/data/docx/groundtruth/omml_text_escapes_in_math.docx.json index b22316fe8b..23cbfa206b 100644 --- a/tests/data/docx/groundtruth/omml_text_escapes_in_math.docx.json +++ b/tests/data/docx/groundtruth/omml_text_escapes_in_math.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "omml_text_escapes_in_math", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/table_with_equations.docx.json b/tests/data/docx/groundtruth/table_with_equations.docx.json index cd738ea3ad..adf7a97b2f 100644 --- a/tests/data/docx/groundtruth/table_with_equations.docx.json +++ b/tests/data/docx/groundtruth/table_with_equations.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_with_equations", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/tablecell.docx.json b/tests/data/docx/groundtruth/tablecell.docx.json index 397d0778b2..76fc1da24e 100644 --- a/tests/data/docx/groundtruth/tablecell.docx.json +++ b/tests/data/docx/groundtruth/tablecell.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "tablecell", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/test_emf_docx.docx.json b/tests/data/docx/groundtruth/test_emf_docx.docx.json index f1d0c63ca9..a2125c07b9 100644 --- a/tests/data/docx/groundtruth/test_emf_docx.docx.json +++ b/tests/data/docx/groundtruth/test_emf_docx.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "test_emf_docx", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt b/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt index f54f15c9a1..bed7ca63db 100644 --- a/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt +++ b/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt @@ -5,13 +5,13 @@ item-0 at level 0: unspecified: group _root_ item-4 at level 1: text: hyperlink item-5 at level 1: text: italic and bold hyperlink item-6 at level 1: inline: group group - item-7 at level 2: text: Normal - item-8 at level 2: text: italic - item-9 at level 2: text: bold - item-10 at level 2: text: underline - item-11 at level 2: text: and + item-7 at level 2: text: Normal + item-8 at level 2: text: italic + item-9 at level 2: text: bold + item-10 at level 2: text: underline + item-11 at level 2: text: and item-12 at level 2: text: hyperlink - item-13 at level 2: text: on the same line + item-13 at level 2: text: on the same line item-14 at level 1: text: item-15 at level 1: list: group list item-16 at level 2: list_item: Italic bullet 1 @@ -19,15 +19,15 @@ item-0 at level 0: unspecified: group _root_ item-18 at level 2: list_item: Underline bullet 3 item-19 at level 2: list_item: item-20 at level 3: inline: group group - item-21 at level 4: text: Some - item-22 at level 4: text: italic - item-23 at level 4: text: bold + item-21 at level 4: text: Some + item-22 at level 4: text: italic + item-23 at level 4: text: bold item-24 at level 4: text: underline item-25 at level 2: list: group list item-26 at level 3: list_item: item-27 at level 4: inline: group group - item-28 at level 5: text: Nested - item-29 at level 5: text: italic + item-28 at level 5: text: Nested + item-29 at level 5: text: italic item-30 at level 5: text: bold item-31 at level 1: text: item-32 at level 1: text: The second page of the document with same header and footer diff --git a/tests/data/docx/groundtruth/unit_test_formatting.docx.json b/tests/data/docx/groundtruth/unit_test_formatting.docx.json index 91aa39e2be..8d1a4ba3c1 100644 --- a/tests/data/docx/groundtruth/unit_test_formatting.docx.json +++ b/tests/data/docx/groundtruth/unit_test_formatting.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "unit_test_formatting", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -382,8 +382,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Normal", - "text": "Normal", + "orig": "Normal ", + "text": "Normal ", "formatting": { "bold": false, "italic": false, @@ -401,8 +401,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "italic", - "text": "italic", + "orig": "italic ", + "text": "italic ", "formatting": { "bold": false, "italic": true, @@ -420,8 +420,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bold", - "text": "bold", + "orig": "bold ", + "text": "bold ", "formatting": { "bold": true, "italic": false, @@ -439,8 +439,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "underline", - "text": "underline", + "orig": "underline ", + "text": "underline ", "formatting": { "bold": false, "italic": false, @@ -458,8 +458,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and", + "orig": "and ", + "text": "and ", "formatting": { "bold": false, "italic": false, @@ -497,8 +497,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on the same line", - "text": "on the same line", + "orig": " on the same line", + "text": " on the same line", "formatting": { "bold": false, "italic": false, @@ -609,8 +609,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Some", - "text": "Some", + "orig": "Some ", + "text": "Some ", "formatting": { "bold": false, "italic": false, @@ -628,8 +628,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "italic", - "text": "italic", + "orig": "italic ", + "text": "italic ", "formatting": { "bold": false, "italic": true, @@ -647,8 +647,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bold", - "text": "bold", + "orig": "bold ", + "text": "bold ", "formatting": { "bold": true, "italic": false, @@ -703,8 +703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Nested", - "text": "Nested", + "orig": "Nested ", + "text": "Nested ", "formatting": { "bold": false, "italic": false, @@ -722,8 +722,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "italic", - "text": "italic", + "orig": "italic ", + "text": "italic ", "formatting": { "bold": false, "italic": true, @@ -860,8 +860,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Another", - "text": "Another", + "orig": "Another ", + "text": "Another ", "formatting": { "bold": false, "italic": false, @@ -898,8 +898,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "in bold", - "text": "in bold", + "orig": " in bold", + "text": " in bold", "formatting": { "bold": false, "italic": false, diff --git a/tests/data/docx/groundtruth/unit_test_headers.docx.json b/tests/data/docx/groundtruth/unit_test_headers.docx.json index 2d737d256e..de9b372509 100644 --- a/tests/data/docx/groundtruth/unit_test_headers.docx.json +++ b/tests/data/docx/groundtruth/unit_test_headers.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "unit_test_headers", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/unit_test_headers_numbered.docx.json b/tests/data/docx/groundtruth/unit_test_headers_numbered.docx.json index 655c938343..7217387809 100644 --- a/tests/data/docx/groundtruth/unit_test_headers_numbered.docx.json +++ b/tests/data/docx/groundtruth/unit_test_headers_numbered.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "unit_test_headers_numbered", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/word_image_anchors.docx.itxt b/tests/data/docx/groundtruth/word_image_anchors.docx.itxt index 13e5981692..a9ac290654 100644 --- a/tests/data/docx/groundtruth/word_image_anchors.docx.itxt +++ b/tests/data/docx/groundtruth/word_image_anchors.docx.itxt @@ -5,13 +5,13 @@ item-0 at level 0: unspecified: group _root_ item-4 at level 2: picture item-5 at level 2: picture item-6 at level 1: inline: group group - item-7 at level 2: text: This is test 1 + item-7 at level 2: text: This is test 1 item-8 at level 2: text: 0:08 Correct, he is not. item-9 at level 1: text: item-10 at level 1: picture item-11 at level 1: inline: group group - item-12 at level 2: text: This is test 2 + item-12 at level 2: text: This is test 2 item-13 at level 2: text: 0:16 Yeah, exactly. item-14 at level 1: text: diff --git a/tests/data/docx/groundtruth/word_image_anchors.docx.json b/tests/data/docx/groundtruth/word_image_anchors.docx.json index c705fa92df..07d1540632 100644 --- a/tests/data/docx/groundtruth/word_image_anchors.docx.json +++ b/tests/data/docx/groundtruth/word_image_anchors.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "word_image_anchors", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -150,8 +150,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is test 1", - "text": "This is test 1", + "orig": "This is test 1 ", + "text": "This is test 1 ", "formatting": { "bold": true, "italic": false, @@ -200,8 +200,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is test 2", - "text": "This is test 2", + "orig": "This is test 2 ", + "text": "This is test 2 ", "formatting": { "bold": true, "italic": false, diff --git a/tests/data/docx/groundtruth/word_image_anchors.docx.md b/tests/data/docx/groundtruth/word_image_anchors.docx.md index b8fc00ffc5..512ea1340d 100644 --- a/tests/data/docx/groundtruth/word_image_anchors.docx.md +++ b/tests/data/docx/groundtruth/word_image_anchors.docx.md @@ -6,7 +6,7 @@ February 20, 2025, 8:32PM -**This is test 1** 0:08 +**This is test 1** 0:08 Correct, he is not. diff --git a/tests/data/docx/groundtruth/word_sample.docx.json b/tests/data/docx/groundtruth/word_sample.docx.json index 536f1e327a..73c67d09cf 100644 --- a/tests/data/docx/groundtruth/word_sample.docx.json +++ b/tests/data/docx/groundtruth/word_sample.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "word_sample", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/word_tables.docx.json b/tests/data/docx/groundtruth/word_tables.docx.json index 93c25414b8..847d6e78f7 100644 --- a/tests/data/docx/groundtruth/word_tables.docx.json +++ b/tests/data/docx/groundtruth/word_tables.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "word_tables", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.itxt b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.itxt index 21ddcd915a..d662848d34 100644 --- a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.itxt +++ b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.itxt @@ -1,7 +1,7 @@ item-0 at level 0: unspecified: group _root_ item-1 at level 1: title: Poetry item-2 at level 2: inline: group group - item-3 at level 3: text: By + item-3 at level 3: text: By item-4 at level 3: text: Sarah Louisa Forten Purvis item-5 at level 3: text: . item-6 at level 2: picture @@ -9,21 +9,21 @@ item-0 at level 0: unspecified: group _root_ item-8 at level 3: picture item-8 at level 4: caption: The Standard Ebooks logo. item-9 at level 3: inline: group group - item-10 at level 4: text: This ebook is the product of many hours of hard work by volunteers for + item-10 at level 4: text: This ebook is the product of many hours of hard work by volunteers for item-11 at level 4: text: Standard Ebooks item-12 at level 4: text: , and builds on the hard work of ... rs made possible by the public domain. item-13 at level 3: inline: group group - item-14 at level 4: text: This particular ebook is based on digital scans from the + item-14 at level 4: text: This particular ebook is based on digital scans from the item-15 at level 4: text: Internet Archive item-16 at level 4: text: . item-17 at level 3: inline: group group - item-18 at level 4: text: The source text and artwork in t ... ide public domain via the terms in the + item-18 at level 4: text: The source text and artwork in t ... de public domain via the terms in the item-19 at level 4: text: CC0 1.0 Universal Public Domain Dedication - item-20 at level 4: text: . For full license information, see the - item-21 at level 4: text: Uncopyright + item-20 at level 4: text: . For full license information, see the + item-21 at level 4: text: Uncopyright item-22 at level 4: text: at the end of this ebook. item-23 at level 3: inline: group group - item-24 at level 4: text: Standard Ebooks is a volunteer-d ... fully produced for true book lovers at + item-24 at level 4: text: Standard Ebooks is a volunteer-d ... ully produced for true book lovers at item-25 at level 4: text: standardebooks.org item-26 at level 4: text: . item-27 at level 2: section_header: The Grave of the Slave @@ -36,8 +36,8 @@ item-0 at level 0: unspecified: group _root_ item-34 at level 3: text: And grieve not for that dear lov ... he must yield, as well as we, to God. item-35 at level 3: text: Torn from our home, our kindred ... m is stretched to rescue, and to save. item-36 at level 3: inline: group group - item-37 at level 4: text: Oh! ye who boast of Freedom's sa ... ree"- -When thousands groan in hopeless + item-37 at level 4: text: Oh! ye who boast of Freedom's sa ... ee"- +When thousands groan in hopeless item-38 at level 4: text: slavery item-39 at level 4: text: ? item-40 at level 3: text: Upon your land it is a cruel sta ... nd bid us rise from slavery, and live. @@ -59,11 +59,11 @@ In painful visions roll. item-48 at level 3: inline: group group item-49 at level 4: text: His home-ah! that lov'd name recalls All that was dear to him; -But - item-50 at level 4: text: these +But + item-50 at level 4: text: these item-51 at level 4: text: were scenes he'll know no more- -He only - item-52 at level 4: text: feels +He only + item-52 at level 4: text: feels item-53 at level 4: text: they've been. item-54 at level 2: section_header: Prayer item-55 at level 3: text: This sacred right none are denie ... , @@ -76,9 +76,9 @@ The slave forgets his grief and pain; His hopes, his fears-for he is blest. item-59 at level 2: section_header: The Slave item-60 at level 3: inline: group group - item-61 at level 4: text: Our sires who once in freedom's ... hat he can ne'er be free; -To feel that - item-62 at level 4: text: his + item-61 at level 4: text: Our sires who once in freedom's ... at he can ne'er be free; +To feel that + item-62 at level 4: text: his item-63 at level 4: text: is doomed to be A life, and deat ... e, That they still find a foe in thee? @@ -102,7 +102,7 @@ This bursting heart relief? item-73 at level 3: inline: group group item-74 at level 4: text: There's nothing left for me to love This earth holds nothing dear, -Since +Since item-75 at level 4: text: he item-76 at level 4: text: , my sweet-my gentle one, Is now no longer here. @@ -184,8 +184,8 @@ Beneath those bright blue skies. item-121 at level 3: text: The little hut where I have play ... y bank, Where I have gathered flowers. item-122 at level 3: inline: group group - item-123 at level 4: text: I knew not - item-124 at level 4: text: then + item-123 at level 4: text: I knew not + item-124 at level 4: text: then item-125 at level 4: text: I was a slave, Or that another's ... irit's pride; Or bid my lips be still. @@ -211,56 +211,56 @@ To thee for mercy turn. item-136 at level 3: picture item-136 at level 4: caption: The Standard Ebooks logo. item-137 at level 3: inline: group group - item-138 at level 4: text: Poetry - item-139 at level 4: text: was compiled from poems published between 1831 and 1836 by + item-138 at level 4: text: Poetry + item-139 at level 4: text: was compiled from poems published between 1831 and 1836 by item-140 at level 4: text: Sarah Louisa Forten Purvis item-141 at level 4: text: . item-142 at level 3: inline: group group - item-143 at level 4: text: This ebook was transcribed and produced for - item-144 at level 4: text: Standard Ebooks - item-145 at level 4: text: by + item-143 at level 4: text: This ebook was transcribed and produced for + item-144 at level 4: text: Standard Ebooks + item-145 at level 4: text: by item-146 at level 4: text: Weijia Cheng item-147 at level 4: text: , -and is based on digital scans from the +and is based on digital scans from the item-148 at level 4: text: Internet Archive item-149 at level 4: text: . item-150 at level 3: inline: group group - item-151 at level 4: text: The cover page is adapted from + item-151 at level 4: text: The cover page is adapted from item-152 at level 4: text: Sunday Morning item-153 at level 4: text: , -a painting completed in 1877 by +a painting completed in 1877 by item-154 at level 4: text: Thomas Waterman Wood item-155 at level 4: text: . -The cover and title pages feature the - item-156 at level 4: text: League Spartan - item-157 at level 4: text: and - item-158 at level 4: text: Sorts Mill Goudy - item-159 at level 4: text: typefaces created in 2014 and 2009 by +The cover and title pages feature the + item-156 at level 4: text: League Spartan + item-157 at level 4: text: and + item-158 at level 4: text: Sorts Mill Goudy + item-159 at level 4: text: typefaces created in 2014 and 2009 by item-160 at level 4: text: The League of Moveable Type item-161 at level 4: text: . item-162 at level 3: inline: group group - item-163 at level 4: text: This edition was released on - item-164 at level 4: text: May 21, 2026, 6:29 p.m. - item-165 at level 4: text: and is based on + item-163 at level 4: text: This edition was released on + item-164 at level 4: text: May 21, 2026, 6:29 p.m. + item-165 at level 4: text: and is based on item-166 at level 4: text: revision 936122b item-167 at level 4: text: . -The first edition of this eboo ... d it for different ereading systems at +The first edition of this eboo ... it for different ereading systems at item-168 at level 4: text: standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry item-169 at level 4: text: . item-170 at level 3: inline: group group - item-171 at level 4: text: The volunteer-driven Standard Eb ... improvements. Anyone can contribute at + item-171 at level 4: text: The volunteer-driven Standard Eb ... mprovements. Anyone can contribute at item-172 at level 4: text: standardebooks.org item-173 at level 4: text: . item-174 at level 2: section_header: Uncopyright item-175 at level 3: text: May you do good and not evil. Ma ... eely, never taking more than you give. item-176 at level 3: inline: group group - item-177 at level 4: text: Copyright pages exist to tell you that you - item-178 at level 4: text: can't + item-177 at level 4: text: Copyright pages exist to tell you that you + item-178 at level 4: text: can't item-179 at level 4: text: do something. Unlike them, this ... ith, without having to get permission. item-180 at level 3: text: Copyright laws are different all ... country other than the United States. item-181 at level 3: inline: group group - item-182 at level 4: text: Non-authorship activities perfor ... r contributions under the terms in the + item-182 at level 4: text: Non-authorship activities perfor ... contributions under the terms in the item-183 at level 4: text: CC0 1.0 Universal Public Domain Dedication item-184 at level 4: text: , thus dedicating to the worldwi ... ture that has given all of us so much. item-185 at level 1: caption: The Standard Ebooks logo. diff --git a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json index 00c3c6cec0..67a9b43cb2 100644 --- a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json +++ b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "epub_purvis_poetry", "origin": { "mimetype": "application/epub+zip", @@ -545,8 +545,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "By", - "text": "By" + "orig": "By ", + "text": "By " }, { "self_ref": "#/texts/2", @@ -629,8 +629,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This ebook is the product of many hours of hard work by volunteers for", - "text": "This ebook is the product of many hours of hard work by volunteers for" + "orig": "This ebook is the product of many hours of hard work by volunteers for ", + "text": "This ebook is the product of many hours of hard work by volunteers for " }, { "self_ref": "#/texts/7", @@ -666,8 +666,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This particular ebook is based on digital scans from the", - "text": "This particular ebook is based on digital scans from the" + "orig": "This particular ebook is based on digital scans from the ", + "text": "This particular ebook is based on digital scans from the " }, { "self_ref": "#/texts/10", @@ -703,8 +703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the", - "text": "The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the" + "orig": "The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the ", + "text": "The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the " }, { "self_ref": "#/texts/13", @@ -728,8 +728,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". For full license information, see the", - "text": ". For full license information, see the" + "orig": ". For full license information, see the ", + "text": ". For full license information, see the " }, { "self_ref": "#/texts/15", @@ -740,8 +740,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Uncopyright", - "text": "Uncopyright", + "orig": "Uncopyright ", + "text": "Uncopyright ", "hyperlink": "uncopyright.xhtml" }, { @@ -765,8 +765,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at", - "text": "Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at" + "orig": "Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at ", + "text": "Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at " }, { "self_ref": "#/texts/18", @@ -941,8 +941,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless", - "text": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless" + "orig": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless ", + "text": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless " }, { "self_ref": "#/texts/30", @@ -1103,8 +1103,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut", - "text": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut" + "orig": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut ", + "text": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut " }, { "self_ref": "#/texts/41", @@ -1115,8 +1115,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "these", - "text": "these", + "orig": "these ", + "text": "these ", "formatting": { "bold": false, "italic": true, @@ -1134,8 +1134,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "were scenes he'll know no more-\nHe only", - "text": "were scenes he'll know no more-\nHe only" + "orig": "were scenes he'll know no more-\nHe only ", + "text": "were scenes he'll know no more-\nHe only " }, { "self_ref": "#/texts/43", @@ -1146,8 +1146,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "feels", - "text": "feels", + "orig": "feels ", + "text": "feels ", "formatting": { "bold": false, "italic": true, @@ -1268,8 +1268,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that", - "text": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that" + "orig": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that ", + "text": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that " }, { "self_ref": "#/texts/52", @@ -1280,8 +1280,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "his", - "text": "his", + "orig": "his ", + "text": "his ", "formatting": { "bold": false, "italic": true, @@ -1456,8 +1456,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince", - "text": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince" + "orig": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince ", + "text": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince " }, { "self_ref": "#/texts/64", @@ -2164,8 +2164,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "I knew not", - "text": "I knew not" + "orig": "I knew not ", + "text": "I knew not " }, { "self_ref": "#/texts/111", @@ -2176,8 +2176,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "then", - "text": "then", + "orig": "then ", + "text": "then ", "formatting": { "bold": false, "italic": true, @@ -2376,8 +2376,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Poetry", - "text": "Poetry", + "orig": "Poetry ", + "text": "Poetry ", "formatting": { "bold": false, "italic": true, @@ -2395,8 +2395,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was compiled from poems published between 1831 and 1836 by", - "text": "was compiled from poems published between 1831 and 1836 by" + "orig": "was compiled from poems published between 1831 and 1836 by ", + "text": "was compiled from poems published between 1831 and 1836 by " }, { "self_ref": "#/texts/126", @@ -2432,8 +2432,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This ebook was transcribed and produced for", - "text": "This ebook was transcribed and produced for" + "orig": "This ebook was transcribed and produced for ", + "text": "This ebook was transcribed and produced for " }, { "self_ref": "#/texts/129", @@ -2444,8 +2444,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Standard Ebooks", - "text": "Standard Ebooks", + "orig": "Standard Ebooks ", + "text": "Standard Ebooks ", "hyperlink": "https://standardebooks.org/" }, { @@ -2457,8 +2457,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by", - "text": "by" + "orig": "by ", + "text": "by " }, { "self_ref": "#/texts/131", @@ -2482,8 +2482,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",\nand is based on digital scans from the", - "text": ",\nand is based on digital scans from the" + "orig": ",\nand is based on digital scans from the ", + "text": ",\nand is based on digital scans from the " }, { "self_ref": "#/texts/133", @@ -2519,8 +2519,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The cover page is adapted from", - "text": "The cover page is adapted from" + "orig": "The cover page is adapted from ", + "text": "The cover page is adapted from " }, { "self_ref": "#/texts/136", @@ -2550,8 +2550,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",\na painting completed in 1877 by", - "text": ",\na painting completed in 1877 by" + "orig": ",\na painting completed in 1877 by ", + "text": ",\na painting completed in 1877 by " }, { "self_ref": "#/texts/138", @@ -2575,8 +2575,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".\nThe cover and title pages feature the", - "text": ".\nThe cover and title pages feature the" + "orig": ".\nThe cover and title pages feature the ", + "text": ".\nThe cover and title pages feature the " }, { "self_ref": "#/texts/140", @@ -2587,8 +2587,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "League Spartan", - "text": "League Spartan", + "orig": "League Spartan ", + "text": "League Spartan ", "formatting": { "bold": true, "italic": false, @@ -2606,8 +2606,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/142", @@ -2618,8 +2618,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sorts Mill Goudy", - "text": "Sorts Mill Goudy", + "orig": "Sorts Mill Goudy ", + "text": "Sorts Mill Goudy ", "formatting": { "bold": true, "italic": false, @@ -2637,8 +2637,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "typefaces created in 2014 and 2009 by", - "text": "typefaces created in 2014 and 2009 by" + "orig": "typefaces created in 2014 and 2009 by ", + "text": "typefaces created in 2014 and 2009 by " }, { "self_ref": "#/texts/144", @@ -2674,8 +2674,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This edition was released on", - "text": "This edition was released on" + "orig": "This edition was released on ", + "text": "This edition was released on " }, { "self_ref": "#/texts/147", @@ -2686,8 +2686,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "May 21, 2026, 6:29 p.m.", - "text": "May 21, 2026, 6:29 p.m.", + "orig": "May 21, 2026, 6:29 p.m. ", + "text": "May 21, 2026, 6:29 p.m. ", "formatting": { "bold": true, "italic": false, @@ -2705,8 +2705,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and is based on", - "text": "and is based on" + "orig": "and is based on ", + "text": "and is based on " }, { "self_ref": "#/texts/149", @@ -2736,8 +2736,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".\nThe first edition of this ebook was released on\nDecember 6, 2023, 8:52 p.m.\nYou can check for updates to this ebook, view its revision history, or download it for different ereading systems at", - "text": ".\nThe first edition of this ebook was released on\nDecember 6, 2023, 8:52 p.m.\nYou can check for updates to this ebook, view its revision history, or download it for different ereading systems at" + "orig": ".\nThe first edition of this ebook was released on\nDecember 6, 2023, 8:52 p.m.\nYou can check for updates to this ebook, view its revision history, or download it for different ereading systems at ", + "text": ".\nThe first edition of this ebook was released on\nDecember 6, 2023, 8:52 p.m.\nYou can check for updates to this ebook, view its revision history, or download it for different ereading systems at " }, { "self_ref": "#/texts/151", @@ -2773,8 +2773,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at", - "text": "The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at" + "orig": "The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at ", + "text": "The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at " }, { "self_ref": "#/texts/154", @@ -2848,8 +2848,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Copyright pages exist to tell you that you", - "text": "Copyright pages exist to tell you that you" + "orig": "Copyright pages exist to tell you that you ", + "text": "Copyright pages exist to tell you that you " }, { "self_ref": "#/texts/159", @@ -2860,8 +2860,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "can't", - "text": "can't", + "orig": "can't ", + "text": "can't ", "formatting": { "bold": false, "italic": true, @@ -2903,8 +2903,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the", - "text": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the" + "orig": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the ", + "text": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the " }, { "self_ref": "#/texts/163", diff --git a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md index 847a8c1a8b..cfcc9e8ee4 100644 --- a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md +++ b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md @@ -1,6 +1,6 @@ # Poetry -By **Sarah Louisa Forten Purvis** . +By **Sarah Louisa Forten Purvis**. @@ -10,13 +10,13 @@ The Standard Ebooks logo. -This ebook is the product of many hours of hard work by volunteers for [Standard Ebooks](https://standardebooks.org/) , and builds on the hard work of other literature lovers made possible by the public domain. +This ebook is the product of many hours of hard work by volunteers for [Standard Ebooks](https://standardebooks.org/), and builds on the hard work of other literature lovers made possible by the public domain. -This particular ebook is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans) . +This particular ebook is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans). -The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/) . For full license information, see the [Uncopyright](uncopyright.xhtml) at the end of this ebook. +The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/). For full license information, see the [Uncopyright](uncopyright.xhtml) at the end of this ebook. -Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at [standardebooks.org](https://standardebooks.org/) . +Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at [standardebooks.org](https://standardebooks.org/). ## The Grave of the Slave @@ -60,7 +60,7 @@ No arm is stretched to rescue, and to save. Oh! ye who boast of Freedom's sacred claims, Do ye not blush to see our galling chains; To hear that sounding word-"that all are free"- -When thousands groan in hopeless *slavery* ? +When thousands groan in hopeless *slavery*? Upon your land it is a cruel stain- Freedom, what art thou?-nothing but a name. @@ -200,7 +200,7 @@ This bursting heart relief? There's nothing left for me to love This earth holds nothing dear, -Since *he* , my sweet-my gentle one, +Since *he*, my sweet-my gentle one, Is now no longer here. My poor fond heart had counted on @@ -311,12 +311,12 @@ Unhonored and unnamed. Oh! speak not of heathenish darkness again, Nor tell me of lands held in error's dread chain! Where-where is the nation so erring as we, -Who claim the proud name of the " **home of the free** "! +Who claim the proud name of the "**home of the free**"! What a throb do the lov'd ties of country awake In the heart of the exile!-for time cannot break The sweet vision of home, and all he loved well, Which has thrown o'er his pathway a magical spell. -Can the name of " **my country** "-the deeds which we sing- +Can the name of "**my country**"-the deeds which we sing- Be honored-revered-'midst pollution and sin? Can the names of our fathers who perished in fight, Be hallowed in story, midst slavery's blight? @@ -463,21 +463,21 @@ The Standard Ebooks logo. -*Poetry* was compiled from poems published between 1831 and 1836 by [Sarah Louisa Forten Purvis](https://en.wikipedia.org/wiki/Sarah_Louisa_Forten_Purvis) . +*Poetry* was compiled from poems published between 1831 and 1836 by [Sarah Louisa Forten Purvis](https://en.wikipedia.org/wiki/Sarah_Louisa_Forten_Purvis). -This ebook was transcribed and produced for [Standard Ebooks](https://standardebooks.org/) by [Weijia Cheng](https://weijiarhymeswith.asia/) , -and is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans) . +This ebook was transcribed and produced for [Standard Ebooks](https://standardebooks.org/) by [Weijia Cheng](https://weijiarhymeswith.asia/), +and is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans). -The cover page is adapted from *Sunday Morning* , -a painting completed in 1877 by [Thomas Waterman Wood](https://en.wikipedia.org/wiki/Thomas_Waterman_Wood) . -The cover and title pages feature the **League Spartan** and **Sorts Mill Goudy** typefaces created in 2014 and 2009 by [The League of Moveable Type](https://www.theleagueofmoveabletype.com/) . +The cover page is adapted from *Sunday Morning*, +a painting completed in 1877 by [Thomas Waterman Wood](https://en.wikipedia.org/wiki/Thomas_Waterman_Wood). +The cover and title pages feature the **League Spartan** and **Sorts Mill Goudy** typefaces created in 2014 and 2009 by [The League of Moveable Type](https://www.theleagueofmoveabletype.com/). -This edition was released on **May 21, 2026, 6:29 p.m.** and is based on **revision 936122b** . +This edition was released on **May 21, 2026, 6:29 p.m.** and is based on **revision 936122b**. The first edition of this ebook was released on December 6, 2023, 8:52 p.m. -You can check for updates to this ebook, view its revision history, or download it for different ereading systems at [standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry) . +You can check for updates to this ebook, view its revision history, or download it for different ereading systems at [standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry). -The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at [standardebooks.org](https://standardebooks.org/) . +The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at [standardebooks.org](https://standardebooks.org/). ## Uncopyright @@ -489,4 +489,4 @@ Copyright pages exist to tell you that you *can't* do something. Unlike them, th Copyright laws are different all over the world, and the source text or artwork in this ebook may still be copyrighted in other countries. If you're not located in the United States, you must check your local laws before using this ebook. Standard Ebooks makes no representations regarding the copyright status of the source text or artwork in this ebook in any country other than the United States. -Non-authorship activities performed on items that are in the public domain-so-called "sweat of the brow" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/) , thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much. \ No newline at end of file +Non-authorship activities performed on items that are in the public domain-so-called "sweat of the brow" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/), thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much. \ No newline at end of file diff --git a/tests/data/html/groundtruth/example_01.html.json b/tests/data/html/groundtruth/example_01.html.json index 3bb3a3d5d2..c4e528f796 100644 --- a/tests/data/html/groundtruth/example_01.html.json +++ b/tests/data/html/groundtruth/example_01.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_01_images.html.json b/tests/data/html/groundtruth/example_01_images.html.json index 50951c50bf..64b2130714 100644 --- a/tests/data/html/groundtruth/example_01_images.html.json +++ b/tests/data/html/groundtruth/example_01_images.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_02.html.json b/tests/data/html/groundtruth/example_02.html.json index a02a5874e8..8bda4d1a86 100644 --- a/tests/data/html/groundtruth/example_02.html.json +++ b/tests/data/html/groundtruth/example_02.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_02", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_03.html.json b/tests/data/html/groundtruth/example_03.html.json index 46101b288b..c6b655776d 100644 --- a/tests/data/html/groundtruth/example_03.html.json +++ b/tests/data/html/groundtruth/example_03.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_03", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_04.html.json b/tests/data/html/groundtruth/example_04.html.json index ef7f6f4d0f..b696023320 100644 --- a/tests/data/html/groundtruth/example_04.html.json +++ b/tests/data/html/groundtruth/example_04.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_04", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_05.html.json b/tests/data/html/groundtruth/example_05.html.json index 26e898e425..38df3f5944 100644 --- a/tests/data/html/groundtruth/example_05.html.json +++ b/tests/data/html/groundtruth/example_05.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_05", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_06.html.itxt b/tests/data/html/groundtruth/example_06.html.itxt index b425891e11..9df1b4da3a 100644 --- a/tests/data/html/groundtruth/example_06.html.itxt +++ b/tests/data/html/groundtruth/example_06.html.itxt @@ -8,6 +8,6 @@ with a new line. item-6 at level 2: text: Heading for the details element item-7 at level 2: text: Description of the details element. item-8 at level 1: inline: group group - item-9 at level 2: text: This is a fourth div with a - item-10 at level 2: text: bold + item-9 at level 2: text: This is a fourth div with a + item-10 at level 2: text: bold item-11 at level 2: text: paragraph. \ No newline at end of file diff --git a/tests/data/html/groundtruth/example_06.html.json b/tests/data/html/groundtruth/example_06.html.json index ee2f7d67bd..5777056247 100644 --- a/tests/data/html/groundtruth/example_06.html.json +++ b/tests/data/html/groundtruth/example_06.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_06", "origin": { "mimetype": "text/html", @@ -176,8 +176,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is a fourth div with a", - "text": "This is a fourth div with a" + "orig": "This is a fourth div with a ", + "text": "This is a fourth div with a " }, { "self_ref": "#/texts/8", @@ -188,8 +188,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bold", - "text": "bold", + "orig": "bold ", + "text": "bold ", "formatting": { "bold": true, "italic": false, diff --git a/tests/data/html/groundtruth/example_07.html.json b/tests/data/html/groundtruth/example_07.html.json index fc277994eb..50a7053a54 100644 --- a/tests/data/html/groundtruth/example_07.html.json +++ b/tests/data/html/groundtruth/example_07.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_07", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/example_08.html.json b/tests/data/html/groundtruth/example_08.html.json index 7c890a8939..f1080e19f2 100644 --- a/tests/data/html/groundtruth/example_08.html.json +++ b/tests/data/html/groundtruth/example_08.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_08", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/formatting.html.itxt b/tests/data/html/groundtruth/formatting.html.itxt index 0361b31fd5..493514a364 100644 --- a/tests/data/html/groundtruth/formatting.html.itxt +++ b/tests/data/html/groundtruth/formatting.html.itxt @@ -1,55 +1,55 @@ item-0 at level 0: unspecified: group _root_ item-1 at level 1: title: HTML Text Formatting Examples item-2 at level 2: inline: group group - item-3 at level 3: text: This is a - item-4 at level 3: text: bold (b) - item-5 at level 3: text: example and right next to it we have a + item-3 at level 3: text: This is a + item-4 at level 3: text: bold (b) + item-5 at level 3: text: example and right next to it we have a item-6 at level 3: text: strong emphasis (strong) - item-7 at level 3: text: . Notice that - item-8 at level 3: text: strong + bold mixed + item-7 at level 3: text: . Notice that + item-8 at level 3: text: strong + bold mixed item-9 at level 3: text: looks similar but carries additional semantic meaning. item-10 at level 2: inline: group group - item-11 at level 3: text: Here is an - item-12 at level 3: text: italic (i) - item-13 at level 3: text: word and an - item-14 at level 3: text: emphasis (em) - item-15 at level 3: text: example. Sometimes we combine them like + item-11 at level 3: text: Here is an + item-12 at level 3: text: italic (i) + item-13 at level 3: text: word and an + item-14 at level 3: text: emphasis (em) + item-15 at level 3: text: example. Sometimes we combine them like item-16 at level 3: text: italic + emphasis together item-17 at level 3: text: . item-18 at level 2: inline: group group - item-19 at level 3: text: Now let's look at text that appears crossed out: - item-20 at level 3: text: strikethrough with s - item-21 at level 3: text: and + item-19 at level 3: text: Now let's look at text that appears crossed out: + item-20 at level 3: text: strikethrough with s + item-21 at level 3: text: and item-22 at level 3: text: deleted with del - item-23 at level 3: text: . You can also mix them: + item-23 at level 3: text: . You can also mix them: item-24 at level 3: text: double strikethrough (s + del) item-25 at level 3: text: . item-26 at level 2: inline: group group - item-27 at level 3: text: To highlight insertions or underlines: + item-27 at level 3: text: To highlight insertions or underlines: item-28 at level 3: text: underlined with u - item-29 at level 3: text: , + item-29 at level 3: text: , item-30 at level 3: text: inserted with ins - item-31 at level 3: text: . A combination could be: + item-31 at level 3: text: . A combination could be: item-32 at level 3: text: underline + insertion together item-33 at level 3: text: . item-34 at level 2: inline: group group item-35 at level 3: text: Subscript and superscript examples: Water is written as H item-36 at level 3: text: 2 item-37 at level 3: text: O using sub. The mathematical expression x - item-38 at level 3: text: 2 + item-38 at level 3: text: 2 item-39 at level 3: text: + y - item-40 at level 3: text: 3 + item-40 at level 3: text: 3 item-41 at level 3: text: uses sup. They can also be combined: CO item-42 at level 3: text: 2 item-43 at level 3: text: * item-44 at level 3: text: . item-45 at level 2: inline: group group - item-46 at level 3: text: Mixing several: This sentence has + item-46 at level 3: text: Mixing several: This sentence has item-47 at level 3: text: strong + emphasis - item-48 at level 3: text: , some + item-48 at level 3: text: , some item-49 at level 3: text: bold + underline item-50 at level 3: text: , and a formula like a - item-51 at level 3: text: 2 + item-51 at level 3: text: 2 item-52 at level 3: text: + b item-53 at level 3: text: 3 item-54 at level 3: text: . \ No newline at end of file diff --git a/tests/data/html/groundtruth/formatting.html.json b/tests/data/html/groundtruth/formatting.html.json index 4b52aaf5a1..09821b7f8e 100644 --- a/tests/data/html/groundtruth/formatting.html.json +++ b/tests/data/html/groundtruth/formatting.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "formatting", "origin": { "mimetype": "text/html", @@ -290,8 +290,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is a", - "text": "This is a" + "orig": "This is a ", + "text": "This is a " }, { "self_ref": "#/texts/3", @@ -302,8 +302,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bold (b)", - "text": "bold (b)", + "orig": "bold (b) ", + "text": "bold (b) ", "formatting": { "bold": true, "italic": false, @@ -321,8 +321,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "example and right next to it we have a", - "text": "example and right next to it we have a" + "orig": "example and right next to it we have a ", + "text": "example and right next to it we have a " }, { "self_ref": "#/texts/5", @@ -352,8 +352,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Notice that", - "text": ". Notice that" + "orig": ". Notice that ", + "text": ". Notice that " }, { "self_ref": "#/texts/7", @@ -364,8 +364,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "strong + bold mixed", - "text": "strong + bold mixed", + "orig": "strong + bold mixed ", + "text": "strong + bold mixed ", "formatting": { "bold": true, "italic": false, @@ -395,8 +395,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Here is an", - "text": "Here is an" + "orig": "Here is an ", + "text": "Here is an " }, { "self_ref": "#/texts/10", @@ -407,8 +407,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "italic (i)", - "text": "italic (i)", + "orig": "italic (i) ", + "text": "italic (i) ", "formatting": { "bold": false, "italic": true, @@ -426,8 +426,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "word and an", - "text": "word and an" + "orig": "word and an ", + "text": "word and an " }, { "self_ref": "#/texts/12", @@ -438,8 +438,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emphasis (em)", - "text": "emphasis (em)", + "orig": "emphasis (em) ", + "text": "emphasis (em) ", "formatting": { "bold": false, "italic": true, @@ -457,8 +457,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "example. Sometimes we combine them like", - "text": "example. Sometimes we combine them like" + "orig": "example. Sometimes we combine them like ", + "text": "example. Sometimes we combine them like " }, { "self_ref": "#/texts/14", @@ -500,8 +500,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Now let's look at text that appears crossed out:", - "text": "Now let's look at text that appears crossed out:" + "orig": "Now let's look at text that appears crossed out: ", + "text": "Now let's look at text that appears crossed out: " }, { "self_ref": "#/texts/17", @@ -512,8 +512,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "strikethrough with s", - "text": "strikethrough with s", + "orig": "strikethrough with s ", + "text": "strikethrough with s ", "formatting": { "bold": false, "italic": false, @@ -531,8 +531,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/19", @@ -562,8 +562,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". You can also mix them:", - "text": ". You can also mix them:" + "orig": ". You can also mix them: ", + "text": ". You can also mix them: " }, { "self_ref": "#/texts/21", @@ -605,8 +605,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To highlight insertions or underlines:", - "text": "To highlight insertions or underlines:" + "orig": "To highlight insertions or underlines: ", + "text": "To highlight insertions or underlines: " }, { "self_ref": "#/texts/24", @@ -636,8 +636,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/26", @@ -667,8 +667,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". A combination could be:", - "text": ". A combination could be:" + "orig": ". A combination could be: ", + "text": ". A combination could be: " }, { "self_ref": "#/texts/28", @@ -753,8 +753,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "2", - "text": "2", + "orig": "2 ", + "text": "2 ", "formatting": { "bold": false, "italic": false, @@ -784,8 +784,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "3", - "text": "3", + "orig": "3 ", + "text": "3 ", "formatting": { "bold": false, "italic": false, @@ -865,8 +865,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Mixing several: This sentence has", - "text": "Mixing several: This sentence has" + "orig": "Mixing several: This sentence has ", + "text": "Mixing several: This sentence has " }, { "self_ref": "#/texts/41", @@ -896,8 +896,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", some", - "text": ", some" + "orig": ", some ", + "text": ", some " }, { "self_ref": "#/texts/43", @@ -939,8 +939,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "2", - "text": "2", + "orig": "2 ", + "text": "2 ", "formatting": { "bold": false, "italic": false, diff --git a/tests/data/html/groundtruth/formatting.html.md b/tests/data/html/groundtruth/formatting.html.md index c437c97e8b..e6d5132201 100644 --- a/tests/data/html/groundtruth/formatting.html.md +++ b/tests/data/html/groundtruth/formatting.html.md @@ -1,13 +1,13 @@ # HTML Text Formatting Examples -This is a **bold (b)** example and right next to it we have a **strong emphasis (strong)** . Notice that **strong + bold mixed** looks similar but carries additional semantic meaning. +This is a **bold (b)** example and right next to it we have a **strong emphasis (strong)**. Notice that **strong + bold mixed** looks similar but carries additional semantic meaning. -Here is an *italic (i)* word and an *emphasis (em)* example. Sometimes we combine them like *italic + emphasis together* . +Here is an *italic (i)* word and an *emphasis (em)* example. Sometimes we combine them like *italic + emphasis together*. -Now let's look at text that appears crossed out: ~~strikethrough with s~~ and ~~deleted with del~~ . You can also mix them: ~~double strikethrough (s + del)~~ . +Now let's look at text that appears crossed out: ~~strikethrough with s~~ and ~~deleted with del~~. You can also mix them: ~~double strikethrough (s + del)~~. -To highlight insertions or underlines: underlined with u , inserted with ins . A combination could be: underline + insertion together . +To highlight insertions or underlines: underlined with u, inserted with ins. A combination could be: underline + insertion together. -Subscript and superscript examples: Water is written as H 2 O using sub. The mathematical expression x 2 + y 3 uses sup. They can also be combined: CO 2 * . +Subscript and superscript examples: Water is written as H2O using sub. The mathematical expression x2 + y3 uses sup. They can also be combined: CO2*. -Mixing several: This sentence has ***strong + emphasis*** , some **bold + underline** , and a formula like a 2 + b 3 . \ No newline at end of file +Mixing several: This sentence has ***strong + emphasis***, some **bold + underline**, and a formula like a2 + b3. \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_code_snippets.html.itxt b/tests/data/html/groundtruth/html_code_snippets.html.itxt index 77f11c65e6..fc9a43dbec 100644 --- a/tests/data/html/groundtruth/html_code_snippets.html.itxt +++ b/tests/data/html/groundtruth/html_code_snippets.html.itxt @@ -1,39 +1,39 @@ item-0 at level 0: unspecified: group _root_ item-1 at level 1: title: Code snippets item-2 at level 2: inline: group group - item-3 at level 3: text: The Pythagorean theorem can be w ... tion relating the lengths of the sides + item-3 at level 3: text: The Pythagorean theorem can be w ... ion relating the lengths of the sides item-4 at level 3: text: a - item-5 at level 3: text: , - item-6 at level 3: text: b - item-7 at level 3: text: and the hypotenuse + item-5 at level 3: text: , + item-6 at level 3: text: b + item-7 at level 3: text: and the hypotenuse item-8 at level 3: text: c item-9 at level 3: text: . item-10 at level 2: inline: group group - item-11 at level 3: text: To use Docling, simply install + item-11 at level 3: text: To use Docling, simply install item-12 at level 3: code: docling - item-13 at level 3: text: from your package manager, e.g. pip: + item-13 at level 3: text: from your package manager, e.g. pip: item-14 at level 3: code: pip install docling item-15 at level 2: inline: group group - item-16 at level 3: text: To convert individual documents with python, use + item-16 at level 3: text: To convert individual documents with python, use item-17 at level 3: code: convert() item-18 at level 3: text: , for example: item-19 at level 2: code: from docling.document_converter ... (result.document.export_to_markdown()) item-20 at level 2: inline: group group - item-21 at level 3: text: The program will output: + item-21 at level 3: text: The program will output: item-22 at level 3: code: ## Docling Technical Report[...] item-23 at level 2: text: Prefetch the models: item-24 at level 2: list: group list item-25 at level 3: list_item: item-26 at level 4: inline: group group - item-27 at level 5: text: Use the + item-27 at level 5: text: Use the item-28 at level 5: code: docling-tools models download - item-29 at level 5: text: utility: + item-29 at level 5: text: utility: item-30 at level 3: list_item: item-31 at level 4: inline: group group - item-32 at level 5: text: Alternatively, models can be programmatically downloaded using + item-32 at level 5: text: Alternatively, models can be programmatically downloaded using item-33 at level 5: code: docling.utils.model_downloader.download_models() item-34 at level 5: text: . item-35 at level 3: list_item: item-36 at level 4: inline: group group - item-37 at level 5: text: Also, you can use download-hf-re ... rom HuggingFace by specifying repo id: + item-37 at level 5: text: Also, you can use download-hf-re ... om HuggingFace by specifying repo id: item-38 at level 5: code: $ docling-tools models download- ... 256M-preview model from HuggingFace... \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_code_snippets.html.json b/tests/data/html/groundtruth/html_code_snippets.html.json index 922ef6bd67..42c3d539f4 100644 --- a/tests/data/html/groundtruth/html_code_snippets.html.json +++ b/tests/data/html/groundtruth/html_code_snippets.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_code_snippets", "origin": { "mimetype": "text/html", @@ -255,8 +255,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Pythagorean theorem can be written as an equation relating the lengths of the sides", - "text": "The Pythagorean theorem can be written as an equation relating the lengths of the sides" + "orig": "The Pythagorean theorem can be written as an equation relating the lengths of the sides ", + "text": "The Pythagorean theorem can be written as an equation relating the lengths of the sides " }, { "self_ref": "#/texts/3", @@ -286,8 +286,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/5", @@ -298,8 +298,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": false, "italic": true, @@ -317,8 +317,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the hypotenuse", - "text": "and the hypotenuse" + "orig": "and the hypotenuse ", + "text": "and the hypotenuse " }, { "self_ref": "#/texts/7", @@ -360,8 +360,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To use Docling, simply install", - "text": "To use Docling, simply install" + "orig": "To use Docling, simply install ", + "text": "To use Docling, simply install " }, { "self_ref": "#/texts/10", @@ -388,8 +388,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "from your package manager, e.g. pip:", - "text": "from your package manager, e.g. pip:" + "orig": "from your package manager, e.g. pip: ", + "text": "from your package manager, e.g. pip: " }, { "self_ref": "#/texts/12", @@ -416,8 +416,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To convert individual documents with python, use", - "text": "To convert individual documents with python, use" + "orig": "To convert individual documents with python, use ", + "text": "To convert individual documents with python, use " }, { "self_ref": "#/texts/14", @@ -472,8 +472,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The program will output:", - "text": "The program will output:" + "orig": "The program will output: ", + "text": "The program will output: " }, { "self_ref": "#/texts/18", @@ -530,8 +530,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Use the", - "text": "Use the" + "orig": "Use the ", + "text": "Use the " }, { "self_ref": "#/texts/22", @@ -558,8 +558,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "utility:", - "text": "utility:" + "orig": " utility:", + "text": " utility:" }, { "self_ref": "#/texts/24", @@ -588,8 +588,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Alternatively, models can be programmatically downloaded using", - "text": "Alternatively, models can be programmatically downloaded using" + "orig": "Alternatively, models can be programmatically downloaded using ", + "text": "Alternatively, models can be programmatically downloaded using " }, { "self_ref": "#/texts/26", @@ -646,8 +646,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Also, you can use download-hf-repo parameter to download arbitrary models from HuggingFace by specifying repo id:", - "text": "Also, you can use download-hf-repo parameter to download arbitrary models from HuggingFace by specifying repo id:" + "orig": "Also, you can use download-hf-repo parameter to download arbitrary models from HuggingFace by specifying repo id: ", + "text": "Also, you can use download-hf-repo parameter to download arbitrary models from HuggingFace by specifying repo id: " }, { "self_ref": "#/texts/30", diff --git a/tests/data/html/groundtruth/html_code_snippets.html.md b/tests/data/html/groundtruth/html_code_snippets.html.md index 8228e0420e..dcf97afa0b 100644 --- a/tests/data/html/groundtruth/html_code_snippets.html.md +++ b/tests/data/html/groundtruth/html_code_snippets.html.md @@ -1,10 +1,10 @@ # Code snippets -The Pythagorean theorem can be written as an equation relating the lengths of the sides *a* , *b* and the hypotenuse *c* . +The Pythagorean theorem can be written as an equation relating the lengths of the sides *a*, *b* and the hypotenuse *c*. -To use Docling, simply install `docling` from your package manager, e.g. pip: `pip install docling` +To use Docling, simply install `docling`from your package manager, e.g. pip: `pip install docling` -To convert individual documents with python, use `convert()` , for example: +To convert individual documents with python, use `convert()`, for example: ``` from docling.document_converter import DocumentConverter @@ -20,5 +20,5 @@ The program will output: `## Docling Technical Report[...]` Prefetch the models: - Use the `docling-tools models download` utility: -- Alternatively, models can be programmatically downloaded using `docling.utils.model_downloader.download_models()` . +- Alternatively, models can be programmatically downloaded using `docling.utils.model_downloader.download_models()`. - Also, you can use download-hf-repo parameter to download arbitrary models from HuggingFace by specifying repo id: `$ docling-tools models download-hf-repo ds4sd/SmolDocling-256M-preview Downloading ds4sd/SmolDocling-256M-preview model from HuggingFace...` \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_description_list.html.itxt b/tests/data/html/groundtruth/html_description_list.html.itxt index a705099a02..5f023f1345 100644 --- a/tests/data/html/groundtruth/html_description_list.html.itxt +++ b/tests/data/html/groundtruth/html_description_list.html.itxt @@ -24,8 +24,8 @@ item-0 at level 0: unspecified: group _root_ item-23 at level 5: list: group descriptions item-24 at level 6: list_item: item-25 at level 7: inline: group group - item-26 at level 8: text: HyperText Markup Language - used for - item-27 at level 8: text: structuring + item-26 at level 8: text: HyperText Markup Language - used for + item-27 at level 8: text: structuring item-28 at level 8: text: web content item-29 at level 4: list_item: CSS item-30 at level 5: list: group descriptions diff --git a/tests/data/html/groundtruth/html_description_list.html.json b/tests/data/html/groundtruth/html_description_list.html.json index a2851779fc..4dcb5c34ec 100644 --- a/tests/data/html/groundtruth/html_description_list.html.json +++ b/tests/data/html/groundtruth/html_description_list.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_description_list", "origin": { "mimetype": "text/html", @@ -685,8 +685,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "HyperText Markup Language - used for", - "text": "HyperText Markup Language - used for" + "orig": "HyperText Markup Language - used for ", + "text": "HyperText Markup Language - used for " }, { "self_ref": "#/texts/18", @@ -697,8 +697,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "structuring", - "text": "structuring", + "orig": "structuring ", + "text": "structuring ", "formatting": { "bold": false, "italic": true, diff --git a/tests/data/html/groundtruth/html_heading_in_p.html.json b/tests/data/html/groundtruth/html_heading_in_p.html.json index f560a88be8..00e1366bd2 100644 --- a/tests/data/html/groundtruth/html_heading_in_p.html.json +++ b/tests/data/html/groundtruth/html_heading_in_p.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_heading_in_p", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.itxt b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.itxt index 3a1862542a..6e38a65e61 100644 --- a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.itxt +++ b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.itxt @@ -3,16 +3,16 @@ item-0 at level 0: unspecified: group _root_ item-2 at level 1: table with [7x2] item-3 at level 2: unspecified: group rich_cell_group_1_0_1 item-4 at level 3: inline: group group - item-5 at level 4: text: See - item-6 at level 4: text: Page A - item-7 at level 4: text: and - item-8 at level 4: text: Page B + item-5 at level 4: text: See + item-6 at level 4: text: Page A + item-7 at level 4: text: and + item-8 at level 4: text: Page B item-9 at level 4: text: for details. item-10 at level 2: unspecified: group rich_cell_group_1_0_3 item-11 at level 3: inline: group group - item-12 at level 4: text: Bold - item-13 at level 4: text: and - item-14 at level 4: text: italic + item-12 at level 4: text: Bold + item-13 at level 4: text: and + item-14 at level 4: text: italic item-15 at level 4: text: text item-16 at level 2: unspecified: group rich_cell_group_1_0_4 item-17 at level 3: inline: group group @@ -21,7 +21,7 @@ item-0 at level 0: unspecified: group _root_ item-20 at level 3: code: do_thing() item-21 at level 2: unspecified: group rich_cell_group_1_0_6 item-22 at level 3: inline: group group - item-23 at level 4: code: See + item-23 at level 4: code: See item-24 at level 4: code: the docs - item-25 at level 4: code: first + item-25 at level 4: code: first item-26 at level 1: text: Outro paragraph. \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.json b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.json index 1103b2bfb3..6bd26d3ced 100644 --- a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.json +++ b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_inline_group_in_table_cell", "origin": { "mimetype": "text/html", @@ -223,8 +223,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "See", - "text": "See" + "orig": "See ", + "text": "See " }, { "self_ref": "#/texts/3", @@ -235,8 +235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Page A", - "text": "Page A", + "orig": "Page A ", + "text": "Page A ", "hyperlink": "https://example.com/a" }, { @@ -248,8 +248,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/5", @@ -260,8 +260,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Page B", - "text": "Page B", + "orig": "Page B ", + "text": "Page B ", "hyperlink": "https://example.com/b" }, { @@ -285,8 +285,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Bold", - "text": "Bold", + "orig": "Bold ", + "text": "Bold ", "formatting": { "bold": true, "italic": false, @@ -304,8 +304,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/9", @@ -316,8 +316,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "italic", - "text": "italic", + "orig": "italic ", + "text": "italic ", "formatting": { "bold": false, "italic": true, @@ -379,8 +379,8 @@ "content_layer": "body", "label": "code", "prov": [], - "orig": "See", - "text": "See", + "orig": "See ", + "text": "See ", "captions": [], "references": [], "footnotes": [], @@ -412,8 +412,8 @@ "content_layer": "body", "label": "code", "prov": [], - "orig": "first", - "text": "first", + "orig": " first", + "text": " first", "captions": [], "references": [], "footnotes": [], diff --git a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.md b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.md index 8caec26ac7..28ad66ef66 100644 --- a/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.md +++ b/tests/data/html/groundtruth/html_inline_group_in_table_cell.html.md @@ -7,6 +7,6 @@ Intro paragraph. | Formatted cell | **Bold** and *italic* text | | Inline code cell | `inline_fn()` | | Block code cell | ``` do_thing() ``` | -| Pre with link | `See` [`the docs`](https://example.com/docs) `first` | +| Pre with link | `See `[`the docs`](https://example.com/docs)` first` | Outro paragraph. \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_nested_block_in_list_item.html.itxt b/tests/data/html/groundtruth/html_nested_block_in_list_item.html.itxt index c35d2c394a..4d6fb6c9bc 100644 --- a/tests/data/html/groundtruth/html_nested_block_in_list_item.html.itxt +++ b/tests/data/html/groundtruth/html_nested_block_in_list_item.html.itxt @@ -16,14 +16,14 @@ item-0 at level 0: unspecified: group _root_ item-15 at level 3: list: group ordered list item-16 at level 4: list_item: item-17 at level 5: inline: group group - item-18 at level 6: text: Item with - item-19 at level 6: text: bold + item-18 at level 6: text: Item with + item-19 at level 6: text: bold item-20 at level 6: text: text First paragraph block Second paragraph block item-21 at level 4: list_item: item-22 at level 5: inline: group group - item-23 at level 6: text: Another item in + item-23 at level 6: text: Another item in item-24 at level 6: code: python - item-25 at level 6: text: language + item-25 at level 6: text: language item-26 at level 4: list_item: Final item item-27 at level 2: section_header: Nested list in divs item-28 at level 3: list: group list diff --git a/tests/data/html/groundtruth/html_nested_block_in_list_item.html.json b/tests/data/html/groundtruth/html_nested_block_in_list_item.html.json index 22b17473c1..804bc6ec0e 100644 --- a/tests/data/html/groundtruth/html_nested_block_in_list_item.html.json +++ b/tests/data/html/groundtruth/html_nested_block_in_list_item.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_nested_block_in_list_item", "origin": { "mimetype": "text/html", @@ -349,8 +349,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Item with", - "text": "Item with" + "orig": "Item with ", + "text": "Item with " }, { "self_ref": "#/texts/10", @@ -361,8 +361,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bold", - "text": "bold", + "orig": "bold ", + "text": "bold ", "formatting": { "bold": true, "italic": false, @@ -410,8 +410,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Another item in", - "text": "Another item in" + "orig": "Another item in ", + "text": "Another item in " }, { "self_ref": "#/texts/14", @@ -438,8 +438,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "language", - "text": "language" + "orig": " language", + "text": " language" }, { "self_ref": "#/texts/16", diff --git a/tests/data/html/groundtruth/html_rich_table_cells.html.itxt b/tests/data/html/groundtruth/html_rich_table_cells.html.itxt index 1af62420ac..22a085c3f6 100644 --- a/tests/data/html/groundtruth/html_rich_table_cells.html.itxt +++ b/tests/data/html/groundtruth/html_rich_table_cells.html.itxt @@ -4,11 +4,11 @@ item-0 at level 0: unspecified: group _root_ item-3 at level 3: unspecified: group rich_cell_group_1_1_3 item-4 at level 4: inline: group group item-5 at level 5: text: Large - item-6 at level 5: text: , + item-6 at level 5: text: , item-7 at level 5: text: loud - item-8 at level 5: text: , + item-8 at level 5: text: , item-9 at level 5: text: noisy - item-10 at level 5: text: , + item-10 at level 5: text: , item-11 at level 5: text: small item-12 at level 3: unspecified: group rich_cell_group_1_0_4 item-13 at level 4: list: group list diff --git a/tests/data/html/groundtruth/html_rich_table_cells.html.json b/tests/data/html/groundtruth/html_rich_table_cells.html.json index 14f1a52b3b..ff02c2f447 100644 --- a/tests/data/html/groundtruth/html_rich_table_cells.html.json +++ b/tests/data/html/groundtruth/html_rich_table_cells.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "html_rich_table_cells", "origin": { "mimetype": "text/html", @@ -384,8 +384,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/4", @@ -415,8 +415,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/6", @@ -446,8 +446,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/8", diff --git a/tests/data/html/groundtruth/html_rich_table_cells.html.md b/tests/data/html/groundtruth/html_rich_table_cells.html.md index 04e9601535..a7ce87c93c 100644 --- a/tests/data/html/groundtruth/html_rich_table_cells.html.md +++ b/tests/data/html/groundtruth/html_rich_table_cells.html.md @@ -4,7 +4,7 @@ | - | - | - | | Wood Duck | | Often seen near ponds. | | Mallard | Ponds, lakes, rivers | Quack | -| Goose (not a duck!) | Water & wetlands | **Large** , *loud* , noisy , ~~small~~ | +| Goose (not a duck!) | Water & wetlands | **Large**, *loud*, noisy, ~~small~~ | | Teal | - Pond - Marsh - Riverbank | 1. Fly south in winter 2. Build nest on ground | | Genus | Species | @@ -15,7 +15,7 @@ | Action | Action | | - | - | -| **Swim** | Gracefully glide on H 2 O surfaces. | +| **Swim** | Gracefully glide on H2O surfaces. | | *Fly* | | | Quack | Type Sound Short "quak" Long "quaaaaaack" | diff --git a/tests/data/html/groundtruth/hyperlink_01.html.itxt b/tests/data/html/groundtruth/hyperlink_01.html.itxt index 13f6765778..b6a8d1df28 100644 --- a/tests/data/html/groundtruth/hyperlink_01.html.itxt +++ b/tests/data/html/groundtruth/hyperlink_01.html.itxt @@ -1,6 +1,6 @@ item-0 at level 0: unspecified: group _root_ item-1 at level 1: title: Something item-2 at level 2: inline: group group - item-3 at level 3: text: Please follow the link to: - item-4 at level 3: text: This page + item-3 at level 3: text: Please follow the link to: + item-4 at level 3: text: This page item-5 at level 3: text: . \ No newline at end of file diff --git a/tests/data/html/groundtruth/hyperlink_01.html.json b/tests/data/html/groundtruth/hyperlink_01.html.json index 0b1c9ed2f6..5711d1f18b 100644 --- a/tests/data/html/groundtruth/hyperlink_01.html.json +++ b/tests/data/html/groundtruth/hyperlink_01.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_01", "origin": { "mimetype": "text/html", @@ -73,8 +73,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Please follow the link to:", - "text": "Please follow the link to:" + "orig": "Please follow the link to: ", + "text": "Please follow the link to: " }, { "self_ref": "#/texts/2", @@ -85,8 +85,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This page", - "text": "This page", + "orig": "This page ", + "text": "This page ", "hyperlink": "#" }, { diff --git a/tests/data/html/groundtruth/hyperlink_02.html.json b/tests/data/html/groundtruth/hyperlink_02.html.json index 8c5ddae0fa..b43a927e7f 100644 --- a/tests/data/html/groundtruth/hyperlink_02.html.json +++ b/tests/data/html/groundtruth/hyperlink_02.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_02", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/hyperlink_03.html.itxt b/tests/data/html/groundtruth/hyperlink_03.html.itxt index a55098de02..8083536281 100644 --- a/tests/data/html/groundtruth/hyperlink_03.html.itxt +++ b/tests/data/html/groundtruth/hyperlink_03.html.itxt @@ -8,14 +8,14 @@ item-0 at level 0: unspecified: group _root_ item-7 at level 5: list: group list item-8 at level 6: list_item: item-9 at level 7: inline: group group - item-10 at level 8: text: This is my + item-10 at level 8: text: This is my item-11 at level 8: text: Homepage item-12 at level 7: list: group list item-13 at level 8: list_item: List item inner item-14 at level 8: list_item: item-15 at level 9: inline: group group - item-16 at level 10: text: More text - item-17 at level 10: text: with some links + item-16 at level 10: text: More text + item-17 at level 10: text: with some links item-18 at level 10: text: and more text. item-19 at level 6: list_item: Main navigation item-20 at level 2: list_item: My organisation \ No newline at end of file diff --git a/tests/data/html/groundtruth/hyperlink_03.html.json b/tests/data/html/groundtruth/hyperlink_03.html.json index 2597720036..579e8248c0 100644 --- a/tests/data/html/groundtruth/hyperlink_03.html.json +++ b/tests/data/html/groundtruth/hyperlink_03.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_03", "origin": { "mimetype": "text/html", @@ -230,8 +230,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is my", - "text": "This is my" + "orig": "This is my ", + "text": "This is my " }, { "self_ref": "#/texts/5", @@ -287,8 +287,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "More text", - "text": "More text" + "orig": "More text ", + "text": "More text " }, { "self_ref": "#/texts/9", @@ -299,8 +299,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "with some links", - "text": "with some links", + "orig": "with some links ", + "text": "with some links ", "hyperlink": "/some_links.html" }, { diff --git a/tests/data/html/groundtruth/hyperlink_04.html.json b/tests/data/html/groundtruth/hyperlink_04.html.json index 2dcce57f78..15a74b2703 100644 --- a/tests/data/html/groundtruth/hyperlink_04.html.json +++ b/tests/data/html/groundtruth/hyperlink_04.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_04", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/hyperlink_05.html.json b/tests/data/html/groundtruth/hyperlink_05.html.json index 8b8f4e70c5..88f9a5fe25 100644 --- a/tests/data/html/groundtruth/hyperlink_05.html.json +++ b/tests/data/html/groundtruth/hyperlink_05.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_05", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/hyperlink_06.html.itxt b/tests/data/html/groundtruth/hyperlink_06.html.itxt index 081557e7d2..c60063d344 100644 --- a/tests/data/html/groundtruth/hyperlink_06.html.itxt +++ b/tests/data/html/groundtruth/hyperlink_06.html.itxt @@ -1,13 +1,13 @@ item-0 at level 0: unspecified: group _root_ item-1 at level 1: title: Anchor Links Test item-2 at level 2: inline: group group - item-3 at level 3: text: Jump to - item-4 at level 3: text: Section 2 - item-5 at level 3: text: or visit + item-3 at level 3: text: Jump to + item-4 at level 3: text: Section 2 + item-5 at level 3: text: or visit item-6 at level 3: text: Example item-7 at level 3: text: . item-8 at level 2: section_header: Section 2 item-9 at level 3: inline: group group - item-10 at level 4: text: Content for section 2 with a + item-10 at level 4: text: Content for section 2 with a item-11 at level 4: text: top link item-12 at level 4: text: . \ No newline at end of file diff --git a/tests/data/html/groundtruth/hyperlink_06.html.json b/tests/data/html/groundtruth/hyperlink_06.html.json index d9bbf42d2b..e9dabba124 100644 --- a/tests/data/html/groundtruth/hyperlink_06.html.json +++ b/tests/data/html/groundtruth/hyperlink_06.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "hyperlink_06", "origin": { "mimetype": "text/html", @@ -117,8 +117,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Jump to", - "text": "Jump to" + "orig": "Jump to ", + "text": "Jump to " }, { "self_ref": "#/texts/3", @@ -129,8 +129,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Section 2", - "text": "Section 2", + "orig": "Section 2 ", + "text": "Section 2 ", "hyperlink": "#section-2" }, { @@ -142,8 +142,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or visit", - "text": "or visit" + "orig": "or visit ", + "text": "or visit " }, { "self_ref": "#/texts/5", @@ -196,8 +196,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Content for section 2 with a", - "text": "Content for section 2 with a" + "orig": "Content for section 2 with a ", + "text": "Content for section 2 with a " }, { "self_ref": "#/texts/9", diff --git a/tests/data/html/groundtruth/hyperlink_06.html.md b/tests/data/html/groundtruth/hyperlink_06.html.md index a6807ba207..2556266bda 100644 --- a/tests/data/html/groundtruth/hyperlink_06.html.md +++ b/tests/data/html/groundtruth/hyperlink_06.html.md @@ -1,7 +1,7 @@ # Anchor Links Test -Jump to [Section 2](#section-2) or visit [Example](https://example.com/) . +Jump to [Section 2](#section-2) or visit [Example](https://example.com/). ## Section 2 -Content for section 2 with a [top link](#) . \ No newline at end of file +Content for section 2 with a [top link](#). \ No newline at end of file diff --git a/tests/data/html/groundtruth/kvp_data_example.html.json b/tests/data/html/groundtruth/kvp_data_example.html.json index b4b5bf346b..05d28261b7 100644 --- a/tests/data/html/groundtruth/kvp_data_example.html.json +++ b/tests/data/html/groundtruth/kvp_data_example.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "kvp_data_example", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_01.html.json b/tests/data/html/groundtruth/table_01.html.json index b234edbc96..df3e428812 100644 --- a/tests/data/html/groundtruth/table_01.html.json +++ b/tests/data/html/groundtruth/table_01.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_02.html.json b/tests/data/html/groundtruth/table_02.html.json index 29be266ba0..6aec77e5b3 100644 --- a/tests/data/html/groundtruth/table_02.html.json +++ b/tests/data/html/groundtruth/table_02.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_02", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_03.html.json b/tests/data/html/groundtruth/table_03.html.json index 8dcddb17d3..2558320f58 100644 --- a/tests/data/html/groundtruth/table_03.html.json +++ b/tests/data/html/groundtruth/table_03.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_03", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_04.html.json b/tests/data/html/groundtruth/table_04.html.json index ddafc2c0b6..7e0320fd26 100644 --- a/tests/data/html/groundtruth/table_04.html.json +++ b/tests/data/html/groundtruth/table_04.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_04", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_05.html.json b/tests/data/html/groundtruth/table_05.html.json index 9f354ddb9d..d80ca87132 100644 --- a/tests/data/html/groundtruth/table_05.html.json +++ b/tests/data/html/groundtruth/table_05.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_05", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_06.html.json b/tests/data/html/groundtruth/table_06.html.json index 0c26002799..0ab1cb9d3b 100644 --- a/tests/data/html/groundtruth/table_06.html.json +++ b/tests/data/html/groundtruth/table_06.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_06", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_with_heading_01.html.json b/tests/data/html/groundtruth/table_with_heading_01.html.json index 1f9e8c8dff..22d7696c13 100644 --- a/tests/data/html/groundtruth/table_with_heading_01.html.json +++ b/tests/data/html/groundtruth/table_with_heading_01.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_with_heading_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/table_with_heading_02.html.json b/tests/data/html/groundtruth/table_with_heading_02.html.json index 8cb7ff43d9..a4433b9eac 100644 --- a/tests/data/html/groundtruth/table_with_heading_02.html.json +++ b/tests/data/html/groundtruth/table_with_heading_02.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "table_with_heading_02", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/unit_test_01.html.json b/tests/data/html/groundtruth/unit_test_01.html.json index 99c7e4ecf6..fb84054bbf 100644 --- a/tests/data/html/groundtruth/unit_test_01.html.json +++ b/tests/data/html/groundtruth/unit_test_01.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "unit_test_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/html/groundtruth/wiki_duck.html.itxt b/tests/data/html/groundtruth/wiki_duck.html.itxt index cfab79241b..e38c6ac66c 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.itxt +++ b/tests/data/html/groundtruth/wiki_duck.html.itxt @@ -15,7 +15,7 @@ item-0 at level 0: unspecified: group _root_ item-14 at level 5: list: group list item-15 at level 4: list_item: item-16 at level 5: inline: group group - item-17 at level 6: text: 5 Behaviour + item-17 at level 6: text: 5 Behaviour item-18 at level 6: text: Toggle Behaviour subsection item-19 at level 5: list: group list item-20 at level 6: list_item: 5.1 Feeding @@ -28,7 +28,7 @@ item-0 at level 0: unspecified: group _root_ item-27 at level 7: list: group list item-28 at level 4: list_item: item-29 at level 5: inline: group group - item-30 at level 6: text: 6 Relationship with humans + item-30 at level 6: text: 6 Relationship with humans item-31 at level 6: text: Toggle Relationship with humans subsection item-32 at level 5: list: group list item-33 at level 6: list_item: 6.1 Hunting @@ -43,7 +43,7 @@ item-0 at level 0: unspecified: group _root_ item-42 at level 5: list: group list item-43 at level 4: list_item: item-44 at level 5: inline: group group - item-45 at level 6: text: 8 Notes + item-45 at level 6: text: 8 Notes item-46 at level 6: text: Toggle Notes subsection item-47 at level 5: list: group list item-48 at level 6: list_item: 8.1 Citations @@ -238,17 +238,17 @@ item-0 at level 0: unspecified: group _root_ item-236 at level 3: caption: Page semi-protected item-237 at level 2: text: From Wikipedia, the free encyclopedia item-238 at level 2: inline: group group - item-239 at level 3: text: (Redirected from + item-239 at level 3: text: (Redirected from item-240 at level 3: text: Duckling item-241 at level 3: text: ) item-242 at level 2: inline: group group - item-243 at level 3: text: This article is about the bird. For duck as a food, see + item-243 at level 3: text: This article is about the bird. For duck as a food, see item-244 at level 3: text: Duck as food - item-245 at level 3: text: . For other uses, see + item-245 at level 3: text: . For other uses, see item-246 at level 3: text: Duck (disambiguation) item-247 at level 3: text: . item-248 at level 2: inline: group group - item-249 at level 3: text: "Duckling" redirects here. For other uses, see + item-249 at level 3: text: "Duckling" redirects here. For other uses, see item-250 at level 3: text: Duckling (disambiguation) item-251 at level 3: text: . item-252 at level 2: table with [13x2] @@ -256,7 +256,7 @@ item-0 at level 0: unspecified: group _root_ item-254 at level 4: picture item-255 at level 3: unspecified: group rich_cell_group_1_0_2 item-256 at level 4: inline: group group - item-257 at level 5: text: Bufflehead + item-257 at level 5: text: Bufflehead item-258 at level 5: text: ( item-259 at level 5: text: Bucephala albeola item-260 at level 5: text: ) @@ -279,546 +279,546 @@ item-0 at level 0: unspecified: group _root_ item-276 at level 3: unspecified: group rich_cell_group_1_0_10 item-277 at level 4: text: Anatidae item-278 at level 2: inline: group group - item-279 at level 3: text: Duck - item-280 at level 3: text: is the common name for numerous species of - item-281 at level 3: text: waterfowl - item-282 at level 3: text: in the - item-283 at level 3: text: family + item-279 at level 3: text: Duck + item-280 at level 3: text: is the common name for numerous species of + item-281 at level 3: text: waterfowl + item-282 at level 3: text: in the + item-283 at level 3: text: family item-284 at level 3: text: Anatidae - item-285 at level 3: text: . Ducks are generally smaller and shorter-necked than - item-286 at level 3: text: swans - item-287 at level 3: text: and + item-285 at level 3: text: . Ducks are generally smaller and shorter-necked than + item-286 at level 3: text: swans + item-287 at level 3: text: and item-288 at level 3: text: geese - item-289 at level 3: text: , which are members of the same ... among several subfamilies, they are a + item-289 at level 3: text: , which are members of the same ... among several subfamilies, they are a item-290 at level 3: text: form taxon - item-291 at level 3: text: ; they do not represent a - item-292 at level 3: text: monophyletic group - item-293 at level 3: text: (the group of all descendants of ... not considered ducks. Ducks are mostly + item-291 at level 3: text: ; they do not represent a + item-292 at level 3: text: monophyletic group + item-293 at level 3: text: (the group of all descendants of ... ot considered ducks. Ducks are mostly item-294 at level 3: text: aquatic birds item-295 at level 3: text: , and may be found in both fresh water and sea water. item-296 at level 2: inline: group group - item-297 at level 3: text: Ducks are sometimes confused wit ... ater birds with similar forms, such as - item-298 at level 3: text: loons - item-299 at level 3: text: or divers, + item-297 at level 3: text: Ducks are sometimes confused wit ... ter birds with similar forms, such as + item-298 at level 3: text: loons + item-299 at level 3: text: or divers, item-300 at level 3: text: grebes - item-301 at level 3: text: , - item-302 at level 3: text: gallinules - item-303 at level 3: text: and + item-301 at level 3: text: , + item-302 at level 3: text: gallinules + item-303 at level 3: text: and item-304 at level 3: text: coots item-305 at level 3: text: . item-306 at level 2: section_header: Etymology item-307 at level 3: inline: group group - item-308 at level 4: text: The word - item-309 at level 4: text: duck - item-310 at level 4: text: comes from - item-311 at level 4: text: Old English - item-312 at level 4: text: dūce + item-308 at level 4: text: The word + item-309 at level 4: text: duck + item-310 at level 4: text: comes from + item-311 at level 4: text: Old English + item-312 at level 4: text: dūce item-313 at level 4: text: 'diver', a derivative of the verb * - item-314 at level 4: text: dūcan - item-315 at level 4: text: 'to duck, bend down low as if to ... because of the way many species in the - item-316 at level 4: text: dabbling duck - item-317 at level 4: text: group feed by upending; compare with - item-318 at level 4: text: Dutch - item-319 at level 4: text: duiken - item-320 at level 4: text: and - item-321 at level 4: text: German - item-322 at level 4: text: tauchen + item-314 at level 4: text: dūcan + item-315 at level 4: text: 'to duck, bend down low as if to ... ecause of the way many species in the + item-316 at level 4: text: dabbling duck + item-317 at level 4: text: group feed by upending; compare with + item-318 at level 4: text: Dutch + item-319 at level 4: text: duiken + item-320 at level 4: text: and + item-321 at level 4: text: German + item-322 at level 4: text: tauchen item-323 at level 4: text: 'to dive'. item-324 at level 3: picture item-324 at level 4: caption: Pacific black duck displaying the characteristic upending "duck" item-325 at level 3: inline: group group - item-326 at level 4: text: This word replaced Old English - item-327 at level 4: text: ened + item-326 at level 4: text: This word replaced Old English + item-327 at level 4: text: ened item-328 at level 4: text: / - item-329 at level 4: text: ænid - item-330 at level 4: text: 'duck', possibly to avoid confusion with other words, such as - item-331 at level 4: text: ende - item-332 at level 4: text: 'end' with similar forms. Other ... languages still have similar words for + item-329 at level 4: text: ænid + item-330 at level 4: text: 'duck', possibly to avoid confusion with other words, such as + item-331 at level 4: text: ende + item-332 at level 4: text: 'end' with similar forms. Other ... anguages still have similar words for item-333 at level 4: text: duck - item-334 at level 4: text: , for example, Dutch + item-334 at level 4: text: , for example, Dutch item-335 at level 4: text: eend - item-336 at level 4: text: , German - item-337 at level 4: text: Ente - item-338 at level 4: text: and - item-339 at level 4: text: Norwegian + item-336 at level 4: text: , German + item-337 at level 4: text: Ente + item-338 at level 4: text: and + item-339 at level 4: text: Norwegian item-340 at level 4: text: and - item-341 at level 4: text: . The word - item-342 at level 4: text: ened + item-341 at level 4: text: . The word + item-342 at level 4: text: ened item-343 at level 4: text: / - item-344 at level 4: text: ænid - item-345 at level 4: text: was inherited from + item-344 at level 4: text: ænid + item-345 at level 4: text: was inherited from item-346 at level 4: text: Proto-Indo-European - item-347 at level 4: text: ; - item-348 at level 4: text: cf. - item-349 at level 4: text: Latin - item-350 at level 4: text: anas - item-351 at level 4: text: "duck", - item-352 at level 4: text: Lithuanian - item-353 at level 4: text: ántis - item-354 at level 4: text: 'duck', - item-355 at level 4: text: Ancient Greek - item-356 at level 4: text: νῆσσα / νῆττα ( - item-357 at level 4: text: nēssa + item-347 at level 4: text: ; + item-348 at level 4: text: cf. + item-349 at level 4: text: Latin + item-350 at level 4: text: anas + item-351 at level 4: text: "duck", + item-352 at level 4: text: Lithuanian + item-353 at level 4: text: ántis + item-354 at level 4: text: 'duck', + item-355 at level 4: text: Ancient Greek + item-356 at level 4: text: νῆσσα /νῆττα ( + item-357 at level 4: text: nēssa item-358 at level 4: text: / item-359 at level 4: text: nētta - item-360 at level 4: text: ) 'duck', and - item-361 at level 4: text: Sanskrit - item-362 at level 4: text: ātí + item-360 at level 4: text: ) 'duck', and + item-361 at level 4: text: Sanskrit + item-362 at level 4: text: ātí item-363 at level 4: text: 'water bird', among others. item-364 at level 3: inline: group group item-365 at level 4: text: A duckling is a young duck in downy plumage - item-366 at level 4: text: [ 1 ] + item-366 at level 4: text: [1] item-367 at level 4: text: or baby duck, - item-368 at level 4: text: [ 2 ] + item-368 at level 4: text: [2] item-369 at level 4: text: but in the food trade a young do ... , is sometimes labelled as a duckling. item-370 at level 3: inline: group group - item-371 at level 4: text: A male is called a - item-372 at level 4: text: drake - item-373 at level 4: text: and the female is called a duck, or in - item-374 at level 4: text: ornithology + item-371 at level 4: text: A male is called a + item-372 at level 4: text: drake + item-373 at level 4: text: and the female is called a duck, or in + item-374 at level 4: text: ornithology item-375 at level 4: text: a hen. - item-376 at level 4: text: [ 3 ] - item-377 at level 4: text: [ 4 ] + item-376 at level 4: text: [3] + item-377 at level 4: text: [4] item-378 at level 3: picture - item-378 at level 4: caption: Male mallard . + item-378 at level 4: caption: Male mallard. item-379 at level 3: picture - item-379 at level 4: caption: Wood ducks . + item-379 at level 4: caption: Wood ducks. item-380 at level 2: section_header: Taxonomy item-381 at level 3: inline: group group - item-382 at level 4: text: All ducks belong to the - item-383 at level 4: text: biological order + item-382 at level 4: text: All ducks belong to the + item-383 at level 4: text: biological order item-384 at level 4: text: Anseriformes - item-385 at level 4: text: , a group that contains the ducks, geese and swans, as well as the + item-385 at level 4: text: , a group that contains the ducks, geese and swans, as well as the item-386 at level 4: text: screamers - item-387 at level 4: text: , and the + item-387 at level 4: text: , and the item-388 at level 4: text: magpie goose item-389 at level 4: text: . - item-390 at level 4: text: [ 5 ] - item-391 at level 4: text: All except the screamers belong to the - item-392 at level 4: text: biological family + item-390 at level 4: text: [5] + item-391 at level 4: text: All except the screamers belong to the + item-392 at level 4: text: biological family item-393 at level 4: text: Anatidae item-394 at level 4: text: . - item-395 at level 4: text: [ 5 ] + item-395 at level 4: text: [5] item-396 at level 4: text: Within the family, ducks are spl ... erable disagreement among taxonomists. - item-397 at level 4: text: [ 5 ] - item-398 at level 4: text: Some base their decisions on + item-397 at level 4: text: [5] + item-398 at level 4: text: Some base their decisions on item-399 at level 4: text: morphological characteristics item-400 at level 4: text: , others on shared behaviours or genetic studies. - item-401 at level 4: text: [ 6 ] - item-402 at level 4: text: [ 7 ] + item-401 at level 4: text: [6] + item-402 at level 4: text: [7] item-403 at level 4: text: The number of suggested subfamil ... taining ducks ranges from two to five. - item-404 at level 4: text: [ 8 ] - item-405 at level 4: text: [ 9 ] - item-406 at level 4: text: The significant level of - item-407 at level 4: text: hybridisation + item-404 at level 4: text: [8] + item-405 at level 4: text: [9] + item-406 at level 4: text: The significant level of + item-407 at level 4: text: hybridisation item-408 at level 4: text: that occurs among wild ducks com ... relationships between various species. - item-409 at level 4: text: [ 9 ] + item-409 at level 4: text: [9] item-410 at level 3: picture item-410 at level 4: caption: Mallard landing in approach item-411 at level 3: inline: group group item-412 at level 4: text: In most modern classifications, ... split into a varying number of tribes. - item-413 at level 4: text: [ 10 ] + item-413 at level 4: text: [10] item-414 at level 4: text: The largest of these, the Anatin ... imarily at the surface of fresh water. - item-415 at level 4: text: [ 11 ] + item-415 at level 4: text: [11] item-416 at level 4: text: The 'diving ducks', also named f ... ng method, make up the tribe Aythyini. - item-417 at level 4: text: [ 12 ] + item-417 at level 4: text: [12] item-418 at level 4: text: The 'sea ducks' of the tribe Mer ... majority of their lives in saltwater. - item-419 at level 4: text: [ 13 ] + item-419 at level 4: text: [13] item-420 at level 4: text: The tribe Oxyurini contains the ... r small size and stiff, upright tails. - item-421 at level 4: text: [ 14 ] + item-421 at level 4: text: [14] item-422 at level 3: inline: group group - item-423 at level 4: text: A number of other species called ... ed in other subfamilies or tribes. The - item-424 at level 4: text: whistling ducks + item-423 at level 4: text: A number of other species called ... d in other subfamilies or tribes. The + item-424 at level 4: text: whistling ducks item-425 at level 4: text: are assigned either to a tribe ( ... y Anatinae or the subfamily Anserinae, - item-426 at level 4: text: [ 15 ] + item-426 at level 4: text: [15] item-427 at level 4: text: or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae). - item-428 at level 4: text: [ 9 ] - item-429 at level 4: text: [ 16 ] - item-430 at level 4: text: The - item-431 at level 4: text: freckled duck + item-428 at level 4: text: [9] + item-429 at level 4: text: [16] + item-430 at level 4: text: The + item-431 at level 4: text: freckled duck item-432 at level 4: text: of Australia is either the sole ... ctonettini in the subfamily Anserinae, - item-433 at level 4: text: [ 15 ] + item-433 at level 4: text: [15] item-434 at level 4: text: or in its own family, the Stictonettinae. - item-435 at level 4: text: [ 9 ] - item-436 at level 4: text: The - item-437 at level 4: text: shelducks + item-435 at level 4: text: [9] + item-436 at level 4: text: The + item-437 at level 4: text: shelducks item-438 at level 4: text: make up the tribe Tadornini in t ... ily Anserinae in some classifications, - item-439 at level 4: text: [ 15 ] + item-439 at level 4: text: [15] item-440 at level 4: text: and their own subfamily, Tadorninae, in others, - item-441 at level 4: text: [ 17 ] - item-442 at level 4: text: while the - item-443 at level 4: text: steamer ducks + item-441 at level 4: text: [17] + item-442 at level 4: text: while the + item-443 at level 4: text: steamer ducks item-444 at level 4: text: are either placed in the family Anserinae in the tribe Tachyerini - item-445 at level 4: text: [ 15 ] + item-445 at level 4: text: [15] item-446 at level 4: text: or lumped with the shelducks in the tribe Tadorini. - item-447 at level 4: text: [ 9 ] - item-448 at level 4: text: The - item-449 at level 4: text: perching ducks + item-447 at level 4: text: [9] + item-448 at level 4: text: The + item-449 at level 4: text: perching ducks item-450 at level 4: text: make up in the tribe Cairinini i ... members assigned to the tribe Anatini. - item-451 at level 4: text: [ 9 ] - item-452 at level 4: text: The - item-453 at level 4: text: torrent duck + item-451 at level 4: text: [9] + item-452 at level 4: text: The + item-453 at level 4: text: torrent duck item-454 at level 4: text: is generally included in the sub ... e in the monotypic tribe Merganettini, - item-455 at level 4: text: [ 15 ] + item-455 at level 4: text: [15] item-456 at level 4: text: but is sometimes included in the tribe Tadornini. - item-457 at level 4: text: [ 18 ] - item-458 at level 4: text: The - item-459 at level 4: text: pink-eared duck + item-457 at level 4: text: [18] + item-458 at level 4: text: The + item-459 at level 4: text: pink-eared duck item-460 at level 4: text: is sometimes included as a true duck either in the tribe Anatini - item-461 at level 4: text: [ 15 ] + item-461 at level 4: text: [15] item-462 at level 4: text: or the tribe Malacorhynchini, - item-463 at level 4: text: [ 19 ] + item-463 at level 4: text: [19] item-464 at level 4: text: and other times is included with the shelducks in the tribe Tadornini. - item-465 at level 4: text: [ 15 ] + item-465 at level 4: text: [15] item-466 at level 2: section_header: Morphology item-467 at level 3: picture item-467 at level 4: caption: Male Mandarin duck item-468 at level 3: inline: group group - item-469 at level 4: text: The overall - item-470 at level 4: text: body plan - item-471 at level 4: text: of ducks is elongated and broad, ... t from this in being more rounded. The - item-472 at level 4: text: bill - item-473 at level 4: text: is usually broad and contains serrated + item-469 at level 4: text: The overall + item-470 at level 4: text: body plan + item-471 at level 4: text: of ducks is elongated and broad, ... from this in being more rounded. The + item-472 at level 4: text: bill + item-473 at level 4: text: is usually broad and contains serrated item-474 at level 4: text: pectens - item-475 at level 4: text: , which are particularly well de ... e generally short and pointed, and the - item-476 at level 4: text: flight - item-477 at level 4: text: of ducks requires fast continuou ... strong wing muscles. Three species of - item-478 at level 4: text: steamer duck - item-479 at level 4: text: are almost flightless, however. ... duck are temporarily flightless while + item-475 at level 4: text: , which are particularly well de ... generally short and pointed, and the + item-476 at level 4: text: flight + item-477 at level 4: text: of ducks requires fast continuou ... strong wing muscles. Three species of + item-478 at level 4: text: steamer duck + item-479 at level 4: text: are almost flightless, however. ... duck are temporarily flightless while item-480 at level 4: text: moulting - item-481 at level 4: text: ; they seek out protected habita ... period. This moult typically precedes + item-481 at level 4: text: ; they seek out protected habita ... period. This moult typically precedes item-482 at level 4: text: migration item-483 at level 4: text: . item-484 at level 3: inline: group group - item-485 at level 4: text: The drakes of northern species often have extravagant + item-485 at level 4: text: The drakes of northern species often have extravagant item-486 at level 4: text: plumage - item-487 at level 4: text: , but that is - item-488 at level 4: text: moulted - item-489 at level 4: text: in summer to give a more female- ... n resident species typically show less + item-487 at level 4: text: , but that is + item-488 at level 4: text: moulted + item-489 at level 4: text: in summer to give a more female- ... resident species typically show less item-490 at level 4: text: sexual dimorphism - item-491 at level 4: text: , although there are exceptions such as the - item-492 at level 4: text: paradise shelduck - item-493 at level 4: text: of + item-491 at level 4: text: , although there are exceptions such as the + item-492 at level 4: text: paradise shelduck + item-493 at level 4: text: of item-494 at level 4: text: New Zealand item-495 at level 4: text: , which is both strikingly sexua ... rkscrew shaped vagina to prevent rape. item-496 at level 2: section_header: Distribution and habitat item-497 at level 3: inline: group group - item-498 at level 4: text: See also: + item-498 at level 4: text: See also: item-499 at level 4: text: List of Anseriformes by population item-500 at level 3: picture - item-500 at level 4: caption: Flying steamer ducks in Ushuaia , Argentina + item-500 at level 4: caption: Flying steamer ducks in Ushuaia, Argentina item-501 at level 3: inline: group group - item-502 at level 4: text: Ducks have a + item-502 at level 4: text: Ducks have a item-503 at level 4: text: cosmopolitan distribution item-504 at level 4: text: , and are found on every continent except Antarctica. - item-505 at level 4: text: [ 5 ] - item-506 at level 4: text: Several species manage to live on subantarctic islands, including - item-507 at level 4: text: South Georgia - item-508 at level 4: text: and the + item-505 at level 4: text: [5] + item-506 at level 4: text: Several species manage to live on subantarctic islands, including + item-507 at level 4: text: South Georgia + item-508 at level 4: text: and the item-509 at level 4: text: Auckland Islands item-510 at level 4: text: . - item-511 at level 4: text: [ 20 ] - item-512 at level 4: text: Ducks have reached a number of isolated oceanic islands, including the + item-511 at level 4: text: [20] + item-512 at level 4: text: Ducks have reached a number of isolated oceanic islands, including the item-513 at level 4: text: Hawaiian Islands - item-514 at level 4: text: , - item-515 at level 4: text: Micronesia - item-516 at level 4: text: and the + item-514 at level 4: text: , + item-515 at level 4: text: Micronesia + item-516 at level 4: text: and the item-517 at level 4: text: Galápagos Islands - item-518 at level 4: text: , where they are often - item-519 at level 4: text: vagrants - item-520 at level 4: text: and less often + item-518 at level 4: text: , where they are often + item-519 at level 4: text: vagrants + item-520 at level 4: text: and less often item-521 at level 4: text: residents item-522 at level 4: text: . - item-523 at level 4: text: [ 21 ] - item-524 at level 4: text: [ 22 ] - item-525 at level 4: text: A handful are - item-526 at level 4: text: endemic + item-523 at level 4: text: [21] + item-524 at level 4: text: [22] + item-525 at level 4: text: A handful are + item-526 at level 4: text: endemic item-527 at level 4: text: to such far-flung islands. - item-528 at level 4: text: [ 21 ] + item-528 at level 4: text: [21] item-529 at level 3: picture - item-529 at level 4: caption: Female mallard in Cornwall , England + item-529 at level 4: caption: Female mallard in Cornwall, England item-530 at level 3: inline: group group item-531 at level 4: text: Some duck species, mainly those ... that form after localised heavy rain. - item-532 at level 4: text: [ 23 ] + item-532 at level 4: text: [23] item-533 at level 2: section_header: Behaviour item-534 at level 3: section_header: Feeding item-535 at level 4: picture item-535 at level 5: caption: Pecten along the bill item-536 at level 4: inline: group group - item-537 at level 5: text: Ducks eat food sources such as + item-537 at level 5: text: Ducks eat food sources such as item-538 at level 5: text: grasses - item-539 at level 5: text: , aquatic plants, fish, insects, small amphibians, worms, and small + item-539 at level 5: text: , aquatic plants, fish, insects, small amphibians, worms, and small item-540 at level 5: text: molluscs item-541 at level 5: text: . item-542 at level 4: inline: group group - item-543 at level 5: text: Dabbling ducks + item-543 at level 5: text: Dabbling ducks item-544 at level 5: text: feed on the surface of water or ... -ending without completely submerging. - item-545 at level 5: text: [ 24 ] - item-546 at level 5: text: Along the edge of the bill, there is a comb-like structure called a + item-545 at level 5: text: [24] + item-546 at level 5: text: Along the edge of the bill, there is a comb-like structure called a item-547 at level 5: text: pecten item-548 at level 5: text: . This strains the water squirti ... thers and to hold slippery food items. item-549 at level 4: inline: group group - item-550 at level 5: text: Diving ducks - item-551 at level 5: text: and - item-552 at level 5: text: sea ducks + item-550 at level 5: text: Diving ducks + item-551 at level 5: text: and + item-552 at level 5: text: sea ducks item-553 at level 5: text: forage deep underwater. To be ab ... ave more difficulty taking off to fly. item-554 at level 4: inline: group group - item-555 at level 5: text: A few specialized species such as the - item-556 at level 5: text: mergansers + item-555 at level 5: text: A few specialized species such as the + item-556 at level 5: text: mergansers item-557 at level 5: text: are adapted to catch and swallow large fish. item-558 at level 4: inline: group group - item-559 at level 5: text: The others have the characteristic wide flat bill adapted to + item-559 at level 5: text: The others have the characteristic wide flat bill adapted to item-560 at level 5: text: dredging - item-561 at level 5: text: -type jobs such as pulling up wa ... y when digging into sediment it has no + item-561 at level 5: text: -type jobs such as pulling up wa ... when digging into sediment it has no item-562 at level 5: text: cere item-563 at level 5: text: , but the nostrils come out through hard horn. item-564 at level 4: inline: group group - item-565 at level 5: text: The Guardian - item-566 at level 5: text: published an article advising th ... hould not be fed with bread because it - item-567 at level 5: text: damages the health of the ducks + item-565 at level 5: text: The Guardian + item-566 at level 5: text: published an article advising th ... ould not be fed with bread because it + item-567 at level 5: text: damages the health of the ducks item-568 at level 5: text: and pollutes waterways. - item-569 at level 5: text: [ 25 ] + item-569 at level 5: text: [25] item-570 at level 3: section_header: Breeding item-571 at level 4: picture item-571 at level 5: caption: A Muscovy duckling item-572 at level 4: inline: group group - item-573 at level 5: text: Ducks generally + item-573 at level 5: text: Ducks generally item-574 at level 5: text: only have one partner at a time item-575 at level 5: text: , although the partnership usually only lasts one year. - item-576 at level 5: text: [ 26 ] + item-576 at level 5: text: [26] item-577 at level 5: text: Larger species and the more sede ... e pair-bonds that last numerous years. - item-578 at level 5: text: [ 27 ] + item-578 at level 5: text: [27] item-579 at level 5: text: Most duck species breed once a y ... ng to do so in favourable conditions ( item-580 at level 5: text: spring - item-581 at level 5: text: /summer or wet seasons). Ducks also tend to make a - item-582 at level 5: text: nest - item-583 at level 5: text: before breeding, and, after hatc ... out of (such as nesting in an enclosed + item-581 at level 5: text: /summer or wet seasons). Ducks also tend to make a + item-582 at level 5: text: nest + item-583 at level 5: text: before breeding, and, after hatc ... ut of (such as nesting in an enclosed item-584 at level 5: text: courtyard item-585 at level 5: text: ) or are not prospering due to g ... e nest and led her ducklings to water. - item-586 at level 5: text: [ 28 ] + item-586 at level 5: text: [28] item-587 at level 3: section_header: Communication item-588 at level 4: inline: group group - item-589 at level 5: text: Female - item-590 at level 5: text: mallard - item-591 at level 5: text: ducks (as well as several other species in the genus + item-589 at level 5: text: Female + item-590 at level 5: text: mallard + item-591 at level 5: text: ducks (as well as several other species in the genus item-592 at level 5: text: Anas - item-593 at level 5: text: , such as the - item-594 at level 5: text: American - item-595 at level 5: text: and + item-593 at level 5: text: , such as the + item-594 at level 5: text: American + item-595 at level 5: text: and item-596 at level 5: text: Pacific black ducks - item-597 at level 5: text: , + item-597 at level 5: text: , item-598 at level 5: text: spot-billed duck - item-599 at level 5: text: , - item-600 at level 5: text: northern pintail - item-601 at level 5: text: and + item-599 at level 5: text: , + item-600 at level 5: text: northern pintail + item-601 at level 5: text: and item-602 at level 5: text: common teal item-603 at level 5: text: ) make the classic "quack" sound ... at is sometimes written as "breeeeze", - item-604 at level 5: text: [ 29 ] + item-604 at level 5: text: [29] item-605 at level 5: text: [ item-606 at level 5: text: self-published source? - item-607 at level 5: text: ] + item-607 at level 5: text: ] item-608 at level 5: text: but, despite widespread misconce ... , most species of duck do not "quack". - item-609 at level 5: text: [ 30 ] - item-610 at level 5: text: In general, ducks make a range of + item-609 at level 5: text: [30] + item-610 at level 5: text: In general, ducks make a range of item-611 at level 5: text: calls - item-612 at level 5: text: , including whistles, cooing, yodels and grunts. For example, the - item-613 at level 5: text: scaup - item-614 at level 5: text: - which are - item-615 at level 5: text: diving ducks + item-612 at level 5: text: , including whistles, cooing, yodels and grunts. For example, the + item-613 at level 5: text: scaup + item-614 at level 5: text: - which are + item-615 at level 5: text: diving ducks item-616 at level 5: text: - make a noise like "scaup" (hen ... laying calls or quieter contact calls. item-617 at level 4: inline: group group - item-618 at level 5: text: A common - item-619 at level 5: text: urban legend - item-620 at level 5: text: claims that duck quacks do not e ... y the Acoustics Research Centre at the - item-621 at level 5: text: University of Salford - item-622 at level 5: text: in 2003 as part of the + item-618 at level 5: text: A common + item-619 at level 5: text: urban legend + item-620 at level 5: text: claims that duck quacks do not e ... the Acoustics Research Centre at the + item-621 at level 5: text: University of Salford + item-622 at level 5: text: in 2003 as part of the item-623 at level 5: text: British Association item-624 at level 5: text: 's Festival of Science. - item-625 at level 5: text: [ 31 ] - item-626 at level 5: text: It was also debunked in - item-627 at level 5: text: one of the earlier episodes - item-628 at level 5: text: of the popular Discovery Channel television show + item-625 at level 5: text: [31] + item-626 at level 5: text: It was also debunked in + item-627 at level 5: text: one of the earlier episodes + item-628 at level 5: text: of the popular Discovery Channel television show item-629 at level 5: text: MythBusters item-630 at level 5: text: . - item-631 at level 5: text: [ 32 ] + item-631 at level 5: text: [32] item-632 at level 3: section_header: Predators item-633 at level 4: picture item-633 at level 5: caption: Ringed teal item-634 at level 4: inline: group group - item-635 at level 5: text: Ducks have many predators. Duckl ... ory birds but also for large fish like + item-635 at level 5: text: Ducks have many predators. Duckl ... ry birds but also for large fish like item-636 at level 5: text: pike - item-637 at level 5: text: , + item-637 at level 5: text: , item-638 at level 5: text: crocodilians - item-639 at level 5: text: , predatory - item-640 at level 5: text: testudines - item-641 at level 5: text: such as the + item-639 at level 5: text: , predatory + item-640 at level 5: text: testudines + item-641 at level 5: text: such as the item-642 at level 5: text: alligator snapping turtle - item-643 at level 5: text: , and other aquatic hunters, including fish-eating birds such as + item-643 at level 5: text: , and other aquatic hunters, including fish-eating birds such as item-644 at level 5: text: herons - item-645 at level 5: text: . Ducks' nests are raided by lan ... naware on the nest by mammals, such as + item-645 at level 5: text: . Ducks' nests are raided by lan ... aware on the nest by mammals, such as item-646 at level 5: text: foxes - item-647 at level 5: text: , or large birds, such as - item-648 at level 5: text: hawks - item-649 at level 5: text: or + item-647 at level 5: text: , or large birds, such as + item-648 at level 5: text: hawks + item-649 at level 5: text: or item-650 at level 5: text: owls item-651 at level 5: text: . item-652 at level 4: inline: group group - item-653 at level 5: text: Adult ducks are fast fliers, but ... ng big fish such as the North American - item-654 at level 5: text: muskie - item-655 at level 5: text: and the European + item-653 at level 5: text: Adult ducks are fast fliers, but ... g big fish such as the North American + item-654 at level 5: text: muskie + item-655 at level 5: text: and the European item-656 at level 5: text: pike - item-657 at level 5: text: . In flight, ducks are safe from ... a few predators such as humans and the + item-657 at level 5: text: . In flight, ducks are safe from ... few predators such as humans and the item-658 at level 5: text: peregrine falcon item-659 at level 5: text: , which uses its speed and strength to catch ducks. item-660 at level 2: section_header: Relationship with humans item-661 at level 3: section_header: Hunting item-662 at level 4: inline: group group - item-663 at level 5: text: Main article: + item-663 at level 5: text: Main article: item-664 at level 5: text: Waterfowl hunting item-665 at level 4: inline: group group - item-666 at level 5: text: Humans have hunted ducks since prehistoric times. Excavations of - item-667 at level 5: text: middens - item-668 at level 5: text: in California dating to 7800 - 6400 - item-669 at level 5: text: BP + item-666 at level 5: text: Humans have hunted ducks since prehistoric times. Excavations of + item-667 at level 5: text: middens + item-668 at level 5: text: in California dating to 7800 - 6400 + item-669 at level 5: text: BP item-670 at level 5: text: have turned up bones of ducks, i ... st one now-extinct flightless species. - item-671 at level 5: text: [ 33 ] - item-672 at level 5: text: Ducks were captured in "significant numbers" by - item-673 at level 5: text: Holocene - item-674 at level 5: text: inhabitants of the lower - item-675 at level 5: text: Ohio River + item-671 at level 5: text: [33] + item-672 at level 5: text: Ducks were captured in "significant numbers" by + item-673 at level 5: text: Holocene + item-674 at level 5: text: inhabitants of the lower + item-675 at level 5: text: Ohio River item-676 at level 5: text: valley, suggesting they took adv ... ounty provided by migrating waterfowl. - item-677 at level 5: text: [ 34 ] + item-677 at level 5: text: [34] item-678 at level 5: text: Neolithic hunters in locations as far apart as the Caribbean, - item-679 at level 5: text: [ 35 ] + item-679 at level 5: text: [35] item-680 at level 5: text: Scandinavia, - item-681 at level 5: text: [ 36 ] + item-681 at level 5: text: [36] item-682 at level 5: text: Egypt, - item-683 at level 5: text: [ 37 ] + item-683 at level 5: text: [37] item-684 at level 5: text: Switzerland, - item-685 at level 5: text: [ 38 ] + item-685 at level 5: text: [38] item-686 at level 5: text: and China relied on ducks as a s ... f protein for some or all of the year. - item-687 at level 5: text: [ 39 ] - item-688 at level 5: text: Archeological evidence shows that - item-689 at level 5: text: Māori people - item-690 at level 5: text: in New Zealand hunted the flightless + item-687 at level 5: text: [39] + item-688 at level 5: text: Archeological evidence shows that + item-689 at level 5: text: Māori people + item-690 at level 5: text: in New Zealand hunted the flightless item-691 at level 5: text: Finsch's duck item-692 at level 5: text: , possibly to extinction, though ... may also have contributed to its fate. - item-693 at level 5: text: [ 40 ] - item-694 at level 5: text: A similar end awaited the + item-693 at level 5: text: [40] + item-694 at level 5: text: A similar end awaited the item-695 at level 5: text: Chatham duck item-696 at level 5: text: , a species with reduced flying ... was colonised by Polynesian settlers. - item-697 at level 5: text: [ 41 ] + item-697 at level 5: text: [41] item-698 at level 5: text: It is probable that duck eggs we ... ugh hard evidence of this is uncommon. - item-699 at level 5: text: [ 35 ] - item-700 at level 5: text: [ 42 ] + item-699 at level 5: text: [35] + item-700 at level 5: text: [42] item-701 at level 4: inline: group group item-702 at level 5: text: In many areas, wild ducks (inclu ... he wild) are hunted for food or sport, - item-703 at level 5: text: [ 43 ] - item-704 at level 5: text: by shooting, or by being trapped using + item-703 at level 5: text: [43] + item-704 at level 5: text: by shooting, or by being trapped using item-705 at level 5: text: duck decoys - item-706 at level 5: text: . Because an idle floating duck ... n "an easy target". These ducks may be - item-707 at level 5: text: contaminated by pollutants - item-708 at level 5: text: such as + item-706 at level 5: text: . Because an idle floating duck ... "an easy target". These ducks may be + item-707 at level 5: text: contaminated by pollutants + item-708 at level 5: text: such as item-709 at level 5: text: PCBs item-710 at level 5: text: . - item-711 at level 5: text: [ 44 ] + item-711 at level 5: text: [44] item-712 at level 3: section_header: Domestication item-713 at level 4: inline: group group - item-714 at level 5: text: Main article: + item-714 at level 5: text: Main article: item-715 at level 5: text: Domestic duck item-716 at level 4: picture - item-716 at level 5: caption: Indian Runner ducks , a common breed of domestic ducks + item-716 at level 5: caption: Indian Runner ducks, a common breed of domestic ducks item-717 at level 4: inline: group group - item-718 at level 5: text: Ducks have many economic uses, b ... eggs, and feathers (particularly their + item-718 at level 5: text: Ducks have many economic uses, b ... ggs, and feathers (particularly their item-719 at level 5: text: down item-720 at level 5: text: ). Approximately 3 billion ducks ... ughtered each year for meat worldwide. - item-721 at level 5: text: [ 45 ] - item-722 at level 5: text: They are also kept and bred by a ... domestic ducks are descended from the - item-723 at level 5: text: mallard + item-721 at level 5: text: [45] + item-722 at level 5: text: They are also kept and bred by a ... domestic ducks are descended from the + item-723 at level 5: text: mallard item-724 at level 5: text: ( item-725 at level 5: text: Anas platyrhynchos - item-726 at level 5: text: ), apart from the - item-727 at level 5: text: Muscovy duck + item-726 at level 5: text: ), apart from the + item-727 at level 5: text: Muscovy duck item-728 at level 5: text: ( item-729 at level 5: text: Cairina moschata item-730 at level 5: text: ). - item-731 at level 5: text: [ 46 ] - item-732 at level 5: text: [ 47 ] - item-733 at level 5: text: The - item-734 at level 5: text: Call duck + item-731 at level 5: text: [46] + item-732 at level 5: text: [47] + item-733 at level 5: text: The + item-734 at level 5: text: Call duck item-735 at level 5: text: is another example of a domestic ... as it weighs less than 1 kg (2.2 lb). - item-736 at level 5: text: [ 48 ] + item-736 at level 5: text: [48] item-737 at level 3: section_header: Heraldry item-738 at level 4: picture - item-738 at level 5: caption: Three black-colored ducks in the coat of arms of Maaninka [ 49 ] + item-738 at level 5: caption: Three black-colored ducks in the coat of arms of Maaninka[49] item-739 at level 4: inline: group group - item-740 at level 5: text: Ducks appear on several + item-740 at level 5: text: Ducks appear on several item-741 at level 5: text: coats of arms - item-742 at level 5: text: , including the coat of arms of - item-743 at level 5: text: Lubāna + item-742 at level 5: text: , including the coat of arms of + item-743 at level 5: text: Lubāna item-744 at level 5: text: ( item-745 at level 5: text: Latvia item-746 at level 5: text: ) - item-747 at level 5: text: [ 50 ] - item-748 at level 5: text: and the coat of arms of - item-749 at level 5: text: Föglö + item-747 at level 5: text: [50] + item-748 at level 5: text: and the coat of arms of + item-749 at level 5: text: Föglö item-750 at level 5: text: ( item-751 at level 5: text: Åland item-752 at level 5: text: ). - item-753 at level 5: text: [ 51 ] + item-753 at level 5: text: [51] item-754 at level 3: section_header: Cultural references item-755 at level 4: inline: group group - item-756 at level 5: text: In 2002, psychologist - item-757 at level 5: text: Richard Wiseman - item-758 at level 5: text: and colleagues at the + item-756 at level 5: text: In 2002, psychologist + item-757 at level 5: text: Richard Wiseman + item-758 at level 5: text: and colleagues at the item-759 at level 5: text: University of Hertfordshire - item-760 at level 5: text: , + item-760 at level 5: text: , item-761 at level 5: text: UK - item-762 at level 5: text: , finished a year-long - item-763 at level 5: text: LaughLab + item-762 at level 5: text: , finished a year-long + item-763 at level 5: text: LaughLab item-764 at level 5: text: experiment, concluding that of a ... involving an animal, make it a duck." - item-765 at level 5: text: [ 52 ] - item-766 at level 5: text: The word "duck" may have become an - item-767 at level 5: text: inherently funny word - item-768 at level 5: text: in many languages, possibly beca ... n their looks or behavior. Of the many + item-765 at level 5: text: [52] + item-766 at level 5: text: The word "duck" may have become an + item-767 at level 5: text: inherently funny word + item-768 at level 5: text: in many languages, possibly beca ... their looks or behavior. Of the many item-769 at level 5: text: ducks in fiction - item-770 at level 5: text: , many are cartoon characters, such as + item-770 at level 5: text: , many are cartoon characters, such as item-771 at level 5: text: Walt Disney - item-772 at level 5: text: 's + item-772 at level 5: text: 's item-773 at level 5: text: Donald Duck - item-774 at level 5: text: , and + item-774 at level 5: text: , and item-775 at level 5: text: Warner Bros. - item-776 at level 5: text: ' + item-776 at level 5: text: ' item-777 at level 5: text: Daffy Duck - item-778 at level 5: text: . - item-779 at level 5: text: Howard the Duck + item-778 at level 5: text: . + item-779 at level 5: text: Howard the Duck item-780 at level 5: text: started as a comic book character in 1973 - item-781 at level 5: text: [ 53 ] - item-782 at level 5: text: [ 54 ] - item-783 at level 5: text: and was made into a - item-784 at level 5: text: movie + item-781 at level 5: text: [53] + item-782 at level 5: text: [54] + item-783 at level 5: text: and was made into a + item-784 at level 5: text: movie item-785 at level 5: text: in 1986. item-786 at level 4: inline: group group - item-787 at level 5: text: The 1992 Disney film + item-787 at level 5: text: The 1992 Disney film item-788 at level 5: text: The Mighty Ducks - item-789 at level 5: text: , starring + item-789 at level 5: text: , starring item-790 at level 5: text: Emilio Estevez - item-791 at level 5: text: , chose the duck as the mascot f ... e nickname and mascot for the eventual - item-792 at level 5: text: National Hockey League - item-793 at level 5: text: professional team of the + item-791 at level 5: text: , chose the duck as the mascot f ... nickname and mascot for the eventual + item-792 at level 5: text: National Hockey League + item-793 at level 5: text: professional team of the item-794 at level 5: text: Anaheim Ducks item-795 at level 5: text: , who were founded with the name the Mighty Ducks of Anaheim. item-796 at level 5: text: [ item-797 at level 5: text: citation needed - item-798 at level 5: text: ] - item-799 at level 5: text: The duck is also the nickname of the - item-800 at level 5: text: University of Oregon - item-801 at level 5: text: sports teams as well as the - item-802 at level 5: text: Long Island Ducks - item-803 at level 5: text: minor league - item-804 at level 5: text: baseball + item-798 at level 5: text: ] + item-799 at level 5: text: The duck is also the nickname of the + item-800 at level 5: text: University of Oregon + item-801 at level 5: text: sports teams as well as the + item-802 at level 5: text: Long Island Ducks + item-803 at level 5: text: minor league + item-804 at level 5: text: baseball item-805 at level 5: text: team. - item-806 at level 5: text: [ 55 ] + item-806 at level 5: text: [55] item-807 at level 2: section_header: See also item-808 at level 3: list: group list item-809 at level 4: list_item: Birds portal @@ -835,213 +835,213 @@ item-0 at level 0: unspecified: group _root_ item-820 at level 4: list: group ordered list item-821 at level 5: list_item: item-822 at level 6: inline: group group - item-823 at level 7: text: ^ + item-823 at level 7: text: ^ item-824 at level 7: text: "Duckling" - item-825 at level 7: text: . + item-825 at level 7: text: . item-826 at level 7: text: The American Heritage Dictionary of the English Language, Fourth Edition - item-827 at level 7: text: . Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 . + item-827 at level 7: text: . Houghton Mifflin Company. 2006. Retrieved 2015-05-22. item-828 at level 5: list_item: item-829 at level 6: inline: group group - item-830 at level 7: text: ^ + item-830 at level 7: text: ^ item-831 at level 7: text: "Duckling" - item-832 at level 7: text: . + item-832 at level 7: text: . item-833 at level 7: text: Kernerman English Multilingual Dictionary (Beta Version) - item-834 at level 7: text: . K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 . + item-834 at level 7: text: . K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22. item-835 at level 5: list_item: item-836 at level 6: inline: group group - item-837 at level 7: text: ^ - item-838 at level 7: text: Dohner, Janet Vorwald (2001). + item-837 at level 7: text: ^ + item-838 at level 7: text: Dohner, Janet Vorwald (2001). item-839 at level 7: text: The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds - item-840 at level 7: text: . Yale University Press. - item-841 at level 7: text: ISBN + item-840 at level 7: text: . Yale University Press. + item-841 at level 7: text: ISBN item-842 at level 7: text: 978-0300138139 item-843 at level 7: text: . item-844 at level 5: list_item: item-845 at level 6: inline: group group - item-846 at level 7: text: ^ - item-847 at level 7: text: Visca, Curt; Visca, Kelley (2003). + item-846 at level 7: text: ^ + item-847 at level 7: text: Visca, Curt; Visca, Kelley (2003). item-848 at level 7: text: How to Draw Cartoon Birds - item-849 at level 7: text: . The Rosen Publishing Group. - item-850 at level 7: text: ISBN + item-849 at level 7: text: . The Rosen Publishing Group. + item-850 at level 7: text: ISBN item-851 at level 7: text: 9780823961566 item-852 at level 7: text: . item-853 at level 5: list_item: item-854 at level 6: inline: group group - item-855 at level 7: text: ^ - item-856 at level 7: text: a - item-857 at level 7: text: b - item-858 at level 7: text: c - item-859 at level 7: text: d + item-855 at level 7: text: ^ + item-856 at level 7: text: a + item-857 at level 7: text: b + item-858 at level 7: text: c + item-859 at level 7: text: d item-860 at level 7: text: Carboneras 1992 item-861 at level 7: text: , p. 536. item-862 at level 5: list_item: item-863 at level 6: inline: group group - item-864 at level 7: text: ^ + item-864 at level 7: text: ^ item-865 at level 7: text: Livezey 1986 item-866 at level 7: text: , pp. 737-738. item-867 at level 5: list_item: item-868 at level 6: inline: group group - item-869 at level 7: text: ^ + item-869 at level 7: text: ^ item-870 at level 7: text: Madsen, McHugh & de Kloet 1988 item-871 at level 7: text: , p. 452. item-872 at level 5: list_item: item-873 at level 6: inline: group group - item-874 at level 7: text: ^ + item-874 at level 7: text: ^ item-875 at level 7: text: Donne-Goussé, Laudet & Hänni 2002 item-876 at level 7: text: , pp. 353-354. item-877 at level 5: list_item: item-878 at level 6: inline: group group - item-879 at level 7: text: ^ - item-880 at level 7: text: a - item-881 at level 7: text: b - item-882 at level 7: text: c - item-883 at level 7: text: d - item-884 at level 7: text: e - item-885 at level 7: text: f + item-879 at level 7: text: ^ + item-880 at level 7: text: a + item-881 at level 7: text: b + item-882 at level 7: text: c + item-883 at level 7: text: d + item-884 at level 7: text: e + item-885 at level 7: text: f item-886 at level 7: text: Carboneras 1992 item-887 at level 7: text: , p. 540. item-888 at level 5: list_item: item-889 at level 6: inline: group group - item-890 at level 7: text: ^ + item-890 at level 7: text: ^ item-891 at level 7: text: Elphick, Dunning & Sibley 2001 item-892 at level 7: text: , p. 191. item-893 at level 5: list_item: item-894 at level 6: inline: group group - item-895 at level 7: text: ^ + item-895 at level 7: text: ^ item-896 at level 7: text: Kear 2005 item-897 at level 7: text: , p. 448. item-898 at level 5: list_item: item-899 at level 6: inline: group group - item-900 at level 7: text: ^ + item-900 at level 7: text: ^ item-901 at level 7: text: Kear 2005 item-902 at level 7: text: , p. 622-623. item-903 at level 5: list_item: item-904 at level 6: inline: group group - item-905 at level 7: text: ^ + item-905 at level 7: text: ^ item-906 at level 7: text: Kear 2005 item-907 at level 7: text: , p. 686. item-908 at level 5: list_item: item-909 at level 6: inline: group group - item-910 at level 7: text: ^ + item-910 at level 7: text: ^ item-911 at level 7: text: Elphick, Dunning & Sibley 2001 item-912 at level 7: text: , p. 193. item-913 at level 5: list_item: item-914 at level 6: inline: group group - item-915 at level 7: text: ^ - item-916 at level 7: text: a - item-917 at level 7: text: b - item-918 at level 7: text: c - item-919 at level 7: text: d - item-920 at level 7: text: e - item-921 at level 7: text: f - item-922 at level 7: text: g + item-915 at level 7: text: ^ + item-916 at level 7: text: a + item-917 at level 7: text: b + item-918 at level 7: text: c + item-919 at level 7: text: d + item-920 at level 7: text: e + item-921 at level 7: text: f + item-922 at level 7: text: g item-923 at level 7: text: Carboneras 1992 item-924 at level 7: text: , p. 537. item-925 at level 5: list_item: item-926 at level 6: inline: group group - item-927 at level 7: text: ^ + item-927 at level 7: text: ^ item-928 at level 7: text: American Ornithologists' Union 1998 item-929 at level 7: text: , p. xix. item-930 at level 5: list_item: item-931 at level 6: inline: group group - item-932 at level 7: text: ^ + item-932 at level 7: text: ^ item-933 at level 7: text: American Ornithologists' Union 1998 item-934 at level 7: text: . item-935 at level 5: list_item: item-936 at level 6: inline: group group - item-937 at level 7: text: ^ + item-937 at level 7: text: ^ item-938 at level 7: text: Carboneras 1992 item-939 at level 7: text: , p. 538. item-940 at level 5: list_item: item-941 at level 6: inline: group group - item-942 at level 7: text: ^ + item-942 at level 7: text: ^ item-943 at level 7: text: Christidis & Boles 2008 item-944 at level 7: text: , p. 62. item-945 at level 5: list_item: item-946 at level 6: inline: group group - item-947 at level 7: text: ^ + item-947 at level 7: text: ^ item-948 at level 7: text: Shirihai 2008 item-949 at level 7: text: , pp. 239, 245. item-950 at level 5: list_item: item-951 at level 6: inline: group group - item-952 at level 7: text: ^ - item-953 at level 7: text: a - item-954 at level 7: text: b + item-952 at level 7: text: ^ + item-953 at level 7: text: a + item-954 at level 7: text: b item-955 at level 7: text: Pratt, Bruner & Berrett 1987 item-956 at level 7: text: , pp. 98-107. item-957 at level 5: list_item: item-958 at level 6: inline: group group - item-959 at level 7: text: ^ + item-959 at level 7: text: ^ item-960 at level 7: text: Fitter, Fitter & Hosking 2000 item-961 at level 7: text: , pp. 52-3. item-962 at level 5: list_item: item-963 at level 6: inline: group group - item-964 at level 7: text: ^ + item-964 at level 7: text: ^ item-965 at level 7: text: "Pacific Black Duck" - item-966 at level 7: text: . + item-966 at level 7: text: . item-967 at level 7: text: www.wiresnr.org - item-968 at level 7: text: . Retrieved 2018-04-27 . + item-968 at level 7: text: . Retrieved 2018-04-27. item-969 at level 5: list_item: item-970 at level 6: inline: group group - item-971 at level 7: text: ^ - item-972 at level 7: text: Ogden, Evans. + item-971 at level 7: text: ^ + item-972 at level 7: text: Ogden, Evans. item-973 at level 7: text: "Dabbling Ducks" - item-974 at level 7: text: . CWE . Retrieved 2006-11-02 . + item-974 at level 7: text: . CWE. Retrieved 2006-11-02. item-975 at level 5: list_item: item-976 at level 6: inline: group group - item-977 at level 7: text: ^ - item-978 at level 7: text: Karl Mathiesen (16 March 2015). + item-977 at level 7: text: ^ + item-978 at level 7: text: Karl Mathiesen (16 March 2015). item-979 at level 7: text: "Don't feed the ducks bread, say conservationists" - item-980 at level 7: text: . + item-980 at level 7: text: . item-981 at level 7: text: The Guardian - item-982 at level 7: text: . Retrieved 13 November 2016 . + item-982 at level 7: text: . Retrieved 13 November 2016. item-983 at level 5: list_item: item-984 at level 6: inline: group group - item-985 at level 7: text: ^ - item-986 at level 7: text: Rohwer, Frank C.; Anderson, Mich ... air Formation in Migratory Waterfowl". + item-985 at level 7: text: ^ + item-986 at level 7: text: Rohwer, Frank C.; Anderson, Mich ... ir Formation in Migratory Waterfowl". item-987 at level 7: text: Current Ornithology - item-988 at level 7: text: . pp. 187-221. + item-988 at level 7: text: . pp. 187-221. item-989 at level 7: text: doi item-990 at level 7: text: : item-991 at level 7: text: 10.1007/978-1-4615-6787-5_4 - item-992 at level 7: text: . - item-993 at level 7: text: ISBN + item-992 at level 7: text: . + item-993 at level 7: text: ISBN item-994 at level 7: text: 978-1-4615-6789-9 item-995 at level 7: text: . item-996 at level 5: list_item: item-997 at level 6: inline: group group - item-998 at level 7: text: ^ - item-999 at level 7: text: Smith, Cyndi M.; Cooke, Fred; Ro ... Goudie, R. Ian; Boyd, W. Sean (2000). + item-998 at level 7: text: ^ + item-999 at level 7: text: Smith, Cyndi M.; Cooke, Fred; Ro ... Goudie, R. Ian; Boyd, W. Sean (2000). item-1000 at level 7: text: "Long-Term Pair Bonds in Harlequin Ducks" - item-1001 at level 7: text: . + item-1001 at level 7: text: . item-1002 at level 7: text: The Condor - item-1003 at level 7: text: . - item-1004 at level 7: text: 102 - item-1005 at level 7: text: (1): 201-205. + item-1003 at level 7: text: . + item-1004 at level 7: text: 102 + item-1005 at level 7: text: (1): 201-205. item-1006 at level 7: text: doi item-1007 at level 7: text: : item-1008 at level 7: text: 10.1093/condor/102.1.201 - item-1009 at level 7: text: . + item-1009 at level 7: text: . item-1010 at level 7: text: hdl item-1011 at level 7: text: : item-1012 at level 7: text: 10315/13797 item-1013 at level 7: text: . item-1014 at level 5: list_item: item-1015 at level 6: inline: group group - item-1016 at level 7: text: ^ + item-1016 at level 7: text: ^ item-1017 at level 7: text: "If You Find An Orphaned Duckling - Wildlife Rehabber" - item-1018 at level 7: text: . + item-1018 at level 7: text: . item-1019 at level 7: text: wildliferehabber.com - item-1020 at level 7: text: . Archived from - item-1021 at level 7: text: the original - item-1022 at level 7: text: on 2018-09-23 . Retrieved 2018-12-22 . + item-1020 at level 7: text: . Archived from + item-1021 at level 7: text: the original + item-1022 at level 7: text: on 2018-09-23. Retrieved 2018-12-22. item-1023 at level 5: list_item: item-1024 at level 6: inline: group group - item-1025 at level 7: text: ^ - item-1026 at level 7: text: Carver, Heather (2011). + item-1025 at level 7: text: ^ + item-1026 at level 7: text: Carver, Heather (2011). item-1027 at level 7: text: The Duck Bible - item-1028 at level 7: text: . Lulu.com. - item-1029 at level 7: text: ISBN + item-1028 at level 7: text: . Lulu.com. + item-1029 at level 7: text: ISBN item-1030 at level 7: text: 9780557901562 item-1031 at level 7: text: . item-1032 at level 7: text: [ @@ -1049,423 +1049,423 @@ item-0 at level 0: unspecified: group _root_ item-1034 at level 7: text: ] item-1035 at level 5: list_item: item-1036 at level 6: inline: group group - item-1037 at level 7: text: ^ - item-1038 at level 7: text: Titlow, Budd (2013-09-03). + item-1037 at level 7: text: ^ + item-1038 at level 7: text: Titlow, Budd (2013-09-03). item-1039 at level 7: text: Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends - item-1040 at level 7: text: . Rowman & Littlefield. - item-1041 at level 7: text: ISBN + item-1040 at level 7: text: . Rowman & Littlefield. + item-1041 at level 7: text: ISBN item-1042 at level 7: text: 9780762797707 item-1043 at level 7: text: . item-1044 at level 5: list_item: item-1045 at level 6: inline: group group - item-1046 at level 7: text: ^ - item-1047 at level 7: text: Amos, Jonathan (2003-09-08). + item-1046 at level 7: text: ^ + item-1047 at level 7: text: Amos, Jonathan (2003-09-08). item-1048 at level 7: text: "Sound science is quackers" - item-1049 at level 7: text: . + item-1049 at level 7: text: . item-1050 at level 7: text: BBC News - item-1051 at level 7: text: . Retrieved 2006-11-02 . + item-1051 at level 7: text: . Retrieved 2006-11-02. item-1052 at level 5: list_item: item-1053 at level 6: inline: group group - item-1054 at level 7: text: ^ + item-1054 at level 7: text: ^ item-1055 at level 7: text: "Mythbusters Episode 8" item-1056 at level 7: text: . 12 December 2003. item-1057 at level 5: list_item: item-1058 at level 6: inline: group group - item-1059 at level 7: text: ^ + item-1059 at level 7: text: ^ item-1060 at level 7: text: Erlandson 1994 item-1061 at level 7: text: , p. 171. item-1062 at level 5: list_item: item-1063 at level 6: inline: group group - item-1064 at level 7: text: ^ + item-1064 at level 7: text: ^ item-1065 at level 7: text: Jeffries 2008 item-1066 at level 7: text: , pp. 168, 243. item-1067 at level 5: list_item: item-1068 at level 6: inline: group group - item-1069 at level 7: text: ^ - item-1070 at level 7: text: a - item-1071 at level 7: text: b + item-1069 at level 7: text: ^ + item-1070 at level 7: text: a + item-1071 at level 7: text: b item-1072 at level 7: text: Sued-Badillo 2003 item-1073 at level 7: text: , p. 65. item-1074 at level 5: list_item: item-1075 at level 6: inline: group group - item-1076 at level 7: text: ^ + item-1076 at level 7: text: ^ item-1077 at level 7: text: Thorpe 1996 item-1078 at level 7: text: , p. 68. item-1079 at level 5: list_item: item-1080 at level 6: inline: group group - item-1081 at level 7: text: ^ + item-1081 at level 7: text: ^ item-1082 at level 7: text: Maisels 1999 item-1083 at level 7: text: , p. 42. item-1084 at level 5: list_item: item-1085 at level 6: inline: group group - item-1086 at level 7: text: ^ + item-1086 at level 7: text: ^ item-1087 at level 7: text: Rau 1876 item-1088 at level 7: text: , p. 133. item-1089 at level 5: list_item: item-1090 at level 6: inline: group group - item-1091 at level 7: text: ^ + item-1091 at level 7: text: ^ item-1092 at level 7: text: Higman 2012 item-1093 at level 7: text: , p. 23. item-1094 at level 5: list_item: item-1095 at level 6: inline: group group - item-1096 at level 7: text: ^ + item-1096 at level 7: text: ^ item-1097 at level 7: text: Hume 2012 item-1098 at level 7: text: , p. 53. item-1099 at level 5: list_item: item-1100 at level 6: inline: group group - item-1101 at level 7: text: ^ + item-1101 at level 7: text: ^ item-1102 at level 7: text: Hume 2012 item-1103 at level 7: text: , p. 52. item-1104 at level 5: list_item: item-1105 at level 6: inline: group group - item-1106 at level 7: text: ^ + item-1106 at level 7: text: ^ item-1107 at level 7: text: Fieldhouse 2002 item-1108 at level 7: text: , p. 167. item-1109 at level 5: list_item: item-1110 at level 6: inline: group group - item-1111 at level 7: text: ^ - item-1112 at level 7: text: Livingston, A. D. (1998-01-01). + item-1111 at level 7: text: ^ + item-1112 at level 7: text: Livingston, A. D. (1998-01-01). item-1113 at level 7: text: Guide to Edible Plants and Animals - item-1114 at level 7: text: . Wordsworth Editions, Limited. - item-1115 at level 7: text: ISBN + item-1114 at level 7: text: . Wordsworth Editions, Limited. + item-1115 at level 7: text: ISBN item-1116 at level 7: text: 9781853263774 item-1117 at level 7: text: . item-1118 at level 5: list_item: item-1119 at level 6: inline: group group - item-1120 at level 7: text: ^ - item-1121 at level 7: text: "Study plan for waterfowl injury ... ns in Hudson river resident waterfowl" - item-1122 at level 7: text: (PDF) . + item-1120 at level 7: text: ^ + item-1121 at level 7: text: "Study plan for waterfowl injury ... s in Hudson river resident waterfowl" + item-1122 at level 7: text: (PDF). item-1123 at level 7: text: New York State Department of Environmental Conservation - item-1124 at level 7: text: . US Department of Commerce. December 2008. p. 3. - item-1125 at level 7: text: Archived - item-1126 at level 7: text: (PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 . + item-1124 at level 7: text: . US Department of Commerce. December 2008. p. 3. + item-1125 at level 7: text: Archived + item-1126 at level 7: text: (PDF) from the original on 2022-10-09. Retrieved 2 July 2019. item-1127 at level 5: list_item: item-1128 at level 6: inline: group group - item-1129 at level 7: text: ^ + item-1129 at level 7: text: ^ item-1130 at level 7: text: "FAOSTAT" - item-1131 at level 7: text: . + item-1131 at level 7: text: . item-1132 at level 7: text: www.fao.org - item-1133 at level 7: text: . Retrieved 2019-10-25 . + item-1133 at level 7: text: . Retrieved 2019-10-25. item-1134 at level 5: list_item: item-1135 at level 6: inline: group group - item-1136 at level 7: text: ^ + item-1136 at level 7: text: ^ item-1137 at level 7: text: "Anas platyrhynchos, Domestic Du ... f - The University of Texas at Austin" - item-1138 at level 7: text: . Digimorph.org . Retrieved 2012-12-23 . + item-1138 at level 7: text: . Digimorph.org. Retrieved 2012-12-23. item-1139 at level 5: list_item: item-1140 at level 6: inline: group group - item-1141 at level 7: text: ^ - item-1142 at level 7: text: Sy Montgomery. + item-1141 at level 7: text: ^ + item-1142 at level 7: text: Sy Montgomery. item-1143 at level 7: text: "Mallard; Encyclopædia Britannica" - item-1144 at level 7: text: . + item-1144 at level 7: text: . item-1145 at level 7: text: Britannica.com - item-1146 at level 7: text: . Retrieved 2012-12-23 . + item-1146 at level 7: text: . Retrieved 2012-12-23. item-1147 at level 5: list_item: item-1148 at level 6: inline: group group - item-1149 at level 7: text: ^ - item-1150 at level 7: text: Glenday, Craig (2014). + item-1149 at level 7: text: ^ + item-1150 at level 7: text: Glenday, Craig (2014). item-1151 at level 7: text: Guinness World Records - item-1152 at level 7: text: . Guinness World Records Limited. pp. + item-1152 at level 7: text: . Guinness World Records Limited. pp. item-1153 at level 7: text: 135 - item-1154 at level 7: text: . - item-1155 at level 7: text: ISBN + item-1154 at level 7: text: . + item-1155 at level 7: text: ISBN item-1156 at level 7: text: 978-1-908843-15-9 item-1157 at level 7: text: . item-1158 at level 5: list_item: item-1159 at level 6: inline: group group - item-1160 at level 7: text: ^ - item-1161 at level 7: text: Suomen kunnallisvaakunat - item-1162 at level 7: text: (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. - item-1163 at level 7: text: ISBN + item-1160 at level 7: text: ^ + item-1161 at level 7: text: Suomen kunnallisvaakunat + item-1162 at level 7: text: (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. + item-1163 at level 7: text: ISBN item-1164 at level 7: text: 951-773-085-3 item-1165 at level 7: text: . item-1166 at level 5: list_item: item-1167 at level 6: inline: group group - item-1168 at level 7: text: ^ - item-1169 at level 7: text: "Lubānas simbolika" - item-1170 at level 7: text: (in Latvian) . Retrieved September 9, 2021 . + item-1168 at level 7: text: ^ + item-1169 at level 7: text: "Lubānas simbolika" + item-1170 at level 7: text: (in Latvian). Retrieved September 9, 2021. item-1171 at level 5: list_item: item-1172 at level 6: inline: group group - item-1173 at level 7: text: ^ - item-1174 at level 7: text: "Föglö" - item-1175 at level 7: text: (in Swedish) . Retrieved September 9, 2021 . + item-1173 at level 7: text: ^ + item-1174 at level 7: text: "Föglö" + item-1175 at level 7: text: (in Swedish). Retrieved September 9, 2021. item-1176 at level 5: list_item: item-1177 at level 6: inline: group group - item-1178 at level 7: text: ^ - item-1179 at level 7: text: Young, Emma. + item-1178 at level 7: text: ^ + item-1179 at level 7: text: Young, Emma. item-1180 at level 7: text: "World's funniest joke revealed" - item-1181 at level 7: text: . + item-1181 at level 7: text: . item-1182 at level 7: text: New Scientist - item-1183 at level 7: text: . Retrieved 7 January 2019 . + item-1183 at level 7: text: . Retrieved 7 January 2019. item-1184 at level 5: list_item: item-1185 at level 6: inline: group group - item-1186 at level 7: text: ^ + item-1186 at level 7: text: ^ item-1187 at level 7: text: "Howard the Duck (character)" - item-1188 at level 7: text: . + item-1188 at level 7: text: . item-1189 at level 7: text: Grand Comics Database item-1190 at level 7: text: . item-1191 at level 5: list_item: item-1192 at level 6: inline: group group - item-1193 at level 7: text: ^ + item-1193 at level 7: text: ^ item-1194 at level 7: text: Sanderson, Peter - item-1195 at level 7: text: ; Gilbert, Laura (2008). "1970s". + item-1195 at level 7: text: ; Gilbert, Laura (2008). "1970s". item-1196 at level 7: text: Marvel Chronicle A Year by Year History - item-1197 at level 7: text: . London, United Kingdom: + item-1197 at level 7: text: . London, United Kingdom: item-1198 at level 7: text: Dorling Kindersley - item-1199 at level 7: text: . p. 161. - item-1200 at level 7: text: ISBN + item-1199 at level 7: text: . p. 161. + item-1200 at level 7: text: ISBN item-1201 at level 7: text: 978-0756641238 item-1202 at level 7: text: . December saw the debut of the ... luding this bad-tempered talking duck. item-1203 at level 5: list_item: item-1204 at level 6: inline: group group - item-1205 at level 7: text: ^ + item-1205 at level 7: text: ^ item-1206 at level 7: text: "The Duck" - item-1207 at level 7: text: . + item-1207 at level 7: text: . item-1208 at level 7: text: University of Oregon Athletics - item-1209 at level 7: text: . Retrieved 2022-01-20 . + item-1209 at level 7: text: . Retrieved 2022-01-20. item-1210 at level 3: section_header: Sources item-1211 at level 4: list: group list item-1212 at level 5: list_item: item-1213 at level 6: inline: group group - item-1214 at level 7: text: American Ornithologists' Union (1998). - item-1215 at level 7: text: Checklist of North American Birds - item-1216 at level 7: text: (PDF) . Washington, DC: American Ornithologists' Union. - item-1217 at level 7: text: ISBN + item-1214 at level 7: text: American Ornithologists' Union (1998). + item-1215 at level 7: text: Checklist of North American Birds + item-1216 at level 7: text: (PDF). Washington, DC: American Ornithologists' Union. + item-1217 at level 7: text: ISBN item-1218 at level 7: text: 978-1-891276-00-2 - item-1219 at level 7: text: . - item-1220 at level 7: text: Archived + item-1219 at level 7: text: . + item-1220 at level 7: text: Archived item-1221 at level 7: text: (PDF) from the original on 2022-10-09. item-1222 at level 5: list_item: item-1223 at level 6: inline: group group - item-1224 at level 7: text: Carboneras, Carlos (1992). del H ... liott, Andrew; Sargatal, Jordi (eds.). + item-1224 at level 7: text: Carboneras, Carlos (1992). del H ... iott, Andrew; Sargatal, Jordi (eds.). item-1225 at level 7: text: Handbook of the Birds of the World - item-1226 at level 7: text: . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. - item-1227 at level 7: text: ISBN + item-1226 at level 7: text: . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. + item-1227 at level 7: text: ISBN item-1228 at level 7: text: 978-84-87334-10-8 item-1229 at level 7: text: . item-1230 at level 5: list_item: item-1231 at level 6: inline: group group - item-1232 at level 7: text: Christidis, Les; Boles, Walter E., eds. (2008). + item-1232 at level 7: text: Christidis, Les; Boles, Walter E., eds. (2008). item-1233 at level 7: text: Systematics and Taxonomy of Australian Birds - item-1234 at level 7: text: . Collingwood, VIC: Csiro Publishing. - item-1235 at level 7: text: ISBN + item-1234 at level 7: text: . Collingwood, VIC: Csiro Publishing. + item-1235 at level 7: text: ISBN item-1236 at level 7: text: 978-0-643-06511-6 item-1237 at level 7: text: . item-1238 at level 5: list_item: item-1239 at level 6: inline: group group - item-1240 at level 7: text: Donne-Goussé, Carole; Laudet, Vi ... based on mitochondrial DNA analysis". + item-1240 at level 7: text: Donne-Goussé, Carole; Laudet, Vi ... based on mitochondrial DNA analysis". item-1241 at level 7: text: Molecular Phylogenetics and Evolution - item-1242 at level 7: text: . - item-1243 at level 7: text: 23 - item-1244 at level 7: text: (3): 339-356. + item-1242 at level 7: text: . + item-1243 at level 7: text: 23 + item-1244 at level 7: text: (3): 339-356. item-1245 at level 7: text: Bibcode item-1246 at level 7: text: : item-1247 at level 7: text: 2002MolPE..23..339D - item-1248 at level 7: text: . + item-1248 at level 7: text: . item-1249 at level 7: text: doi item-1250 at level 7: text: : item-1251 at level 7: text: 10.1016/S1055-7903(02)00019-2 - item-1252 at level 7: text: . - item-1253 at level 7: text: PMID + item-1252 at level 7: text: . + item-1253 at level 7: text: PMID item-1254 at level 7: text: 12099792 item-1255 at level 7: text: . item-1256 at level 5: list_item: item-1257 at level 6: inline: group group - item-1258 at level 7: text: Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). + item-1258 at level 7: text: Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). item-1259 at level 7: text: The Sibley Guide to Bird Life and Behaviour - item-1260 at level 7: text: . London: Christopher Helm. - item-1261 at level 7: text: ISBN + item-1260 at level 7: text: . London: Christopher Helm. + item-1261 at level 7: text: ISBN item-1262 at level 7: text: 978-0-7136-6250-4 item-1263 at level 7: text: . item-1264 at level 5: list_item: item-1265 at level 6: inline: group group - item-1266 at level 7: text: Erlandson, Jon M. (1994). + item-1266 at level 7: text: Erlandson, Jon M. (1994). item-1267 at level 7: text: Early Hunter-Gatherers of the California Coast - item-1268 at level 7: text: . New York, NY: Springer Science & Business Media. - item-1269 at level 7: text: ISBN + item-1268 at level 7: text: . New York, NY: Springer Science & Business Media. + item-1269 at level 7: text: ISBN item-1270 at level 7: text: 978-1-4419-3231-0 item-1271 at level 7: text: . item-1272 at level 5: list_item: item-1273 at level 6: inline: group group - item-1274 at level 7: text: Fieldhouse, Paul (2002). + item-1274 at level 7: text: Fieldhouse, Paul (2002). item-1275 at level 7: text: Food, Feasts, and Faith: An Ency ... dia of Food Culture in World Religions - item-1276 at level 7: text: . Vol. I: A-K. Santa Barbara: ABC-CLIO. - item-1277 at level 7: text: ISBN + item-1276 at level 7: text: . Vol. I: A-K. Santa Barbara: ABC-CLIO. + item-1277 at level 7: text: ISBN item-1278 at level 7: text: 978-1-61069-412-4 item-1279 at level 7: text: . item-1280 at level 5: list_item: item-1281 at level 6: inline: group group - item-1282 at level 7: text: Fitter, Julian; Fitter, Daniel; Hosking, David (2000). + item-1282 at level 7: text: Fitter, Julian; Fitter, Daniel; Hosking, David (2000). item-1283 at level 7: text: Wildlife of the Galápagos - item-1284 at level 7: text: . Princeton, NJ: Princeton University Press. - item-1285 at level 7: text: ISBN + item-1284 at level 7: text: . Princeton, NJ: Princeton University Press. + item-1285 at level 7: text: ISBN item-1286 at level 7: text: 978-0-691-10295-5 item-1287 at level 7: text: . item-1288 at level 5: list_item: item-1289 at level 6: inline: group group - item-1290 at level 7: text: Higman, B. W. (2012). + item-1290 at level 7: text: Higman, B. W. (2012). item-1291 at level 7: text: How Food Made History - item-1292 at level 7: text: . Chichester, UK: John Wiley & Sons. - item-1293 at level 7: text: ISBN + item-1292 at level 7: text: . Chichester, UK: John Wiley & Sons. + item-1293 at level 7: text: ISBN item-1294 at level 7: text: 978-1-4051-8947-7 item-1295 at level 7: text: . item-1296 at level 5: list_item: item-1297 at level 6: inline: group group - item-1298 at level 7: text: Hume, Julian H. (2012). + item-1298 at level 7: text: Hume, Julian H. (2012). item-1299 at level 7: text: Extinct Birds - item-1300 at level 7: text: . London: Christopher Helm. - item-1301 at level 7: text: ISBN + item-1300 at level 7: text: . London: Christopher Helm. + item-1301 at level 7: text: ISBN item-1302 at level 7: text: 978-1-4729-3744-5 item-1303 at level 7: text: . item-1304 at level 5: list_item: item-1305 at level 6: inline: group group - item-1306 at level 7: text: Jeffries, Richard (2008). + item-1306 at level 7: text: Jeffries, Richard (2008). item-1307 at level 7: text: Holocene Hunter-Gatherers of the Lower Ohio River Valley - item-1308 at level 7: text: . Tuscaloosa: University of Alabama Press. - item-1309 at level 7: text: ISBN + item-1308 at level 7: text: . Tuscaloosa: University of Alabama Press. + item-1309 at level 7: text: ISBN item-1310 at level 7: text: 978-0-8173-1658-7 item-1311 at level 7: text: . item-1312 at level 5: list_item: item-1313 at level 6: inline: group group - item-1314 at level 7: text: Kear, Janet, ed. (2005). + item-1314 at level 7: text: Kear, Janet, ed. (2005). item-1315 at level 7: text: Ducks, Geese and Swans: Species Accounts ( - item-1316 at level 7: text: Cairina - item-1317 at level 7: text: to + item-1316 at level 7: text: Cairina + item-1317 at level 7: text: to item-1318 at level 7: text: Mergus item-1319 at level 7: text: ) - item-1320 at level 7: text: . Bird Families of the World. Oxford: Oxford University Press. - item-1321 at level 7: text: ISBN + item-1320 at level 7: text: . Bird Families of the World. Oxford: Oxford University Press. + item-1321 at level 7: text: ISBN item-1322 at level 7: text: 978-0-19-861009-0 item-1323 at level 7: text: . item-1324 at level 5: list_item: item-1325 at level 6: inline: group group - item-1326 at level 7: text: Livezey, Bradley C. (October 1986). - item-1327 at level 7: text: "A phylogenetic analysis of rece ... genera using morphological characters" - item-1328 at level 7: text: (PDF) . + item-1326 at level 7: text: Livezey, Bradley C. (October 1986). + item-1327 at level 7: text: "A phylogenetic analysis of rece ... enera using morphological characters" + item-1328 at level 7: text: (PDF). item-1329 at level 7: text: The Auk - item-1330 at level 7: text: . - item-1331 at level 7: text: 103 - item-1332 at level 7: text: (4): 737-754. + item-1330 at level 7: text: . + item-1331 at level 7: text: 103 + item-1332 at level 7: text: (4): 737-754. item-1333 at level 7: text: doi item-1334 at level 7: text: : item-1335 at level 7: text: 10.1093/auk/103.4.737 - item-1336 at level 7: text: . - item-1337 at level 7: text: Archived + item-1336 at level 7: text: . + item-1337 at level 7: text: Archived item-1338 at level 7: text: (PDF) from the original on 2022-10-09. item-1339 at level 5: list_item: item-1340 at level 6: inline: group group - item-1341 at level 7: text: Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). - item-1342 at level 7: text: "A partial classification of wat ... l (Anatidae) based on single-copy DNA" - item-1343 at level 7: text: (PDF) . + item-1341 at level 7: text: Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). + item-1342 at level 7: text: "A partial classification of wat ... (Anatidae) based on single-copy DNA" + item-1343 at level 7: text: (PDF). item-1344 at level 7: text: The Auk - item-1345 at level 7: text: . - item-1346 at level 7: text: 105 - item-1347 at level 7: text: (3): 452-459. + item-1345 at level 7: text: . + item-1346 at level 7: text: 105 + item-1347 at level 7: text: (3): 452-459. item-1348 at level 7: text: doi item-1349 at level 7: text: : item-1350 at level 7: text: 10.1093/auk/105.3.452 - item-1351 at level 7: text: . - item-1352 at level 7: text: Archived + item-1351 at level 7: text: . + item-1352 at level 7: text: Archived item-1353 at level 7: text: (PDF) from the original on 2022-10-09. item-1354 at level 5: list_item: item-1355 at level 6: inline: group group - item-1356 at level 7: text: Maisels, Charles Keith (1999). + item-1356 at level 7: text: Maisels, Charles Keith (1999). item-1357 at level 7: text: Early Civilizations of the Old World - item-1358 at level 7: text: . London: Routledge. - item-1359 at level 7: text: ISBN + item-1358 at level 7: text: . London: Routledge. + item-1359 at level 7: text: ISBN item-1360 at level 7: text: 978-0-415-10975-8 item-1361 at level 7: text: . item-1362 at level 5: list_item: item-1363 at level 6: inline: group group - item-1364 at level 7: text: Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). + item-1364 at level 7: text: Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). item-1365 at level 7: text: A Field Guide to the Birds of Hawaii and the Tropical Pacific - item-1366 at level 7: text: . Princeton, NJ: Princeton University Press. - item-1367 at level 7: text: ISBN + item-1366 at level 7: text: . Princeton, NJ: Princeton University Press. + item-1367 at level 7: text: ISBN item-1368 at level 7: text: 0-691-02399-9 item-1369 at level 7: text: . item-1370 at level 5: list_item: item-1371 at level 6: inline: group group - item-1372 at level 7: text: Rau, Charles (1876). + item-1372 at level 7: text: Rau, Charles (1876). item-1373 at level 7: text: Early Man in Europe - item-1374 at level 7: text: . New York: Harper & Brothers. - item-1375 at level 7: text: LCCN + item-1374 at level 7: text: . New York: Harper & Brothers. + item-1375 at level 7: text: LCCN item-1376 at level 7: text: 05040168 item-1377 at level 7: text: . item-1378 at level 5: list_item: item-1379 at level 6: inline: group group - item-1380 at level 7: text: Shirihai, Hadoram (2008). + item-1380 at level 7: text: Shirihai, Hadoram (2008). item-1381 at level 7: text: A Complete Guide to Antarctic Wildlife - item-1382 at level 7: text: . Princeton, NJ, US: Princeton University Press. - item-1383 at level 7: text: ISBN + item-1382 at level 7: text: . Princeton, NJ, US: Princeton University Press. + item-1383 at level 7: text: ISBN item-1384 at level 7: text: 978-0-691-13666-0 item-1385 at level 7: text: . item-1386 at level 5: list_item: item-1387 at level 6: inline: group group - item-1388 at level 7: text: Sued-Badillo, Jalil (2003). + item-1388 at level 7: text: Sued-Badillo, Jalil (2003). item-1389 at level 7: text: Autochthonous Societies - item-1390 at level 7: text: . General History of the Caribbean. Paris: UNESCO. - item-1391 at level 7: text: ISBN + item-1390 at level 7: text: . General History of the Caribbean. Paris: UNESCO. + item-1391 at level 7: text: ISBN item-1392 at level 7: text: 978-92-3-103832-7 item-1393 at level 7: text: . item-1394 at level 5: list_item: item-1395 at level 6: inline: group group - item-1396 at level 7: text: Thorpe, I. J. (1996). + item-1396 at level 7: text: Thorpe, I. J. (1996). item-1397 at level 7: text: The Origins of Agriculture in Europe - item-1398 at level 7: text: . New York: Routledge. - item-1399 at level 7: text: ISBN + item-1398 at level 7: text: . New York: Routledge. + item-1399 at level 7: text: ISBN item-1400 at level 7: text: 978-0-415-08009-5 item-1401 at level 7: text: . item-1402 at level 2: section_header: External links item-1403 at level 3: inline: group group - item-1404 at level 4: text: Duck - item-1405 at level 4: text: at Wikipedia's + item-1404 at level 4: text: Duck + item-1405 at level 4: text: at Wikipedia's item-1406 at level 4: text: sister projects item-1407 at level 3: list: group list item-1408 at level 4: list_item: item-1409 at level 5: inline: group group - item-1410 at level 6: text: Definitions + item-1410 at level 6: text: Definitions item-1411 at level 6: text: from Wiktionary item-1412 at level 5: picture item-1413 at level 4: list_item: item-1414 at level 5: inline: group group - item-1415 at level 6: text: Media + item-1415 at level 6: text: Media item-1416 at level 6: text: from Commons item-1417 at level 5: picture item-1418 at level 4: list_item: item-1419 at level 5: inline: group group - item-1420 at level 6: text: Quotations + item-1420 at level 6: text: Quotations item-1421 at level 6: text: from Wikiquote item-1422 at level 5: picture item-1423 at level 4: list_item: item-1424 at level 5: inline: group group - item-1425 at level 6: text: Recipes + item-1425 at level 6: text: Recipes item-1426 at level 6: text: from Wikibooks item-1427 at level 5: picture item-1428 at level 4: list_item: item-1429 at level 5: inline: group group - item-1430 at level 6: text: Taxa + item-1430 at level 6: text: Taxa item-1431 at level 6: text: from Wikispecies item-1432 at level 5: picture item-1433 at level 4: list_item: item-1434 at level 5: inline: group group - item-1435 at level 6: text: Data + item-1435 at level 6: text: Data item-1436 at level 6: text: from Wikidata item-1437 at level 5: picture item-1438 at level 3: list: group list item-1439 at level 4: list_item: item-1440 at level 5: inline: group group - item-1441 at level 6: text: list of books + item-1441 at level 6: text: list of books item-1442 at level 6: text: (useful looking abstracts) item-1443 at level 4: list_item: item-1444 at level 5: inline: group group - item-1445 at level 6: text: Ducks on postage stamps - item-1446 at level 6: text: Archived - item-1447 at level 6: text: 2013-05-13 at the + item-1445 at level 6: text: Ducks on postage stamps + item-1446 at level 6: text: Archived + item-1447 at level 6: text: 2013-05-13 at the item-1448 at level 6: text: Wayback Machine item-1449 at level 4: list_item: item-1450 at level 5: inline: group group - item-1451 at level 6: text: Ducks at a Distance, by Rob Hines - item-1452 at level 6: text: at - item-1453 at level 6: text: Project Gutenberg + item-1451 at level 6: text: Ducks at a Distance, by Rob Hines + item-1452 at level 6: text: at + item-1453 at level 6: text: Project Gutenberg item-1454 at level 6: text: - A modern illustrated guide to identification of US waterfowl item-1455 at level 3: table with [3x2] item-1456 at level 4: unspecified: group rich_cell_group_2_0_0 @@ -1526,15 +1526,15 @@ item-0 at level 0: unspecified: group _root_ item-1510 at level 1: caption: Page semi-protected item-1511 at level 1: caption: Edit this classification item-1512 at level 1: caption: Pacific black duck displaying the characteristic upending "duck" - item-1513 at level 1: caption: Male mallard . - item-1514 at level 1: caption: Wood ducks . + item-1513 at level 1: caption: Male mallard. + item-1514 at level 1: caption: Wood ducks. item-1515 at level 1: caption: Mallard landing in approach item-1516 at level 1: caption: Male Mandarin duck - item-1517 at level 1: caption: Flying steamer ducks in Ushuaia , Argentina - item-1518 at level 1: caption: Female mallard in Cornwall , England + item-1517 at level 1: caption: Flying steamer ducks in Ushuaia, Argentina + item-1518 at level 1: caption: Female mallard in Cornwall, England item-1519 at level 1: caption: Pecten along the bill item-1520 at level 1: caption: A Muscovy duckling item-1521 at level 1: caption: Ringed teal - item-1522 at level 1: caption: Indian Runner ducks , a common breed of domestic ducks - item-1523 at level 1: caption: Three black-colored ducks in the coat of arms of Maaninka [ 49 ] + item-1522 at level 1: caption: Indian Runner ducks, a common breed of domestic ducks + item-1523 at level 1: caption: Three black-colored ducks in the coat of arms of Maaninka[49] item-1524 at level 1: caption: Edit this at Wikidata \ No newline at end of file diff --git a/tests/data/html/groundtruth/wiki_duck.html.json b/tests/data/html/groundtruth/wiki_duck.html.json index c5596d97a4..b86154b2dc 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.json +++ b/tests/data/html/groundtruth/wiki_duck.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "wiki_duck", "origin": { "mimetype": "text/html", @@ -6642,8 +6642,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Pages for logged out editors", - "text": "Pages for logged out editors" + "orig": "Pages for logged out editors ", + "text": "Pages for logged out editors " }, { "self_ref": "#/texts/32", @@ -6859,8 +6859,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "5 Behaviour", - "text": "5 Behaviour", + "orig": "5 Behaviour ", + "text": "5 Behaviour ", "hyperlink": "#Behaviour" }, { @@ -6981,8 +6981,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "6 Relationship with humans", - "text": "6 Relationship with humans", + "orig": "6 Relationship with humans ", + "text": "6 Relationship with humans ", "hyperlink": "#Relationship_with_humans" }, { @@ -7122,8 +7122,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "8 Notes", - "text": "8 Notes", + "orig": "8 Notes ", + "text": "8 Notes ", "hyperlink": "#Notes" }, { @@ -9910,8 +9910,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Redirected from", - "text": "(Redirected from" + "orig": "(Redirected from ", + "text": "(Redirected from " }, { "self_ref": "#/texts/241", @@ -9947,8 +9947,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This article is about the bird. For duck as a food, see", - "text": "This article is about the bird. For duck as a food, see" + "orig": "This article is about the bird. For duck as a food, see ", + "text": "This article is about the bird. For duck as a food, see " }, { "self_ref": "#/texts/244", @@ -9972,8 +9972,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". For other uses, see", - "text": ". For other uses, see" + "orig": ". For other uses, see ", + "text": ". For other uses, see " }, { "self_ref": "#/texts/246", @@ -10009,8 +10009,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Duckling\" redirects here. For other uses, see", - "text": "\"Duckling\" redirects here. For other uses, see" + "orig": "\"Duckling\" redirects here. For other uses, see ", + "text": "\"Duckling\" redirects here. For other uses, see " }, { "self_ref": "#/texts/249", @@ -10046,8 +10046,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Bufflehead", - "text": "Bufflehead", + "orig": "Bufflehead ", + "text": "Bufflehead ", "hyperlink": "/wiki/Bufflehead" }, { @@ -10219,8 +10219,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Duck", - "text": "Duck", + "orig": "Duck ", + "text": "Duck ", "formatting": { "bold": true, "italic": false, @@ -10238,8 +10238,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the common name for numerous species of", - "text": "is the common name for numerous species of" + "orig": "is the common name for numerous species of ", + "text": "is the common name for numerous species of " }, { "self_ref": "#/texts/266", @@ -10250,8 +10250,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "waterfowl", - "text": "waterfowl", + "orig": "waterfowl ", + "text": "waterfowl ", "hyperlink": "/wiki/Waterfowl" }, { @@ -10263,8 +10263,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in the", - "text": "in the" + "orig": "in the ", + "text": "in the " }, { "self_ref": "#/texts/268", @@ -10275,8 +10275,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "family", - "text": "family", + "orig": "family ", + "text": "family ", "hyperlink": "/wiki/Family_(biology)" }, { @@ -10301,8 +10301,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Ducks are generally smaller and shorter-necked than", - "text": ". Ducks are generally smaller and shorter-necked than" + "orig": ". Ducks are generally smaller and shorter-necked than ", + "text": ". Ducks are generally smaller and shorter-necked than " }, { "self_ref": "#/texts/271", @@ -10313,8 +10313,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "swans", - "text": "swans", + "orig": "swans ", + "text": "swans ", "hyperlink": "/wiki/Swan" }, { @@ -10326,8 +10326,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/273", @@ -10351,8 +10351,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", which are members of the same family. Divided among several subfamilies, they are a", - "text": ", which are members of the same family. Divided among several subfamilies, they are a" + "orig": ", which are members of the same family. Divided among several subfamilies, they are a ", + "text": ", which are members of the same family. Divided among several subfamilies, they are a " }, { "self_ref": "#/texts/275", @@ -10376,8 +10376,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; they do not represent a", - "text": "; they do not represent a" + "orig": "; they do not represent a ", + "text": "; they do not represent a " }, { "self_ref": "#/texts/277", @@ -10388,8 +10388,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "monophyletic group", - "text": "monophyletic group", + "orig": "monophyletic group ", + "text": "monophyletic group ", "hyperlink": "/wiki/Monophyletic_group" }, { @@ -10401,8 +10401,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly", - "text": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly" + "orig": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly ", + "text": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly " }, { "self_ref": "#/texts/279", @@ -10438,8 +10438,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as", - "text": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as" + "orig": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as ", + "text": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as " }, { "self_ref": "#/texts/282", @@ -10450,8 +10450,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "loons", - "text": "loons", + "orig": "loons ", + "text": "loons ", "hyperlink": "/wiki/Loon" }, { @@ -10463,8 +10463,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or divers,", - "text": "or divers," + "orig": "or divers, ", + "text": "or divers, " }, { "self_ref": "#/texts/284", @@ -10488,8 +10488,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/286", @@ -10500,8 +10500,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gallinules", - "text": "gallinules", + "orig": "gallinules ", + "text": "gallinules ", "hyperlink": "/wiki/Gallinule" }, { @@ -10513,8 +10513,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/288", @@ -10585,8 +10585,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The word", - "text": "The word" + "orig": "The word ", + "text": "The word " }, { "self_ref": "#/texts/292", @@ -10597,8 +10597,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "duck", - "text": "duck", + "orig": "duck ", + "text": "duck ", "formatting": { "bold": false, "italic": true, @@ -10616,8 +10616,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "comes from", - "text": "comes from" + "orig": "comes from ", + "text": "comes from " }, { "self_ref": "#/texts/294", @@ -10628,8 +10628,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Old English", - "text": "Old English", + "orig": "Old English ", + "text": "Old English ", "hyperlink": "/wiki/Old_English" }, { @@ -10641,8 +10641,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dūce", - "text": "dūce", + "orig": "dūce ", + "text": "dūce ", "formatting": { "bold": false, "italic": true, @@ -10672,8 +10672,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dūcan", - "text": "dūcan", + "orig": "dūcan ", + "text": "dūcan ", "formatting": { "bold": false, "italic": true, @@ -10691,8 +10691,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the", - "text": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the" + "orig": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the ", + "text": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the " }, { "self_ref": "#/texts/299", @@ -10703,8 +10703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dabbling duck", - "text": "dabbling duck", + "orig": "dabbling duck ", + "text": "dabbling duck ", "hyperlink": "/wiki/Dabbling_duck" }, { @@ -10716,8 +10716,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "group feed by upending; compare with", - "text": "group feed by upending; compare with" + "orig": "group feed by upending; compare with ", + "text": "group feed by upending; compare with " }, { "self_ref": "#/texts/301", @@ -10728,8 +10728,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dutch", - "text": "Dutch", + "orig": "Dutch ", + "text": "Dutch ", "hyperlink": "/wiki/Dutch_language" }, { @@ -10741,8 +10741,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "duiken", - "text": "duiken", + "orig": "duiken ", + "text": "duiken ", "formatting": { "bold": false, "italic": true, @@ -10760,8 +10760,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/304", @@ -10772,8 +10772,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "German", - "text": "German", + "orig": "German ", + "text": "German ", "hyperlink": "/wiki/German_language" }, { @@ -10785,8 +10785,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "tauchen", - "text": "tauchen", + "orig": "tauchen ", + "text": "tauchen ", "formatting": { "bold": false, "italic": true, @@ -10829,8 +10829,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This word replaced Old English", - "text": "This word replaced Old English" + "orig": "This word replaced Old English ", + "text": "This word replaced Old English " }, { "self_ref": "#/texts/309", @@ -10841,8 +10841,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ened", - "text": "ened", + "orig": "ened ", + "text": "ened ", "formatting": { "bold": false, "italic": true, @@ -10872,8 +10872,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ænid", - "text": "ænid", + "orig": "ænid ", + "text": "ænid ", "formatting": { "bold": false, "italic": true, @@ -10891,8 +10891,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'duck', possibly to avoid confusion with other words, such as", - "text": "'duck', possibly to avoid confusion with other words, such as" + "orig": "'duck', possibly to avoid confusion with other words, such as ", + "text": "'duck', possibly to avoid confusion with other words, such as " }, { "self_ref": "#/texts/313", @@ -10903,8 +10903,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ende", - "text": "ende", + "orig": "ende ", + "text": "ende ", "formatting": { "bold": false, "italic": true, @@ -10922,8 +10922,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'end' with similar forms. Other Germanic languages still have similar words for", - "text": "'end' with similar forms. Other Germanic languages still have similar words for" + "orig": "'end' with similar forms. Other Germanic languages still have similar words for ", + "text": "'end' with similar forms. Other Germanic languages still have similar words for " }, { "self_ref": "#/texts/315", @@ -10953,8 +10953,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", for example, Dutch", - "text": ", for example, Dutch" + "orig": ", for example, Dutch ", + "text": ", for example, Dutch " }, { "self_ref": "#/texts/317", @@ -10984,8 +10984,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", German", - "text": ", German" + "orig": ", German ", + "text": ", German " }, { "self_ref": "#/texts/319", @@ -10996,8 +10996,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ente", - "text": "Ente", + "orig": "Ente ", + "text": "Ente ", "formatting": { "bold": false, "italic": true, @@ -11015,8 +11015,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/321", @@ -11027,8 +11027,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Norwegian", - "text": "Norwegian", + "orig": "Norwegian ", + "text": "Norwegian ", "hyperlink": "/wiki/Norwegian_language" }, { @@ -11059,8 +11059,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The word", - "text": ". The word" + "orig": ". The word ", + "text": ". The word " }, { "self_ref": "#/texts/324", @@ -11071,8 +11071,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ened", - "text": "ened", + "orig": "ened ", + "text": "ened ", "formatting": { "bold": false, "italic": true, @@ -11102,8 +11102,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ænid", - "text": "ænid", + "orig": "ænid ", + "text": "ænid ", "formatting": { "bold": false, "italic": true, @@ -11121,8 +11121,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was inherited from", - "text": "was inherited from" + "orig": "was inherited from ", + "text": "was inherited from " }, { "self_ref": "#/texts/328", @@ -11146,8 +11146,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ";", - "text": ";" + "orig": "; ", + "text": "; " }, { "self_ref": "#/texts/330", @@ -11158,8 +11158,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "cf.", - "text": "cf.", + "orig": "cf. ", + "text": "cf. ", "hyperlink": "/wiki/Cf." }, { @@ -11171,8 +11171,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Latin", - "text": "Latin", + "orig": "Latin ", + "text": "Latin ", "hyperlink": "/wiki/Latin" }, { @@ -11184,8 +11184,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "anas", - "text": "anas", + "orig": "anas ", + "text": "anas ", "formatting": { "bold": false, "italic": true, @@ -11203,8 +11203,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"duck\",", - "text": "\"duck\"," + "orig": "\"duck\", ", + "text": "\"duck\", " }, { "self_ref": "#/texts/334", @@ -11215,8 +11215,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Lithuanian", - "text": "Lithuanian", + "orig": "Lithuanian ", + "text": "Lithuanian ", "hyperlink": "/wiki/Lithuanian_language" }, { @@ -11228,8 +11228,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ántis", - "text": "ántis", + "orig": "ántis ", + "text": "ántis ", "formatting": { "bold": false, "italic": true, @@ -11247,8 +11247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'duck',", - "text": "'duck'," + "orig": "'duck', ", + "text": "'duck', " }, { "self_ref": "#/texts/337", @@ -11259,8 +11259,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ancient Greek", - "text": "Ancient Greek", + "orig": "Ancient Greek ", + "text": "Ancient Greek ", "hyperlink": "/wiki/Ancient_Greek_language" }, { @@ -11272,8 +11272,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "νῆσσα / νῆττα (", - "text": "νῆσσα / νῆττα (" + "orig": "νῆσσα /νῆττα (", + "text": "νῆσσα /νῆττα (" }, { "self_ref": "#/texts/339", @@ -11284,8 +11284,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "nēssa", - "text": "nēssa", + "orig": "nēssa ", + "text": "nēssa ", "formatting": { "bold": false, "italic": true, @@ -11334,8 +11334,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ") 'duck', and", - "text": ") 'duck', and" + "orig": ") 'duck', and ", + "text": ") 'duck', and " }, { "self_ref": "#/texts/343", @@ -11346,8 +11346,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sanskrit", - "text": "Sanskrit", + "orig": "Sanskrit ", + "text": "Sanskrit ", "hyperlink": "/wiki/Sanskrit" }, { @@ -11359,8 +11359,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ātí", - "text": "ātí", + "orig": "ātí ", + "text": "ātí ", "formatting": { "bold": false, "italic": true, @@ -11402,8 +11402,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 1 ]", - "text": "[ 1 ]", + "orig": "[1] ", + "text": "[1] ", "formatting": { "bold": false, "italic": false, @@ -11434,8 +11434,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 2 ]", - "text": "[ 2 ]", + "orig": "[2] ", + "text": "[2] ", "formatting": { "bold": false, "italic": false, @@ -11466,8 +11466,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A male is called a", - "text": "A male is called a" + "orig": "A male is called a ", + "text": "A male is called a " }, { "self_ref": "#/texts/352", @@ -11478,8 +11478,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "drake", - "text": "drake", + "orig": "drake ", + "text": "drake ", "hyperlink": "https://en.wiktionary.org/wiki/drake" }, { @@ -11491,8 +11491,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the female is called a duck, or in", - "text": "and the female is called a duck, or in" + "orig": "and the female is called a duck, or in ", + "text": "and the female is called a duck, or in " }, { "self_ref": "#/texts/354", @@ -11503,8 +11503,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ornithology", - "text": "ornithology", + "orig": "ornithology ", + "text": "ornithology ", "hyperlink": "/wiki/Ornithology" }, { @@ -11528,8 +11528,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 3 ]", - "text": "[ 3 ]", + "orig": "[3]", + "text": "[3]", "formatting": { "bold": false, "italic": false, @@ -11548,8 +11548,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 4 ]", - "text": "[ 4 ]", + "orig": "[4]", + "text": "[4]", "formatting": { "bold": false, "italic": false, @@ -11568,8 +11568,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Male mallard .", - "text": "Male mallard .", + "orig": "Male mallard.", + "text": "Male mallard.", "hyperlink": "/wiki/Mallard" }, { @@ -11581,8 +11581,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Wood ducks .", - "text": "Wood ducks .", + "orig": "Wood ducks.", + "text": "Wood ducks.", "hyperlink": "/wiki/Wood_duck" }, { @@ -11620,8 +11620,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All ducks belong to the", - "text": "All ducks belong to the" + "orig": "All ducks belong to the ", + "text": "All ducks belong to the " }, { "self_ref": "#/texts/362", @@ -11632,8 +11632,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "biological order", - "text": "biological order", + "orig": "biological order ", + "text": "biological order ", "hyperlink": "/wiki/Order_(biology)" }, { @@ -11658,8 +11658,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", a group that contains the ducks, geese and swans, as well as the", - "text": ", a group that contains the ducks, geese and swans, as well as the" + "orig": ", a group that contains the ducks, geese and swans, as well as the ", + "text": ", a group that contains the ducks, geese and swans, as well as the " }, { "self_ref": "#/texts/365", @@ -11683,8 +11683,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and the", - "text": ", and the" + "orig": ", and the ", + "text": ", and the " }, { "self_ref": "#/texts/367", @@ -11720,8 +11720,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11740,8 +11740,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All except the screamers belong to the", - "text": "All except the screamers belong to the" + "orig": "All except the screamers belong to the ", + "text": "All except the screamers belong to the " }, { "self_ref": "#/texts/371", @@ -11752,8 +11752,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "biological family", - "text": "biological family", + "orig": "biological family ", + "text": "biological family ", "hyperlink": "/wiki/Family_(biology)" }, { @@ -11790,8 +11790,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11822,8 +11822,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11842,8 +11842,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Some base their decisions on", - "text": "Some base their decisions on" + "orig": "Some base their decisions on ", + "text": "Some base their decisions on " }, { "self_ref": "#/texts/378", @@ -11879,8 +11879,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 6 ]", - "text": "[ 6 ]", + "orig": "[6]", + "text": "[6]", "formatting": { "bold": false, "italic": false, @@ -11899,8 +11899,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 7 ]", - "text": "[ 7 ]", + "orig": "[7] ", + "text": "[7] ", "formatting": { "bold": false, "italic": false, @@ -11931,8 +11931,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 8 ]", - "text": "[ 8 ]", + "orig": "[8]", + "text": "[8]", "formatting": { "bold": false, "italic": false, @@ -11951,8 +11951,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -11971,8 +11971,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The significant level of", - "text": "The significant level of" + "orig": "The significant level of ", + "text": "The significant level of " }, { "self_ref": "#/texts/386", @@ -11983,8 +11983,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "hybridisation", - "text": "hybridisation", + "orig": "hybridisation ", + "text": "hybridisation ", "hyperlink": "/wiki/Hybrid_(biology)" }, { @@ -12008,8 +12008,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9]", + "text": "[9]", "formatting": { "bold": false, "italic": false, @@ -12053,8 +12053,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 10 ]", - "text": "[ 10 ]", + "orig": "[10] ", + "text": "[10] ", "formatting": { "bold": false, "italic": false, @@ -12085,8 +12085,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 11 ]", - "text": "[ 11 ]", + "orig": "[11] ", + "text": "[11] ", "formatting": { "bold": false, "italic": false, @@ -12117,8 +12117,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 12 ]", - "text": "[ 12 ]", + "orig": "[12] ", + "text": "[12] ", "formatting": { "bold": false, "italic": false, @@ -12149,8 +12149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 13 ]", - "text": "[ 13 ]", + "orig": "[13] ", + "text": "[13] ", "formatting": { "bold": false, "italic": false, @@ -12181,8 +12181,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 14 ]", - "text": "[ 14 ]", + "orig": "[14]", + "text": "[14]", "formatting": { "bold": false, "italic": false, @@ -12201,8 +12201,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The", - "text": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The" + "orig": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The ", + "text": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The " }, { "self_ref": "#/texts/401", @@ -12213,8 +12213,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "whistling ducks", - "text": "whistling ducks", + "orig": "whistling ducks ", + "text": "whistling ducks ", "hyperlink": "/wiki/Whistling_duck" }, { @@ -12238,8 +12238,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12270,8 +12270,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9]", + "text": "[9]", "formatting": { "bold": false, "italic": false, @@ -12290,8 +12290,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 16 ]", - "text": "[ 16 ]", + "orig": "[16] ", + "text": "[16] ", "formatting": { "bold": false, "italic": false, @@ -12310,8 +12310,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/408", @@ -12322,8 +12322,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "freckled duck", - "text": "freckled duck", + "orig": "freckled duck ", + "text": "freckled duck ", "hyperlink": "/wiki/Freckled_duck" }, { @@ -12347,8 +12347,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12379,8 +12379,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12399,8 +12399,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/414", @@ -12411,8 +12411,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "shelducks", - "text": "shelducks", + "orig": "shelducks ", + "text": "shelducks ", "hyperlink": "/wiki/Shelduck" }, { @@ -12436,8 +12436,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12468,8 +12468,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 17 ]", - "text": "[ 17 ]", + "orig": "[17] ", + "text": "[17] ", "formatting": { "bold": false, "italic": false, @@ -12488,8 +12488,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "while the", - "text": "while the" + "orig": "while the ", + "text": "while the " }, { "self_ref": "#/texts/420", @@ -12500,8 +12500,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "steamer ducks", - "text": "steamer ducks", + "orig": "steamer ducks ", + "text": "steamer ducks ", "hyperlink": "/wiki/Steamer_duck" }, { @@ -12525,8 +12525,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12557,8 +12557,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12577,8 +12577,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/426", @@ -12589,8 +12589,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "perching ducks", - "text": "perching ducks", + "orig": "perching ducks ", + "text": "perching ducks ", "hyperlink": "/wiki/Perching_duck" }, { @@ -12614,8 +12614,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12634,8 +12634,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/430", @@ -12646,8 +12646,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "torrent duck", - "text": "torrent duck", + "orig": "torrent duck ", + "text": "torrent duck ", "hyperlink": "/wiki/Torrent_duck" }, { @@ -12671,8 +12671,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12703,8 +12703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 18 ]", - "text": "[ 18 ]", + "orig": "[18] ", + "text": "[18] ", "formatting": { "bold": false, "italic": false, @@ -12723,8 +12723,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/436", @@ -12735,8 +12735,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "pink-eared duck", - "text": "pink-eared duck", + "orig": "pink-eared duck ", + "text": "pink-eared duck ", "hyperlink": "/wiki/Pink-eared_duck" }, { @@ -12760,8 +12760,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12792,8 +12792,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 19 ]", - "text": "[ 19 ]", + "orig": "[19] ", + "text": "[19] ", "formatting": { "bold": false, "italic": false, @@ -12824,8 +12824,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15]", + "text": "[15]", "formatting": { "bold": false, "italic": false, @@ -12880,8 +12880,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The overall", - "text": "The overall" + "orig": "The overall ", + "text": "The overall " }, { "self_ref": "#/texts/446", @@ -12892,8 +12892,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "body plan", - "text": "body plan", + "orig": "body plan ", + "text": "body plan ", "hyperlink": "/wiki/Body_plan" }, { @@ -12905,8 +12905,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The", - "text": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The" + "orig": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The ", + "text": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The " }, { "self_ref": "#/texts/448", @@ -12917,8 +12917,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bill", - "text": "bill", + "orig": "bill ", + "text": "bill ", "hyperlink": "/wiki/Beak" }, { @@ -12930,8 +12930,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is usually broad and contains serrated", - "text": "is usually broad and contains serrated" + "orig": "is usually broad and contains serrated ", + "text": "is usually broad and contains serrated " }, { "self_ref": "#/texts/450", @@ -12955,8 +12955,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the", - "text": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the" + "orig": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the ", + "text": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the " }, { "self_ref": "#/texts/452", @@ -12967,8 +12967,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "flight", - "text": "flight", + "orig": "flight ", + "text": "flight ", "hyperlink": "/wiki/Bird_flight" }, { @@ -12980,8 +12980,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of", - "text": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of" + "orig": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of ", + "text": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of " }, { "self_ref": "#/texts/454", @@ -12992,8 +12992,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "steamer duck", - "text": "steamer duck", + "orig": "steamer duck ", + "text": "steamer duck ", "hyperlink": "/wiki/Steamer_duck" }, { @@ -13005,8 +13005,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are almost flightless, however. Many species of duck are temporarily flightless while", - "text": "are almost flightless, however. Many species of duck are temporarily flightless while" + "orig": "are almost flightless, however. Many species of duck are temporarily flightless while ", + "text": "are almost flightless, however. Many species of duck are temporarily flightless while " }, { "self_ref": "#/texts/456", @@ -13030,8 +13030,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes", - "text": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes" + "orig": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes ", + "text": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes " }, { "self_ref": "#/texts/458", @@ -13067,8 +13067,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The drakes of northern species often have extravagant", - "text": "The drakes of northern species often have extravagant" + "orig": "The drakes of northern species often have extravagant ", + "text": "The drakes of northern species often have extravagant " }, { "self_ref": "#/texts/461", @@ -13092,8 +13092,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", but that is", - "text": ", but that is" + "orig": ", but that is ", + "text": ", but that is " }, { "self_ref": "#/texts/463", @@ -13104,8 +13104,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "moulted", - "text": "moulted", + "orig": "moulted ", + "text": "moulted ", "hyperlink": "/wiki/Moult" }, { @@ -13117,8 +13117,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less", - "text": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less" + "orig": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less ", + "text": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less " }, { "self_ref": "#/texts/465", @@ -13142,8 +13142,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", although there are exceptions such as the", - "text": ", although there are exceptions such as the" + "orig": ", although there are exceptions such as the ", + "text": ", although there are exceptions such as the " }, { "self_ref": "#/texts/467", @@ -13154,8 +13154,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "paradise shelduck", - "text": "paradise shelduck", + "orig": "paradise shelduck ", + "text": "paradise shelduck ", "hyperlink": "/wiki/Paradise_shelduck" }, { @@ -13167,8 +13167,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of", - "text": "of" + "orig": "of ", + "text": "of " }, { "self_ref": "#/texts/469", @@ -13233,8 +13233,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "See also:", - "text": "See also:" + "orig": "See also: ", + "text": "See also: " }, { "self_ref": "#/texts/473", @@ -13258,8 +13258,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Flying steamer ducks in Ushuaia , Argentina", - "text": "Flying steamer ducks in Ushuaia , Argentina", + "orig": "Flying steamer ducks in Ushuaia, Argentina", + "text": "Flying steamer ducks in Ushuaia, Argentina", "hyperlink": "/wiki/Flying_steamer_ducks" }, { @@ -13271,8 +13271,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have a", - "text": "Ducks have a" + "orig": "Ducks have a ", + "text": "Ducks have a " }, { "self_ref": "#/texts/476", @@ -13308,8 +13308,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -13328,8 +13328,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Several species manage to live on subantarctic islands, including", - "text": "Several species manage to live on subantarctic islands, including" + "orig": "Several species manage to live on subantarctic islands, including ", + "text": "Several species manage to live on subantarctic islands, including " }, { "self_ref": "#/texts/480", @@ -13340,8 +13340,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "South Georgia", - "text": "South Georgia", + "orig": "South Georgia ", + "text": "South Georgia ", "hyperlink": "/wiki/South_Georgia_and_the_South_Sandwich_Islands" }, { @@ -13353,8 +13353,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the", - "text": "and the" + "orig": "and the ", + "text": "and the " }, { "self_ref": "#/texts/482", @@ -13390,8 +13390,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 20 ]", - "text": "[ 20 ]", + "orig": "[20] ", + "text": "[20] ", "formatting": { "bold": false, "italic": false, @@ -13410,8 +13410,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have reached a number of isolated oceanic islands, including the", - "text": "Ducks have reached a number of isolated oceanic islands, including the" + "orig": "Ducks have reached a number of isolated oceanic islands, including the ", + "text": "Ducks have reached a number of isolated oceanic islands, including the " }, { "self_ref": "#/texts/486", @@ -13435,8 +13435,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/488", @@ -13447,8 +13447,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Micronesia", - "text": "Micronesia", + "orig": "Micronesia ", + "text": "Micronesia ", "hyperlink": "/wiki/Micronesia" }, { @@ -13460,8 +13460,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the", - "text": "and the" + "orig": "and the ", + "text": "and the " }, { "self_ref": "#/texts/490", @@ -13485,8 +13485,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where they are often", - "text": ", where they are often" + "orig": ", where they are often ", + "text": ", where they are often " }, { "self_ref": "#/texts/492", @@ -13497,8 +13497,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "vagrants", - "text": "vagrants", + "orig": "vagrants ", + "text": "vagrants ", "hyperlink": "/wiki/Glossary_of_bird_terms#vagrants" }, { @@ -13510,8 +13510,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and less often", - "text": "and less often" + "orig": "and less often ", + "text": "and less often " }, { "self_ref": "#/texts/494", @@ -13547,8 +13547,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 21 ]", - "text": "[ 21 ]", + "orig": "[21]", + "text": "[21]", "formatting": { "bold": false, "italic": false, @@ -13567,8 +13567,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 22 ]", - "text": "[ 22 ]", + "orig": "[22] ", + "text": "[22] ", "formatting": { "bold": false, "italic": false, @@ -13587,8 +13587,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A handful are", - "text": "A handful are" + "orig": "A handful are ", + "text": "A handful are " }, { "self_ref": "#/texts/499", @@ -13599,8 +13599,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "endemic", - "text": "endemic", + "orig": "endemic ", + "text": "endemic ", "hyperlink": "/wiki/Endemic" }, { @@ -13624,8 +13624,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 21 ]", - "text": "[ 21 ]", + "orig": "[21]", + "text": "[21]", "formatting": { "bold": false, "italic": false, @@ -13644,8 +13644,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Female mallard in Cornwall , England", - "text": "Female mallard in Cornwall , England", + "orig": "Female mallard in Cornwall, England", + "text": "Female mallard in Cornwall, England", "hyperlink": "/wiki/Cornwall" }, { @@ -13669,8 +13669,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 23 ]", - "text": "[ 23 ]", + "orig": "[23]", + "text": "[23]", "formatting": { "bold": false, "italic": false, @@ -13763,8 +13763,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks eat food sources such as", - "text": "Ducks eat food sources such as" + "orig": "Ducks eat food sources such as ", + "text": "Ducks eat food sources such as " }, { "self_ref": "#/texts/509", @@ -13788,8 +13788,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", aquatic plants, fish, insects, small amphibians, worms, and small", - "text": ", aquatic plants, fish, insects, small amphibians, worms, and small" + "orig": ", aquatic plants, fish, insects, small amphibians, worms, and small ", + "text": ", aquatic plants, fish, insects, small amphibians, worms, and small " }, { "self_ref": "#/texts/511", @@ -13825,8 +13825,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dabbling ducks", - "text": "Dabbling ducks", + "orig": "Dabbling ducks ", + "text": "Dabbling ducks ", "hyperlink": "/wiki/Dabbling_duck" }, { @@ -13850,8 +13850,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 24 ]", - "text": "[ 24 ]", + "orig": "[24] ", + "text": "[24] ", "formatting": { "bold": false, "italic": false, @@ -13870,8 +13870,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Along the edge of the bill, there is a comb-like structure called a", - "text": "Along the edge of the bill, there is a comb-like structure called a" + "orig": "Along the edge of the bill, there is a comb-like structure called a ", + "text": "Along the edge of the bill, there is a comb-like structure called a " }, { "self_ref": "#/texts/517", @@ -13907,8 +13907,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Diving ducks", - "text": "Diving ducks", + "orig": "Diving ducks ", + "text": "Diving ducks ", "hyperlink": "/wiki/Diving_duck" }, { @@ -13920,8 +13920,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/521", @@ -13932,8 +13932,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "sea ducks", - "text": "sea ducks", + "orig": "sea ducks ", + "text": "sea ducks ", "hyperlink": "/wiki/Sea_duck" }, { @@ -13957,8 +13957,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A few specialized species such as the", - "text": "A few specialized species such as the" + "orig": "A few specialized species such as the ", + "text": "A few specialized species such as the " }, { "self_ref": "#/texts/524", @@ -13969,8 +13969,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mergansers", - "text": "mergansers", + "orig": "mergansers ", + "text": "mergansers ", "hyperlink": "/wiki/Merganser" }, { @@ -13994,8 +13994,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The others have the characteristic wide flat bill adapted to", - "text": "The others have the characteristic wide flat bill adapted to" + "orig": "The others have the characteristic wide flat bill adapted to ", + "text": "The others have the characteristic wide flat bill adapted to " }, { "self_ref": "#/texts/527", @@ -14019,8 +14019,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no", - "text": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no" + "orig": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no ", + "text": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no " }, { "self_ref": "#/texts/529", @@ -14056,8 +14056,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Guardian", - "text": "The Guardian", + "orig": "The Guardian ", + "text": "The Guardian ", "formatting": { "bold": false, "italic": true, @@ -14076,8 +14076,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "published an article advising that ducks should not be fed with bread because it", - "text": "published an article advising that ducks should not be fed with bread because it" + "orig": "published an article advising that ducks should not be fed with bread because it ", + "text": "published an article advising that ducks should not be fed with bread because it " }, { "self_ref": "#/texts/533", @@ -14088,8 +14088,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "damages the health of the ducks", - "text": "damages the health of the ducks", + "orig": "damages the health of the ducks ", + "text": "damages the health of the ducks ", "hyperlink": "/wiki/Angel_wing" }, { @@ -14113,8 +14113,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 25 ]", - "text": "[ 25 ]", + "orig": "[25]", + "text": "[25]", "formatting": { "bold": false, "italic": false, @@ -14166,8 +14166,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks generally", - "text": "Ducks generally" + "orig": "Ducks generally ", + "text": "Ducks generally " }, { "self_ref": "#/texts/539", @@ -14203,8 +14203,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 26 ]", - "text": "[ 26 ]", + "orig": "[26] ", + "text": "[26] ", "formatting": { "bold": false, "italic": false, @@ -14235,8 +14235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 27 ]", - "text": "[ 27 ]", + "orig": "[27] ", + "text": "[27] ", "formatting": { "bold": false, "italic": false, @@ -14280,8 +14280,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "/summer or wet seasons). Ducks also tend to make a", - "text": "/summer or wet seasons). Ducks also tend to make a" + "orig": "/summer or wet seasons). Ducks also tend to make a ", + "text": "/summer or wet seasons). Ducks also tend to make a " }, { "self_ref": "#/texts/547", @@ -14292,8 +14292,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "nest", - "text": "nest", + "orig": "nest ", + "text": "nest ", "hyperlink": "/wiki/Bird_nest" }, { @@ -14305,8 +14305,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed", - "text": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed" + "orig": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed ", + "text": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed " }, { "self_ref": "#/texts/549", @@ -14342,8 +14342,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 28 ]", - "text": "[ 28 ]", + "orig": "[28]", + "text": "[28]", "formatting": { "bold": false, "italic": false, @@ -14382,8 +14382,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Female", - "text": "Female" + "orig": "Female ", + "text": "Female " }, { "self_ref": "#/texts/554", @@ -14394,8 +14394,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mallard", - "text": "mallard", + "orig": "mallard ", + "text": "mallard ", "hyperlink": "/wiki/Mallard" }, { @@ -14407,8 +14407,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ducks (as well as several other species in the genus", - "text": "ducks (as well as several other species in the genus" + "orig": "ducks (as well as several other species in the genus ", + "text": "ducks (as well as several other species in the genus " }, { "self_ref": "#/texts/556", @@ -14438,8 +14438,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", such as the", - "text": ", such as the" + "orig": ", such as the ", + "text": ", such as the " }, { "self_ref": "#/texts/558", @@ -14450,8 +14450,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "American", - "text": "American", + "orig": "American ", + "text": "American ", "hyperlink": "/wiki/American_black_duck" }, { @@ -14463,8 +14463,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/560", @@ -14488,8 +14488,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/562", @@ -14513,8 +14513,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/564", @@ -14525,8 +14525,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "northern pintail", - "text": "northern pintail", + "orig": "northern pintail ", + "text": "northern pintail ", "hyperlink": "/wiki/Northern_pintail" }, { @@ -14538,8 +14538,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/566", @@ -14575,8 +14575,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 29 ]", - "text": "[ 29 ]", + "orig": "[29]", + "text": "[29]", "formatting": { "bold": false, "italic": false, @@ -14634,8 +14634,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "]", - "text": "]", + "orig": "] ", + "text": "] ", "formatting": { "bold": false, "italic": false, @@ -14665,8 +14665,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 30 ]", - "text": "[ 30 ]", + "orig": "[30] ", + "text": "[30] ", "formatting": { "bold": false, "italic": false, @@ -14685,8 +14685,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In general, ducks make a range of", - "text": "In general, ducks make a range of" + "orig": "In general, ducks make a range of ", + "text": "In general, ducks make a range of " }, { "self_ref": "#/texts/575", @@ -14710,8 +14710,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", including whistles, cooing, yodels and grunts. For example, the", - "text": ", including whistles, cooing, yodels and grunts. For example, the" + "orig": ", including whistles, cooing, yodels and grunts. For example, the ", + "text": ", including whistles, cooing, yodels and grunts. For example, the " }, { "self_ref": "#/texts/577", @@ -14722,8 +14722,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "scaup", - "text": "scaup", + "orig": "scaup ", + "text": "scaup ", "hyperlink": "/wiki/Scaup" }, { @@ -14735,8 +14735,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "- which are", - "text": "- which are" + "orig": "- which are ", + "text": "- which are " }, { "self_ref": "#/texts/579", @@ -14747,8 +14747,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "diving ducks", - "text": "diving ducks", + "orig": "diving ducks ", + "text": "diving ducks ", "hyperlink": "/wiki/Diving_duck" }, { @@ -14772,8 +14772,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A common", - "text": "A common" + "orig": "A common ", + "text": "A common " }, { "self_ref": "#/texts/582", @@ -14784,8 +14784,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "urban legend", - "text": "urban legend", + "orig": "urban legend ", + "text": "urban legend ", "hyperlink": "/wiki/Urban_legend" }, { @@ -14797,8 +14797,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the", - "text": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the" + "orig": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the ", + "text": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the " }, { "self_ref": "#/texts/584", @@ -14809,8 +14809,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "University of Salford", - "text": "University of Salford", + "orig": "University of Salford ", + "text": "University of Salford ", "hyperlink": "/wiki/University_of_Salford" }, { @@ -14822,8 +14822,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in 2003 as part of the", - "text": "in 2003 as part of the" + "orig": "in 2003 as part of the ", + "text": "in 2003 as part of the " }, { "self_ref": "#/texts/586", @@ -14859,8 +14859,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 31 ]", - "text": "[ 31 ]", + "orig": "[31] ", + "text": "[31] ", "formatting": { "bold": false, "italic": false, @@ -14879,8 +14879,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "It was also debunked in", - "text": "It was also debunked in" + "orig": "It was also debunked in ", + "text": "It was also debunked in " }, { "self_ref": "#/texts/590", @@ -14891,8 +14891,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "one of the earlier episodes", - "text": "one of the earlier episodes", + "orig": "one of the earlier episodes ", + "text": "one of the earlier episodes ", "hyperlink": "/wiki/MythBusters_(2003_season)#Does_a_Duck's_Quack_Echo?" }, { @@ -14904,8 +14904,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of the popular Discovery Channel television show", - "text": "of the popular Discovery Channel television show" + "orig": "of the popular Discovery Channel television show ", + "text": "of the popular Discovery Channel television show " }, { "self_ref": "#/texts/592", @@ -14948,8 +14948,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 32 ]", - "text": "[ 32 ]", + "orig": "[32]", + "text": "[32]", "formatting": { "bold": false, "italic": false, @@ -15004,8 +15004,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like", - "text": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like" + "orig": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like ", + "text": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like " }, { "self_ref": "#/texts/598", @@ -15029,8 +15029,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/600", @@ -15054,8 +15054,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", predatory", - "text": ", predatory" + "orig": ", predatory ", + "text": ", predatory " }, { "self_ref": "#/texts/602", @@ -15066,8 +15066,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "testudines", - "text": "testudines", + "orig": "testudines ", + "text": "testudines ", "hyperlink": "/wiki/Testudines" }, { @@ -15079,8 +15079,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "such as the", - "text": "such as the" + "orig": "such as the ", + "text": "such as the " }, { "self_ref": "#/texts/604", @@ -15104,8 +15104,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and other aquatic hunters, including fish-eating birds such as", - "text": ", and other aquatic hunters, including fish-eating birds such as" + "orig": ", and other aquatic hunters, including fish-eating birds such as ", + "text": ", and other aquatic hunters, including fish-eating birds such as " }, { "self_ref": "#/texts/606", @@ -15129,8 +15129,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as", - "text": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as" + "orig": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as ", + "text": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as " }, { "self_ref": "#/texts/608", @@ -15154,8 +15154,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", or large birds, such as", - "text": ", or large birds, such as" + "orig": ", or large birds, such as ", + "text": ", or large birds, such as " }, { "self_ref": "#/texts/610", @@ -15166,8 +15166,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "hawks", - "text": "hawks", + "orig": "hawks ", + "text": "hawks ", "hyperlink": "/wiki/Hawk" }, { @@ -15179,8 +15179,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or", - "text": "or" + "orig": "or ", + "text": "or " }, { "self_ref": "#/texts/612", @@ -15216,8 +15216,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American", - "text": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American" + "orig": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American ", + "text": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American " }, { "self_ref": "#/texts/615", @@ -15228,8 +15228,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "muskie", - "text": "muskie", + "orig": "muskie ", + "text": "muskie ", "hyperlink": "/wiki/Muskellunge" }, { @@ -15241,8 +15241,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the European", - "text": "and the European" + "orig": "and the European ", + "text": "and the European " }, { "self_ref": "#/texts/617", @@ -15266,8 +15266,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". In flight, ducks are safe from all but a few predators such as humans and the", - "text": ". In flight, ducks are safe from all but a few predators such as humans and the" + "orig": ". In flight, ducks are safe from all but a few predators such as humans and the ", + "text": ". In flight, ducks are safe from all but a few predators such as humans and the " }, { "self_ref": "#/texts/619", @@ -15352,8 +15352,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Main article:", - "text": "Main article:" + "orig": "Main article: ", + "text": "Main article: " }, { "self_ref": "#/texts/624", @@ -15377,8 +15377,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Humans have hunted ducks since prehistoric times. Excavations of", - "text": "Humans have hunted ducks since prehistoric times. Excavations of" + "orig": "Humans have hunted ducks since prehistoric times. Excavations of ", + "text": "Humans have hunted ducks since prehistoric times. Excavations of " }, { "self_ref": "#/texts/626", @@ -15389,8 +15389,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "middens", - "text": "middens", + "orig": "middens ", + "text": "middens ", "hyperlink": "/wiki/Midden" }, { @@ -15402,8 +15402,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in California dating to 7800 - 6400", - "text": "in California dating to 7800 - 6400" + "orig": "in California dating to 7800 - 6400 ", + "text": "in California dating to 7800 - 6400 " }, { "self_ref": "#/texts/628", @@ -15414,8 +15414,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "BP", - "text": "BP", + "orig": "BP ", + "text": "BP ", "hyperlink": "/wiki/Before_present" }, { @@ -15439,8 +15439,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 33 ]", - "text": "[ 33 ]", + "orig": "[33] ", + "text": "[33] ", "formatting": { "bold": false, "italic": false, @@ -15459,8 +15459,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks were captured in \"significant numbers\" by", - "text": "Ducks were captured in \"significant numbers\" by" + "orig": "Ducks were captured in \"significant numbers\" by ", + "text": "Ducks were captured in \"significant numbers\" by " }, { "self_ref": "#/texts/632", @@ -15471,8 +15471,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Holocene", - "text": "Holocene", + "orig": "Holocene ", + "text": "Holocene ", "hyperlink": "/wiki/Holocene" }, { @@ -15484,8 +15484,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "inhabitants of the lower", - "text": "inhabitants of the lower" + "orig": "inhabitants of the lower ", + "text": "inhabitants of the lower " }, { "self_ref": "#/texts/634", @@ -15496,8 +15496,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ohio River", - "text": "Ohio River", + "orig": "Ohio River ", + "text": "Ohio River ", "hyperlink": "/wiki/Ohio_River" }, { @@ -15521,8 +15521,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 34 ]", - "text": "[ 34 ]", + "orig": "[34] ", + "text": "[34] ", "formatting": { "bold": false, "italic": false, @@ -15553,8 +15553,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 35 ]", - "text": "[ 35 ]", + "orig": "[35] ", + "text": "[35] ", "formatting": { "bold": false, "italic": false, @@ -15585,8 +15585,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 36 ]", - "text": "[ 36 ]", + "orig": "[36] ", + "text": "[36] ", "formatting": { "bold": false, "italic": false, @@ -15617,8 +15617,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 37 ]", - "text": "[ 37 ]", + "orig": "[37] ", + "text": "[37] ", "formatting": { "bold": false, "italic": false, @@ -15649,8 +15649,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 38 ]", - "text": "[ 38 ]", + "orig": "[38] ", + "text": "[38] ", "formatting": { "bold": false, "italic": false, @@ -15681,8 +15681,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 39 ]", - "text": "[ 39 ]", + "orig": "[39] ", + "text": "[39] ", "formatting": { "bold": false, "italic": false, @@ -15701,8 +15701,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archeological evidence shows that", - "text": "Archeological evidence shows that" + "orig": "Archeological evidence shows that ", + "text": "Archeological evidence shows that " }, { "self_ref": "#/texts/648", @@ -15713,8 +15713,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Māori people", - "text": "Māori people", + "orig": "Māori people ", + "text": "Māori people ", "hyperlink": "/wiki/M%C4%81ori_people" }, { @@ -15726,8 +15726,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in New Zealand hunted the flightless", - "text": "in New Zealand hunted the flightless" + "orig": "in New Zealand hunted the flightless ", + "text": "in New Zealand hunted the flightless " }, { "self_ref": "#/texts/650", @@ -15763,8 +15763,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 40 ]", - "text": "[ 40 ]", + "orig": "[40] ", + "text": "[40] ", "formatting": { "bold": false, "italic": false, @@ -15783,8 +15783,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A similar end awaited the", - "text": "A similar end awaited the" + "orig": "A similar end awaited the ", + "text": "A similar end awaited the " }, { "self_ref": "#/texts/654", @@ -15820,8 +15820,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 41 ]", - "text": "[ 41 ]", + "orig": "[41] ", + "text": "[41] ", "formatting": { "bold": false, "italic": false, @@ -15852,8 +15852,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 35 ]", - "text": "[ 35 ]", + "orig": "[35]", + "text": "[35]", "formatting": { "bold": false, "italic": false, @@ -15872,8 +15872,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 42 ]", - "text": "[ 42 ]", + "orig": "[42]", + "text": "[42]", "formatting": { "bold": false, "italic": false, @@ -15904,8 +15904,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 43 ]", - "text": "[ 43 ]", + "orig": "[43] ", + "text": "[43] ", "formatting": { "bold": false, "italic": false, @@ -15924,8 +15924,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by shooting, or by being trapped using", - "text": "by shooting, or by being trapped using" + "orig": "by shooting, or by being trapped using ", + "text": "by shooting, or by being trapped using " }, { "self_ref": "#/texts/663", @@ -15949,8 +15949,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be", - "text": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be" + "orig": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be ", + "text": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be " }, { "self_ref": "#/texts/665", @@ -15961,8 +15961,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "contaminated by pollutants", - "text": "contaminated by pollutants", + "orig": "contaminated by pollutants ", + "text": "contaminated by pollutants ", "hyperlink": "/wiki/Duck_(food)#Pollution" }, { @@ -15974,8 +15974,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "such as", - "text": "such as" + "orig": "such as ", + "text": "such as " }, { "self_ref": "#/texts/667", @@ -16011,8 +16011,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 44 ]", - "text": "[ 44 ]", + "orig": "[44]", + "text": "[44]", "formatting": { "bold": false, "italic": false, @@ -16054,8 +16054,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Main article:", - "text": "Main article:" + "orig": "Main article: ", + "text": "Main article: " }, { "self_ref": "#/texts/672", @@ -16079,8 +16079,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Indian Runner ducks , a common breed of domestic ducks", - "text": "Indian Runner ducks , a common breed of domestic ducks", + "orig": "Indian Runner ducks, a common breed of domestic ducks", + "text": "Indian Runner ducks, a common breed of domestic ducks", "hyperlink": "/wiki/Indian_Runner_duck" }, { @@ -16092,8 +16092,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their", - "text": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their" + "orig": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their ", + "text": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their " }, { "self_ref": "#/texts/675", @@ -16129,8 +16129,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 45 ]", - "text": "[ 45 ]", + "orig": "[45] ", + "text": "[45] ", "formatting": { "bold": false, "italic": false, @@ -16149,8 +16149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the", - "text": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the" + "orig": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the ", + "text": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the " }, { "self_ref": "#/texts/679", @@ -16161,8 +16161,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mallard", - "text": "mallard", + "orig": "mallard ", + "text": "mallard ", "hyperlink": "/wiki/Mallard" }, { @@ -16205,8 +16205,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "), apart from the", - "text": "), apart from the" + "orig": "), apart from the ", + "text": "), apart from the " }, { "self_ref": "#/texts/683", @@ -16217,8 +16217,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Muscovy duck", - "text": "Muscovy duck", + "orig": "Muscovy duck ", + "text": "Muscovy duck ", "hyperlink": "/wiki/Muscovy_duck" }, { @@ -16273,8 +16273,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 46 ]", - "text": "[ 46 ]", + "orig": "[46]", + "text": "[46]", "formatting": { "bold": false, "italic": false, @@ -16293,8 +16293,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 47 ]", - "text": "[ 47 ]", + "orig": "[47] ", + "text": "[47] ", "formatting": { "bold": false, "italic": false, @@ -16313,8 +16313,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/690", @@ -16325,8 +16325,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Call duck", - "text": "Call duck", + "orig": "Call duck ", + "text": "Call duck ", "hyperlink": "/wiki/Call_duck" }, { @@ -16350,8 +16350,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 48 ]", - "text": "[ 48 ]", + "orig": "[48]", + "text": "[48]", "formatting": { "bold": false, "italic": false, @@ -16390,8 +16390,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Three black-colored ducks in the coat of arms of Maaninka [ 49 ]", - "text": "Three black-colored ducks in the coat of arms of Maaninka [ 49 ]", + "orig": "Three black-colored ducks in the coat of arms of Maaninka[49]", + "text": "Three black-colored ducks in the coat of arms of Maaninka[49]", "formatting": { "bold": false, "italic": false, @@ -16410,8 +16410,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks appear on several", - "text": "Ducks appear on several" + "orig": "Ducks appear on several ", + "text": "Ducks appear on several " }, { "self_ref": "#/texts/696", @@ -16435,8 +16435,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", including the coat of arms of", - "text": ", including the coat of arms of" + "orig": ", including the coat of arms of ", + "text": ", including the coat of arms of " }, { "self_ref": "#/texts/698", @@ -16447,8 +16447,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Lubāna", - "text": "Lubāna", + "orig": "Lubāna ", + "text": "Lubāna ", "hyperlink": "/wiki/Lub%C4%81na" }, { @@ -16497,8 +16497,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 50 ]", - "text": "[ 50 ]", + "orig": "[50] ", + "text": "[50] ", "formatting": { "bold": false, "italic": false, @@ -16517,8 +16517,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the coat of arms of", - "text": "and the coat of arms of" + "orig": "and the coat of arms of ", + "text": "and the coat of arms of " }, { "self_ref": "#/texts/704", @@ -16529,8 +16529,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Föglö", - "text": "Föglö", + "orig": "Föglö ", + "text": "Föglö ", "hyperlink": "/wiki/F%C3%B6gl%C3%B6" }, { @@ -16579,8 +16579,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 51 ]", - "text": "[ 51 ]", + "orig": "[51]", + "text": "[51]", "formatting": { "bold": false, "italic": false, @@ -16619,8 +16619,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In 2002, psychologist", - "text": "In 2002, psychologist" + "orig": "In 2002, psychologist ", + "text": "In 2002, psychologist " }, { "self_ref": "#/texts/711", @@ -16631,8 +16631,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Richard Wiseman", - "text": "Richard Wiseman", + "orig": "Richard Wiseman ", + "text": "Richard Wiseman ", "hyperlink": "/wiki/Richard_Wiseman" }, { @@ -16644,8 +16644,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and colleagues at the", - "text": "and colleagues at the" + "orig": "and colleagues at the ", + "text": "and colleagues at the " }, { "self_ref": "#/texts/713", @@ -16669,8 +16669,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/715", @@ -16694,8 +16694,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", finished a year-long", - "text": ", finished a year-long" + "orig": ", finished a year-long ", + "text": ", finished a year-long " }, { "self_ref": "#/texts/717", @@ -16706,8 +16706,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "LaughLab", - "text": "LaughLab", + "orig": "LaughLab ", + "text": "LaughLab ", "hyperlink": "/wiki/LaughLab" }, { @@ -16731,8 +16731,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 52 ]", - "text": "[ 52 ]", + "orig": "[52] ", + "text": "[52] ", "formatting": { "bold": false, "italic": false, @@ -16751,8 +16751,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The word \"duck\" may have become an", - "text": "The word \"duck\" may have become an" + "orig": "The word \"duck\" may have become an ", + "text": "The word \"duck\" may have become an " }, { "self_ref": "#/texts/721", @@ -16763,8 +16763,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "inherently funny word", - "text": "inherently funny word", + "orig": "inherently funny word ", + "text": "inherently funny word ", "hyperlink": "/wiki/Inherently_funny_word" }, { @@ -16776,8 +16776,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many", - "text": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many" + "orig": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many ", + "text": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many " }, { "self_ref": "#/texts/723", @@ -16801,8 +16801,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", many are cartoon characters, such as", - "text": ", many are cartoon characters, such as" + "orig": ", many are cartoon characters, such as ", + "text": ", many are cartoon characters, such as " }, { "self_ref": "#/texts/725", @@ -16826,8 +16826,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'s", - "text": "'s" + "orig": "'s ", + "text": "'s " }, { "self_ref": "#/texts/727", @@ -16851,8 +16851,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and", - "text": ", and" + "orig": ", and ", + "text": ", and " }, { "self_ref": "#/texts/729", @@ -16876,8 +16876,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'", - "text": "'" + "orig": "' ", + "text": "' " }, { "self_ref": "#/texts/731", @@ -16901,8 +16901,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/733", @@ -16913,8 +16913,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Howard the Duck", - "text": "Howard the Duck", + "orig": "Howard the Duck ", + "text": "Howard the Duck ", "hyperlink": "/wiki/Howard_the_Duck" }, { @@ -16938,8 +16938,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 53 ]", - "text": "[ 53 ]", + "orig": "[53]", + "text": "[53]", "formatting": { "bold": false, "italic": false, @@ -16958,8 +16958,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 54 ]", - "text": "[ 54 ]", + "orig": "[54] ", + "text": "[54] ", "formatting": { "bold": false, "italic": false, @@ -16978,8 +16978,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and was made into a", - "text": "and was made into a" + "orig": "and was made into a ", + "text": "and was made into a " }, { "self_ref": "#/texts/738", @@ -16990,8 +16990,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "movie", - "text": "movie", + "orig": "movie ", + "text": "movie ", "hyperlink": "/wiki/Howard_the_Duck_(film)" }, { @@ -17015,8 +17015,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The 1992 Disney film", - "text": "The 1992 Disney film" + "orig": "The 1992 Disney film ", + "text": "The 1992 Disney film " }, { "self_ref": "#/texts/741", @@ -17047,8 +17047,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", starring", - "text": ", starring" + "orig": ", starring ", + "text": ", starring " }, { "self_ref": "#/texts/743", @@ -17072,8 +17072,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual", - "text": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual" + "orig": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual ", + "text": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual " }, { "self_ref": "#/texts/745", @@ -17084,8 +17084,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "National Hockey League", - "text": "National Hockey League", + "orig": "National Hockey League ", + "text": "National Hockey League ", "hyperlink": "/wiki/National_Hockey_League" }, { @@ -17097,8 +17097,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "professional team of the", - "text": "professional team of the" + "orig": "professional team of the ", + "text": "professional team of the " }, { "self_ref": "#/texts/747", @@ -17173,8 +17173,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "]", - "text": "]", + "orig": "] ", + "text": "] ", "formatting": { "bold": false, "italic": false, @@ -17192,8 +17192,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The duck is also the nickname of the", - "text": "The duck is also the nickname of the" + "orig": "The duck is also the nickname of the ", + "text": "The duck is also the nickname of the " }, { "self_ref": "#/texts/753", @@ -17204,8 +17204,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "University of Oregon", - "text": "University of Oregon", + "orig": "University of Oregon ", + "text": "University of Oregon ", "hyperlink": "/wiki/University_of_Oregon" }, { @@ -17217,8 +17217,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "sports teams as well as the", - "text": "sports teams as well as the" + "orig": "sports teams as well as the ", + "text": "sports teams as well as the " }, { "self_ref": "#/texts/755", @@ -17229,8 +17229,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Long Island Ducks", - "text": "Long Island Ducks", + "orig": "Long Island Ducks ", + "text": "Long Island Ducks ", "hyperlink": "/wiki/Long_Island_Ducks" }, { @@ -17242,8 +17242,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "minor league", - "text": "minor league" + "orig": "minor league ", + "text": "minor league " }, { "self_ref": "#/texts/757", @@ -17254,8 +17254,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "baseball", - "text": "baseball", + "orig": "baseball ", + "text": "baseball ", "hyperlink": "/wiki/Baseball" }, { @@ -17279,8 +17279,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 55 ]", - "text": "[ 55 ]", + "orig": "[55]", + "text": "[55]", "formatting": { "bold": false, "italic": false, @@ -17483,8 +17483,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17516,8 +17516,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/774", @@ -17547,8 +17547,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 .", - "text": ". Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 ." + "orig": ". Houghton Mifflin Company. 2006. Retrieved 2015-05-22.", + "text": ". Houghton Mifflin Company. 2006. Retrieved 2015-05-22." }, { "self_ref": "#/texts/776", @@ -17577,8 +17577,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17610,8 +17610,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/780", @@ -17641,8 +17641,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 .", - "text": ". K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 ." + "orig": ". K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22.", + "text": ". K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22." }, { "self_ref": "#/texts/782", @@ -17671,8 +17671,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17691,8 +17691,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dohner, Janet Vorwald (2001).", - "text": "Dohner, Janet Vorwald (2001)." + "orig": "Dohner, Janet Vorwald (2001). ", + "text": "Dohner, Janet Vorwald (2001). " }, { "self_ref": "#/texts/785", @@ -17723,8 +17723,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Yale University Press.", - "text": ". Yale University Press." + "orig": ". Yale University Press. ", + "text": ". Yale University Press. " }, { "self_ref": "#/texts/787", @@ -17735,8 +17735,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -17791,8 +17791,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17811,8 +17811,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Visca, Curt; Visca, Kelley (2003).", - "text": "Visca, Curt; Visca, Kelley (2003)." + "orig": "Visca, Curt; Visca, Kelley (2003). ", + "text": "Visca, Curt; Visca, Kelley (2003). " }, { "self_ref": "#/texts/793", @@ -17843,8 +17843,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The Rosen Publishing Group.", - "text": ". The Rosen Publishing Group." + "orig": ". The Rosen Publishing Group. ", + "text": ". The Rosen Publishing Group. " }, { "self_ref": "#/texts/795", @@ -17855,8 +17855,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -17911,8 +17911,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/800", @@ -17923,8 +17923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -17943,8 +17943,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -17963,8 +17963,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -17983,8 +17983,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18046,8 +18046,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18109,8 +18109,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18172,8 +18172,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18235,8 +18235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/820", @@ -18247,8 +18247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -18267,8 +18267,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -18287,8 +18287,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -18307,8 +18307,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18327,8 +18327,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "e", - "text": "e", + "orig": "e ", + "text": "e ", "formatting": { "bold": true, "italic": true, @@ -18347,8 +18347,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "f", - "text": "f", + "orig": "f ", + "text": "f ", "formatting": { "bold": true, "italic": true, @@ -18410,8 +18410,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18473,8 +18473,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18536,8 +18536,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18599,8 +18599,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18662,8 +18662,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18725,8 +18725,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/850", @@ -18737,8 +18737,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -18757,8 +18757,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -18777,8 +18777,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -18797,8 +18797,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18817,8 +18817,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "e", - "text": "e", + "orig": "e ", + "text": "e ", "formatting": { "bold": true, "italic": true, @@ -18837,8 +18837,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "f", - "text": "f", + "orig": "f ", + "text": "f ", "formatting": { "bold": true, "italic": true, @@ -18857,8 +18857,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "g", - "text": "g", + "orig": "g ", + "text": "g ", "formatting": { "bold": true, "italic": true, @@ -18920,8 +18920,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18983,8 +18983,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19046,8 +19046,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19109,8 +19109,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19172,8 +19172,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19235,8 +19235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/881", @@ -19247,8 +19247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -19267,8 +19267,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -19330,8 +19330,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19393,8 +19393,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19426,8 +19426,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/893", @@ -19457,8 +19457,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2018-04-27 .", - "text": ". Retrieved 2018-04-27 ." + "orig": ". Retrieved 2018-04-27.", + "text": ". Retrieved 2018-04-27." }, { "self_ref": "#/texts/895", @@ -19487,8 +19487,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19507,8 +19507,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ogden, Evans.", - "text": "Ogden, Evans." + "orig": "Ogden, Evans. ", + "text": "Ogden, Evans. " }, { "self_ref": "#/texts/898", @@ -19532,8 +19532,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". CWE . Retrieved 2006-11-02 .", - "text": ". CWE . Retrieved 2006-11-02 ." + "orig": ". CWE. Retrieved 2006-11-02.", + "text": ". CWE. Retrieved 2006-11-02." }, { "self_ref": "#/texts/900", @@ -19562,8 +19562,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19582,8 +19582,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Karl Mathiesen (16 March 2015).", - "text": "Karl Mathiesen (16 March 2015)." + "orig": "Karl Mathiesen (16 March 2015). ", + "text": "Karl Mathiesen (16 March 2015). " }, { "self_ref": "#/texts/903", @@ -19607,8 +19607,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/905", @@ -19638,8 +19638,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 13 November 2016 .", - "text": ". Retrieved 13 November 2016 ." + "orig": ". Retrieved 13 November 2016.", + "text": ". Retrieved 13 November 2016." }, { "self_ref": "#/texts/907", @@ -19668,8 +19668,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19688,8 +19688,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\".", - "text": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\"." + "orig": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\". ", + "text": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\". " }, { "self_ref": "#/texts/910", @@ -19719,8 +19719,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". pp. 187-221.", - "text": ". pp. 187-221." + "orig": ". pp. 187-221. ", + "text": ". pp. 187-221. " }, { "self_ref": "#/texts/912", @@ -19769,8 +19769,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/916", @@ -19781,8 +19781,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -19837,8 +19837,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19857,8 +19857,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000).", - "text": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000)." + "orig": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ", + "text": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). " }, { "self_ref": "#/texts/922", @@ -19882,8 +19882,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/924", @@ -19913,8 +19913,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/926", @@ -19925,8 +19925,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "102", - "text": "102", + "orig": "102 ", + "text": "102 ", "formatting": { "bold": true, "italic": false, @@ -19944,8 +19944,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(1): 201-205.", - "text": "(1): 201-205." + "orig": "(1): 201-205. ", + "text": "(1): 201-205. " }, { "self_ref": "#/texts/928", @@ -19994,8 +19994,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/932", @@ -20074,8 +20074,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20107,8 +20107,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/940", @@ -20138,8 +20138,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Archived from", - "text": ". Archived from" + "orig": ". Archived from ", + "text": ". Archived from " }, { "self_ref": "#/texts/942", @@ -20150,8 +20150,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "the original", - "text": "the original", + "orig": "the original ", + "text": "the original ", "hyperlink": "https://wildliferehabber.com/content/if-you-find-duckling" }, { @@ -20163,8 +20163,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on 2018-09-23 . Retrieved 2018-12-22 .", - "text": "on 2018-09-23 . Retrieved 2018-12-22 ." + "orig": "on 2018-09-23. Retrieved 2018-12-22.", + "text": "on 2018-09-23. Retrieved 2018-12-22." }, { "self_ref": "#/texts/944", @@ -20193,8 +20193,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20213,8 +20213,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Carver, Heather (2011).", - "text": "Carver, Heather (2011)." + "orig": "Carver, Heather (2011). ", + "text": "Carver, Heather (2011). " }, { "self_ref": "#/texts/947", @@ -20245,8 +20245,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Lulu.com.", - "text": ". Lulu.com." + "orig": ". Lulu.com. ", + "text": ". Lulu.com. " }, { "self_ref": "#/texts/949", @@ -20257,8 +20257,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -20371,8 +20371,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20391,8 +20391,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Titlow, Budd (2013-09-03).", - "text": "Titlow, Budd (2013-09-03)." + "orig": "Titlow, Budd (2013-09-03). ", + "text": "Titlow, Budd (2013-09-03). " }, { "self_ref": "#/texts/958", @@ -20423,8 +20423,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Rowman & Littlefield.", - "text": ". Rowman & Littlefield." + "orig": ". Rowman & Littlefield. ", + "text": ". Rowman & Littlefield. " }, { "self_ref": "#/texts/960", @@ -20435,8 +20435,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -20491,8 +20491,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20511,8 +20511,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Amos, Jonathan (2003-09-08).", - "text": "Amos, Jonathan (2003-09-08)." + "orig": "Amos, Jonathan (2003-09-08). ", + "text": "Amos, Jonathan (2003-09-08). " }, { "self_ref": "#/texts/966", @@ -20536,8 +20536,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/968", @@ -20567,8 +20567,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2006-11-02 .", - "text": ". Retrieved 2006-11-02 ." + "orig": ". Retrieved 2006-11-02.", + "text": ". Retrieved 2006-11-02." }, { "self_ref": "#/texts/970", @@ -20597,8 +20597,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20660,8 +20660,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20723,8 +20723,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20786,8 +20786,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/984", @@ -20798,8 +20798,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -20818,8 +20818,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -20881,8 +20881,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20944,8 +20944,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21007,8 +21007,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21070,8 +21070,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21133,8 +21133,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21196,8 +21196,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21259,8 +21259,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21322,8 +21322,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21342,8 +21342,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Livingston, A. D. (1998-01-01).", - "text": "Livingston, A. D. (1998-01-01)." + "orig": "Livingston, A. D. (1998-01-01). ", + "text": "Livingston, A. D. (1998-01-01). " }, { "self_ref": "#/texts/1019", @@ -21374,8 +21374,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Wordsworth Editions, Limited.", - "text": ". Wordsworth Editions, Limited." + "orig": ". Wordsworth Editions, Limited. ", + "text": ". Wordsworth Editions, Limited. " }, { "self_ref": "#/texts/1021", @@ -21386,8 +21386,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -21442,8 +21442,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21462,8 +21462,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\"", - "text": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\"", + "orig": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\" ", + "text": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\" ", "hyperlink": "https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf" }, { @@ -21475,8 +21475,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1028", @@ -21506,8 +21506,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". US Department of Commerce. December 2008. p. 3.", - "text": ". US Department of Commerce. December 2008. p. 3." + "orig": ". US Department of Commerce. December 2008. p. 3. ", + "text": ". US Department of Commerce. December 2008. p. 3. " }, { "self_ref": "#/texts/1030", @@ -21518,8 +21518,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf" }, { @@ -21531,8 +21531,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 .", - "text": "(PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 ." + "orig": "(PDF) from the original on 2022-10-09. Retrieved 2 July 2019.", + "text": "(PDF) from the original on 2022-10-09. Retrieved 2 July 2019." }, { "self_ref": "#/texts/1032", @@ -21561,8 +21561,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21594,8 +21594,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1036", @@ -21625,8 +21625,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2019-10-25 .", - "text": ". Retrieved 2019-10-25 ." + "orig": ". Retrieved 2019-10-25.", + "text": ". Retrieved 2019-10-25." }, { "self_ref": "#/texts/1038", @@ -21655,8 +21655,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21688,8 +21688,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Digimorph.org . Retrieved 2012-12-23 .", - "text": ". Digimorph.org . Retrieved 2012-12-23 ." + "orig": ". Digimorph.org. Retrieved 2012-12-23.", + "text": ". Digimorph.org. Retrieved 2012-12-23." }, { "self_ref": "#/texts/1042", @@ -21718,8 +21718,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21738,8 +21738,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sy Montgomery.", - "text": "Sy Montgomery." + "orig": "Sy Montgomery. ", + "text": "Sy Montgomery. " }, { "self_ref": "#/texts/1045", @@ -21763,8 +21763,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1047", @@ -21794,8 +21794,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2012-12-23 .", - "text": ". Retrieved 2012-12-23 ." + "orig": ". Retrieved 2012-12-23.", + "text": ". Retrieved 2012-12-23." }, { "self_ref": "#/texts/1049", @@ -21824,8 +21824,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21844,8 +21844,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Glenday, Craig (2014).", - "text": "Glenday, Craig (2014)." + "orig": "Glenday, Craig (2014). ", + "text": "Glenday, Craig (2014). " }, { "self_ref": "#/texts/1052", @@ -21876,8 +21876,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Guinness World Records Limited. pp.", - "text": ". Guinness World Records Limited. pp." + "orig": ". Guinness World Records Limited. pp. ", + "text": ". Guinness World Records Limited. pp. " }, { "self_ref": "#/texts/1054", @@ -21901,8 +21901,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1056", @@ -21913,8 +21913,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -21969,8 +21969,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21989,8 +21989,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Suomen kunnallisvaakunat", - "text": "Suomen kunnallisvaakunat", + "orig": "Suomen kunnallisvaakunat ", + "text": "Suomen kunnallisvaakunat ", "formatting": { "bold": false, "italic": true, @@ -22008,8 +22008,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147.", - "text": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147." + "orig": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147. ", + "text": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147. " }, { "self_ref": "#/texts/1063", @@ -22020,8 +22020,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22076,8 +22076,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22096,8 +22096,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Lubānas simbolika\"", - "text": "\"Lubānas simbolika\"", + "orig": "\"Lubānas simbolika\" ", + "text": "\"Lubānas simbolika\" ", "hyperlink": "http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2" }, { @@ -22109,8 +22109,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Latvian) . Retrieved September 9, 2021 .", - "text": "(in Latvian) . Retrieved September 9, 2021 ." + "orig": "(in Latvian). Retrieved September 9, 2021.", + "text": "(in Latvian). Retrieved September 9, 2021." }, { "self_ref": "#/texts/1070", @@ -22139,8 +22139,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22159,8 +22159,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Föglö\"", - "text": "\"Föglö\"", + "orig": "\"Föglö\" ", + "text": "\"Föglö\" ", "hyperlink": "http://digi.narc.fi/digi/view.ka?kuid=1738595" }, { @@ -22172,8 +22172,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Swedish) . Retrieved September 9, 2021 .", - "text": "(in Swedish) . Retrieved September 9, 2021 ." + "orig": "(in Swedish). Retrieved September 9, 2021.", + "text": "(in Swedish). Retrieved September 9, 2021." }, { "self_ref": "#/texts/1074", @@ -22202,8 +22202,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22222,8 +22222,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Young, Emma.", - "text": "Young, Emma." + "orig": "Young, Emma. ", + "text": "Young, Emma. " }, { "self_ref": "#/texts/1077", @@ -22247,8 +22247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1079", @@ -22278,8 +22278,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 7 January 2019 .", - "text": ". Retrieved 7 January 2019 ." + "orig": ". Retrieved 7 January 2019.", + "text": ". Retrieved 7 January 2019." }, { "self_ref": "#/texts/1081", @@ -22308,8 +22308,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22341,8 +22341,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1085", @@ -22403,8 +22403,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22436,8 +22436,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; Gilbert, Laura (2008). \"1970s\".", - "text": "; Gilbert, Laura (2008). \"1970s\"." + "orig": "; Gilbert, Laura (2008). \"1970s\". ", + "text": "; Gilbert, Laura (2008). \"1970s\". " }, { "self_ref": "#/texts/1091", @@ -22467,8 +22467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London, United Kingdom:", - "text": ". London, United Kingdom:" + "orig": ". London, United Kingdom: ", + "text": ". London, United Kingdom: " }, { "self_ref": "#/texts/1093", @@ -22492,8 +22492,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". p. 161.", - "text": ". p. 161." + "orig": ". p. 161. ", + "text": ". p. 161. " }, { "self_ref": "#/texts/1095", @@ -22504,8 +22504,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22560,8 +22560,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22593,8 +22593,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1102", @@ -22624,8 +22624,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2022-01-20 .", - "text": ". Retrieved 2022-01-20 ." + "orig": ". Retrieved 2022-01-20.", + "text": ". Retrieved 2022-01-20." }, { "self_ref": "#/texts/1104", @@ -22671,8 +22671,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "American Ornithologists' Union (1998).", - "text": "American Ornithologists' Union (1998)." + "orig": "American Ornithologists' Union (1998). ", + "text": "American Ornithologists' Union (1998). " }, { "self_ref": "#/texts/1107", @@ -22683,8 +22683,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Checklist of North American Birds", - "text": "Checklist of North American Birds", + "orig": "Checklist of North American Birds ", + "text": "Checklist of North American Birds ", "formatting": { "bold": false, "italic": true, @@ -22703,8 +22703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) . Washington, DC: American Ornithologists' Union.", - "text": "(PDF) . Washington, DC: American Ornithologists' Union." + "orig": "(PDF). Washington, DC: American Ornithologists' Union. ", + "text": "(PDF). Washington, DC: American Ornithologists' Union. " }, { "self_ref": "#/texts/1109", @@ -22715,8 +22715,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22741,8 +22741,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1112", @@ -22753,8 +22753,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf" }, { @@ -22796,8 +22796,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.).", - "text": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.)." + "orig": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). ", + "text": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). " }, { "self_ref": "#/texts/1116", @@ -22827,8 +22827,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions.", - "text": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions." + "orig": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. ", + "text": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. " }, { "self_ref": "#/texts/1118", @@ -22839,8 +22839,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22895,8 +22895,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Christidis, Les; Boles, Walter E., eds. (2008).", - "text": "Christidis, Les; Boles, Walter E., eds. (2008)." + "orig": "Christidis, Les; Boles, Walter E., eds. (2008). ", + "text": "Christidis, Les; Boles, Walter E., eds. (2008). " }, { "self_ref": "#/texts/1123", @@ -22926,8 +22926,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Collingwood, VIC: Csiro Publishing.", - "text": ". Collingwood, VIC: Csiro Publishing." + "orig": ". Collingwood, VIC: Csiro Publishing. ", + "text": ". Collingwood, VIC: Csiro Publishing. " }, { "self_ref": "#/texts/1125", @@ -22938,8 +22938,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22994,8 +22994,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\".", - "text": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\"." + "orig": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\". ", + "text": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\". " }, { "self_ref": "#/texts/1130", @@ -23025,8 +23025,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1132", @@ -23037,8 +23037,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "23", - "text": "23", + "orig": "23 ", + "text": "23 ", "formatting": { "bold": true, "italic": false, @@ -23056,8 +23056,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(3): 339-356.", - "text": "(3): 339-356." + "orig": "(3): 339-356. ", + "text": "(3): 339-356. " }, { "self_ref": "#/texts/1134", @@ -23106,8 +23106,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1138", @@ -23156,8 +23156,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1142", @@ -23168,8 +23168,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "PMID", - "text": "PMID", + "orig": "PMID ", + "text": "PMID ", "hyperlink": "/wiki/PMID_(identifier)" }, { @@ -23224,8 +23224,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001).", - "text": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001)." + "orig": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). ", + "text": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). " }, { "self_ref": "#/texts/1147", @@ -23255,8 +23255,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Christopher Helm.", - "text": ". London: Christopher Helm." + "orig": ". London: Christopher Helm. ", + "text": ". London: Christopher Helm. " }, { "self_ref": "#/texts/1149", @@ -23267,8 +23267,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23323,8 +23323,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Erlandson, Jon M. (1994).", - "text": "Erlandson, Jon M. (1994)." + "orig": "Erlandson, Jon M. (1994). ", + "text": "Erlandson, Jon M. (1994). " }, { "self_ref": "#/texts/1154", @@ -23355,8 +23355,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York, NY: Springer Science & Business Media.", - "text": ". New York, NY: Springer Science & Business Media." + "orig": ". New York, NY: Springer Science & Business Media. ", + "text": ". New York, NY: Springer Science & Business Media. " }, { "self_ref": "#/texts/1156", @@ -23367,8 +23367,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23423,8 +23423,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fieldhouse, Paul (2002).", - "text": "Fieldhouse, Paul (2002)." + "orig": "Fieldhouse, Paul (2002). ", + "text": "Fieldhouse, Paul (2002). " }, { "self_ref": "#/texts/1161", @@ -23455,8 +23455,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Vol. I: A-K. Santa Barbara: ABC-CLIO.", - "text": ". Vol. I: A-K. Santa Barbara: ABC-CLIO." + "orig": ". Vol. I: A-K. Santa Barbara: ABC-CLIO. ", + "text": ". Vol. I: A-K. Santa Barbara: ABC-CLIO. " }, { "self_ref": "#/texts/1163", @@ -23467,8 +23467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23523,8 +23523,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000).", - "text": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000)." + "orig": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000). ", + "text": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000). " }, { "self_ref": "#/texts/1168", @@ -23554,8 +23554,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ: Princeton University Press.", - "text": ". Princeton, NJ: Princeton University Press." + "orig": ". Princeton, NJ: Princeton University Press. ", + "text": ". Princeton, NJ: Princeton University Press. " }, { "self_ref": "#/texts/1170", @@ -23566,8 +23566,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23622,8 +23622,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Higman, B. W. (2012).", - "text": "Higman, B. W. (2012)." + "orig": "Higman, B. W. (2012). ", + "text": "Higman, B. W. (2012). " }, { "self_ref": "#/texts/1175", @@ -23654,8 +23654,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Chichester, UK: John Wiley & Sons.", - "text": ". Chichester, UK: John Wiley & Sons." + "orig": ". Chichester, UK: John Wiley & Sons. ", + "text": ". Chichester, UK: John Wiley & Sons. " }, { "self_ref": "#/texts/1177", @@ -23666,8 +23666,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23722,8 +23722,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Hume, Julian H. (2012).", - "text": "Hume, Julian H. (2012)." + "orig": "Hume, Julian H. (2012). ", + "text": "Hume, Julian H. (2012). " }, { "self_ref": "#/texts/1182", @@ -23754,8 +23754,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Christopher Helm.", - "text": ". London: Christopher Helm." + "orig": ". London: Christopher Helm. ", + "text": ". London: Christopher Helm. " }, { "self_ref": "#/texts/1184", @@ -23766,8 +23766,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23822,8 +23822,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Jeffries, Richard (2008).", - "text": "Jeffries, Richard (2008)." + "orig": "Jeffries, Richard (2008). ", + "text": "Jeffries, Richard (2008). " }, { "self_ref": "#/texts/1189", @@ -23854,8 +23854,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Tuscaloosa: University of Alabama Press.", - "text": ". Tuscaloosa: University of Alabama Press." + "orig": ". Tuscaloosa: University of Alabama Press. ", + "text": ". Tuscaloosa: University of Alabama Press. " }, { "self_ref": "#/texts/1191", @@ -23866,8 +23866,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23922,8 +23922,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Kear, Janet, ed. (2005).", - "text": "Kear, Janet, ed. (2005)." + "orig": "Kear, Janet, ed. (2005). ", + "text": "Kear, Janet, ed. (2005). " }, { "self_ref": "#/texts/1196", @@ -23953,8 +23953,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Cairina", - "text": "Cairina" + "orig": "Cairina ", + "text": "Cairina " }, { "self_ref": "#/texts/1198", @@ -23965,8 +23965,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "to", - "text": "to", + "orig": "to ", + "text": "to ", "formatting": { "bold": false, "italic": true, @@ -24015,8 +24015,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Bird Families of the World. Oxford: Oxford University Press.", - "text": ". Bird Families of the World. Oxford: Oxford University Press." + "orig": ". Bird Families of the World. Oxford: Oxford University Press. ", + "text": ". Bird Families of the World. Oxford: Oxford University Press. " }, { "self_ref": "#/texts/1202", @@ -24027,8 +24027,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24083,8 +24083,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Livezey, Bradley C. (October 1986).", - "text": "Livezey, Bradley C. (October 1986)." + "orig": "Livezey, Bradley C. (October 1986). ", + "text": "Livezey, Bradley C. (October 1986). " }, { "self_ref": "#/texts/1207", @@ -24095,8 +24095,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\"", - "text": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\"", + "orig": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\" ", + "text": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\" ", "hyperlink": "https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf" }, { @@ -24108,8 +24108,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1209", @@ -24139,8 +24139,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1211", @@ -24151,8 +24151,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "103", - "text": "103", + "orig": "103 ", + "text": "103 ", "formatting": { "bold": true, "italic": false, @@ -24170,8 +24170,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(4): 737-754.", - "text": "(4): 737-754." + "orig": "(4): 737-754. ", + "text": "(4): 737-754. " }, { "self_ref": "#/texts/1213", @@ -24220,8 +24220,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1217", @@ -24232,8 +24232,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf" }, { @@ -24275,8 +24275,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988).", - "text": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988)." + "orig": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ", + "text": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). " }, { "self_ref": "#/texts/1221", @@ -24287,8 +24287,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\"", - "text": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\"", + "orig": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\" ", + "text": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\" ", "hyperlink": "https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf" }, { @@ -24300,8 +24300,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1223", @@ -24331,8 +24331,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1225", @@ -24343,8 +24343,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "105", - "text": "105", + "orig": "105 ", + "text": "105 ", "formatting": { "bold": true, "italic": false, @@ -24362,8 +24362,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(3): 452-459.", - "text": "(3): 452-459." + "orig": "(3): 452-459. ", + "text": "(3): 452-459. " }, { "self_ref": "#/texts/1227", @@ -24412,8 +24412,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1231", @@ -24424,8 +24424,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf" }, { @@ -24467,8 +24467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Maisels, Charles Keith (1999).", - "text": "Maisels, Charles Keith (1999)." + "orig": "Maisels, Charles Keith (1999). ", + "text": "Maisels, Charles Keith (1999). " }, { "self_ref": "#/texts/1235", @@ -24499,8 +24499,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Routledge.", - "text": ". London: Routledge." + "orig": ". London: Routledge. ", + "text": ". London: Routledge. " }, { "self_ref": "#/texts/1237", @@ -24511,8 +24511,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24567,8 +24567,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987).", - "text": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987)." + "orig": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). ", + "text": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). " }, { "self_ref": "#/texts/1242", @@ -24598,8 +24598,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ: Princeton University Press.", - "text": ". Princeton, NJ: Princeton University Press." + "orig": ". Princeton, NJ: Princeton University Press. ", + "text": ". Princeton, NJ: Princeton University Press. " }, { "self_ref": "#/texts/1244", @@ -24610,8 +24610,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24666,8 +24666,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Rau, Charles (1876).", - "text": "Rau, Charles (1876)." + "orig": "Rau, Charles (1876). ", + "text": "Rau, Charles (1876). " }, { "self_ref": "#/texts/1249", @@ -24698,8 +24698,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York: Harper & Brothers.", - "text": ". New York: Harper & Brothers." + "orig": ". New York: Harper & Brothers. ", + "text": ". New York: Harper & Brothers. " }, { "self_ref": "#/texts/1251", @@ -24710,8 +24710,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "LCCN", - "text": "LCCN", + "orig": "LCCN ", + "text": "LCCN ", "hyperlink": "/wiki/LCCN_(identifier)" }, { @@ -24766,8 +24766,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Shirihai, Hadoram (2008).", - "text": "Shirihai, Hadoram (2008)." + "orig": "Shirihai, Hadoram (2008). ", + "text": "Shirihai, Hadoram (2008). " }, { "self_ref": "#/texts/1256", @@ -24797,8 +24797,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ, US: Princeton University Press.", - "text": ". Princeton, NJ, US: Princeton University Press." + "orig": ". Princeton, NJ, US: Princeton University Press. ", + "text": ". Princeton, NJ, US: Princeton University Press. " }, { "self_ref": "#/texts/1258", @@ -24809,8 +24809,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24865,8 +24865,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sued-Badillo, Jalil (2003).", - "text": "Sued-Badillo, Jalil (2003)." + "orig": "Sued-Badillo, Jalil (2003). ", + "text": "Sued-Badillo, Jalil (2003). " }, { "self_ref": "#/texts/1263", @@ -24897,8 +24897,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". General History of the Caribbean. Paris: UNESCO.", - "text": ". General History of the Caribbean. Paris: UNESCO." + "orig": ". General History of the Caribbean. Paris: UNESCO. ", + "text": ". General History of the Caribbean. Paris: UNESCO. " }, { "self_ref": "#/texts/1265", @@ -24909,8 +24909,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24965,8 +24965,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Thorpe, I. J. (1996).", - "text": "Thorpe, I. J. (1996)." + "orig": "Thorpe, I. J. (1996). ", + "text": "Thorpe, I. J. (1996). " }, { "self_ref": "#/texts/1270", @@ -24997,8 +24997,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York: Routledge.", - "text": ". New York: Routledge." + "orig": ". New York: Routledge. ", + "text": ". New York: Routledge. " }, { "self_ref": "#/texts/1272", @@ -25009,8 +25009,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -25094,8 +25094,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Duck", - "text": "Duck", + "orig": "Duck ", + "text": "Duck ", "formatting": { "bold": true, "italic": false, @@ -25113,8 +25113,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "at Wikipedia's", - "text": "at Wikipedia's" + "orig": "at Wikipedia's ", + "text": "at Wikipedia's " }, { "self_ref": "#/texts/1278", @@ -25159,8 +25159,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Definitions", - "text": "Definitions", + "orig": "Definitions ", + "text": "Definitions ", "hyperlink": "https://en.wiktionary.org/wiki/duck" }, { @@ -25205,8 +25205,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Media", - "text": "Media", + "orig": "Media ", + "text": "Media ", "hyperlink": "https://commons.wikimedia.org/wiki/Anatidae" }, { @@ -25251,8 +25251,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Quotations", - "text": "Quotations", + "orig": "Quotations ", + "text": "Quotations ", "hyperlink": "https://en.wikiquote.org/wiki/Birds" }, { @@ -25297,8 +25297,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Recipes", - "text": "Recipes", + "orig": "Recipes ", + "text": "Recipes ", "hyperlink": "https://en.wikibooks.org/wiki/Cookbook:Duck" }, { @@ -25343,8 +25343,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Taxa", - "text": "Taxa", + "orig": "Taxa ", + "text": "Taxa ", "hyperlink": "https://species.wikimedia.org/wiki/Anatidae" }, { @@ -25389,8 +25389,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Data", - "text": "Data", + "orig": "Data ", + "text": "Data ", "hyperlink": "https://www.wikidata.org/wiki/Q3736439" }, { @@ -25432,8 +25432,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "list of books", - "text": "list of books", + "orig": "list of books ", + "text": "list of books ", "hyperlink": "https://web.archive.org/web/20060613210555/http://seaducks.org/subjects/MIGRATION%20AND%20FLIGHT.htm" }, { @@ -25475,8 +25475,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks on postage stamps", - "text": "Ducks on postage stamps", + "orig": "Ducks on postage stamps ", + "text": "Ducks on postage stamps ", "hyperlink": "http://www.stampsbook.org/subject/Duck.html" }, { @@ -25488,8 +25488,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://web.archive.org/web/20130513022903/http://www.stampsbook.org/subject/Duck.html" }, { @@ -25501,8 +25501,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "2013-05-13 at the", - "text": "2013-05-13 at the" + "orig": "2013-05-13 at the ", + "text": "2013-05-13 at the " }, { "self_ref": "#/texts/1304", @@ -25544,8 +25544,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks at a Distance, by Rob Hines", - "text": "Ducks at a Distance, by Rob Hines", + "orig": "Ducks at a Distance, by Rob Hines ", + "text": "Ducks at a Distance, by Rob Hines ", "formatting": { "bold": false, "italic": true, @@ -25564,8 +25564,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "at", - "text": "at" + "orig": "at ", + "text": "at " }, { "self_ref": "#/texts/1308", @@ -25576,8 +25576,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Project Gutenberg", - "text": "Project Gutenberg", + "orig": "Project Gutenberg ", + "text": "Project Gutenberg ", "hyperlink": "/wiki/Project_Gutenberg" }, { @@ -26241,8 +26241,8 @@ "content_layer": "furniture", "label": "list_item", "prov": [], - "orig": "This page was last edited on 21 September 2024, at 12:11 (UTC) .", - "text": "This page was last edited on 21 September 2024, at 12:11 (UTC) .", + "orig": "This page was last edited on 21 September 2024, at 12:11 (UTC).", + "text": "This page was last edited on 21 September 2024, at 12:11 (UTC).", "enumerated": false, "marker": "" }, @@ -26273,8 +26273,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Text is available under the", - "text": "Text is available under the" + "orig": "Text is available under the ", + "text": "Text is available under the " }, { "self_ref": "#/texts/1357", @@ -26298,8 +26298,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "; additional terms may apply. By using this site, you agree to the", - "text": "; additional terms may apply. By using this site, you agree to the" + "orig": "; additional terms may apply. By using this site, you agree to the ", + "text": "; additional terms may apply. By using this site, you agree to the " }, { "self_ref": "#/texts/1359", @@ -26310,8 +26310,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Terms of Use", - "text": "Terms of Use", + "orig": "Terms of Use ", + "text": "Terms of Use ", "hyperlink": "//foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" }, { @@ -26323,8 +26323,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/1361", @@ -26348,8 +26348,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": ". Wikipedia® is a registered trademark of the", - "text": ". Wikipedia® is a registered trademark of the" + "orig": ". Wikipedia® is a registered trademark of the ", + "text": ". Wikipedia® is a registered trademark of the " }, { "self_ref": "#/texts/1363", diff --git a/tests/data/html/groundtruth/wiki_duck.html.md b/tests/data/html/groundtruth/wiki_duck.html.md index 26d45654a8..d49b6264eb 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.md +++ b/tests/data/html/groundtruth/wiki_duck.html.md @@ -228,16 +228,16 @@ Page semi-protected From Wikipedia, the free encyclopedia -(Redirected from [Duckling](/w/index.php?title=Duckling&redirect=no) ) +(Redirected from [Duckling](/w/index.php?title=Duckling&redirect=no)) -This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duck_as_food) . For other uses, see [Duck (disambiguation)](/wiki/Duck_(disambiguation)) . +This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duck_as_food). For other uses, see [Duck (disambiguation)](/wiki/Duck_(disambiguation)). -"Duckling" redirects here. For other uses, see [Duckling (disambiguation)](/wiki/Duckling_(disambiguation)) . +"Duckling" redirects here. For other uses, see [Duckling (disambiguation)](/wiki/Duckling_(disambiguation)). | Duck | Duck | | - | - | | | | -| [Bufflehead](/wiki/Bufflehead) ( *Bucephala albeola* ) | | +| [Bufflehead](/wiki/Bufflehead) (*Bucephala albeola*) | | | [Scientific classification](/wiki/Taxonomy_(biology)) Edit this classification | | | Domain: | [Eukaryota](/wiki/Eukaryote) | | Kingdom: | [Animalia](/wiki/Animal) | @@ -249,43 +249,43 @@ This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duc | Subfamilies | Subfamilies | | See text | See text | -**Duck** is the common name for numerous species of [waterfowl](/wiki/Waterfowl) in the [family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae) . Ducks are generally smaller and shorter-necked than [swans](/wiki/Swan) and [geese](/wiki/Goose) , which are members of the same family. Divided among several subfamilies, they are a [form taxon](/wiki/Form_taxon) ; they do not represent a [monophyletic group](/wiki/Monophyletic_group) (the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly [aquatic birds](/wiki/Aquatic_bird) , and may be found in both fresh water and sea water. +**Duck** is the common name for numerous species of [waterfowl](/wiki/Waterfowl) in the [family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae). Ducks are generally smaller and shorter-necked than [swans](/wiki/Swan) and [geese](/wiki/Goose), which are members of the same family. Divided among several subfamilies, they are a [form taxon](/wiki/Form_taxon); they do not represent a [monophyletic group](/wiki/Monophyletic_group) (the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly [aquatic birds](/wiki/Aquatic_bird), and may be found in both fresh water and sea water. -Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as [loons](/wiki/Loon) or divers, [grebes](/wiki/Grebe) , [gallinules](/wiki/Gallinule) and [coots](/wiki/Coot) . +Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as [loons](/wiki/Loon) or divers, [grebes](/wiki/Grebe), [gallinules](/wiki/Gallinule) and [coots](/wiki/Coot). ## Etymology -The word *duck* comes from [Old English](/wiki/Old_English) *dūce* 'diver', a derivative of the verb * *dūcan* 'to duck, bend down low as if to get under something, or dive', because of the way many species in the [dabbling duck](/wiki/Dabbling_duck) group feed by upending; compare with [Dutch](/wiki/Dutch_language) *duiken* and [German](/wiki/German_language) *tauchen* 'to dive'. +The word *duck* comes from [Old English](/wiki/Old_English) *dūce* 'diver', a derivative of the verb **dūcan* 'to duck, bend down low as if to get under something, or dive', because of the way many species in the [dabbling duck](/wiki/Dabbling_duck) group feed by upending; compare with [Dutch](/wiki/Dutch_language) *duiken* and [German](/wiki/German_language) *tauchen* 'to dive'. Pacific black duck displaying the characteristic upending "duck" -This word replaced Old English *ened* / *ænid* 'duck', possibly to avoid confusion with other words, such as *ende* 'end' with similar forms. Other Germanic languages still have similar words for *duck* , for example, Dutch *eend* , German *Ente* and [Norwegian](/wiki/Norwegian_language) *and* . The word *ened* / *ænid* was inherited from [Proto-Indo-European](/wiki/Proto-Indo-European_language) ; [cf.](/wiki/Cf.) [Latin](/wiki/Latin) *anas* "duck", [Lithuanian](/wiki/Lithuanian_language) *ántis* 'duck', [Ancient Greek](/wiki/Ancient_Greek_language) νῆσσα / νῆττα ( *nēssa* / *nētta* ) 'duck', and [Sanskrit](/wiki/Sanskrit) *ātí* 'water bird', among others. +This word replaced Old English *ened* /*ænid* 'duck', possibly to avoid confusion with other words, such as *ende* 'end' with similar forms. Other Germanic languages still have similar words for *duck*, for example, Dutch *eend*, German *Ente* and [Norwegian](/wiki/Norwegian_language) *and*. The word *ened* /*ænid* was inherited from [Proto-Indo-European](/wiki/Proto-Indo-European_language); [cf.](/wiki/Cf.) [Latin](/wiki/Latin) *anas* "duck", [Lithuanian](/wiki/Lithuanian_language) *ántis* 'duck', [Ancient Greek](/wiki/Ancient_Greek_language) νῆσσα /νῆττα (*nēssa* /*nētta*) 'duck', and [Sanskrit](/wiki/Sanskrit) *ātí* 'water bird', among others. -A duckling is a young duck in downy plumage [[ 1 ]](#cite_note-1) or baby duck, [[ 2 ]](#cite_note-2) but in the food trade a young domestic duck which has just reached adult size and bulk and its meat is still fully tender, is sometimes labelled as a duckling. +A duckling is a young duck in downy plumage[[1]](#cite_note-1) or baby duck,[[2]](#cite_note-2) but in the food trade a young domestic duck which has just reached adult size and bulk and its meat is still fully tender, is sometimes labelled as a duckling. -A male is called a [drake](https://en.wiktionary.org/wiki/drake) and the female is called a duck, or in [ornithology](/wiki/Ornithology) a hen. [[ 3 ]](#cite_note-3) [[ 4 ]](#cite_note-4) +A male is called a [drake](https://en.wiktionary.org/wiki/drake) and the female is called a duck, or in [ornithology](/wiki/Ornithology) a hen.[[3]](#cite_note-3)[[4]](#cite_note-4) -Male mallard . +Male mallard. -Wood ducks . +Wood ducks. ## Taxonomy -All ducks belong to the [biological order](/wiki/Order_(biology)) [Anseriformes](/wiki/Anseriformes) , a group that contains the ducks, geese and swans, as well as the [screamers](/wiki/Screamer) , and the [magpie goose](/wiki/Magpie_goose) . [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) All except the screamers belong to the [biological family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae) . [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Within the family, ducks are split into a variety of subfamilies and 'tribes'. The number and composition of these subfamilies and tribes is the cause of considerable disagreement among taxonomists. [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Some base their decisions on [morphological characteristics](/wiki/Morphology_(biology)) , others on shared behaviours or genetic studies. [[ 6 ]](#cite_note-FOOTNOTELivezey1986737–738-6) [[ 7 ]](#cite_note-FOOTNOTEMadsenMcHughde_Kloet1988452-7) The number of suggested subfamilies containing ducks ranges from two to five. [[ 8 ]](#cite_note-FOOTNOTEDonne-GousséLaudetHänni2002353–354-8) [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The significant level of [hybridisation](/wiki/Hybrid_(biology)) that occurs among wild ducks complicates efforts to tease apart the relationships between various species. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) +All ducks belong to the [biological order](/wiki/Order_(biology)) [Anseriformes](/wiki/Anseriformes), a group that contains the ducks, geese and swans, as well as the [screamers](/wiki/Screamer), and the [magpie goose](/wiki/Magpie_goose).[[5]](#cite_note-FOOTNOTECarboneras1992536-5) All except the screamers belong to the [biological family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae).[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Within the family, ducks are split into a variety of subfamilies and 'tribes'. The number and composition of these subfamilies and tribes is the cause of considerable disagreement among taxonomists.[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Some base their decisions on [morphological characteristics](/wiki/Morphology_(biology)), others on shared behaviours or genetic studies.[[6]](#cite_note-FOOTNOTELivezey1986737–738-6)[[7]](#cite_note-FOOTNOTEMadsenMcHughde_Kloet1988452-7) The number of suggested subfamilies containing ducks ranges from two to five.[[8]](#cite_note-FOOTNOTEDonne-GousséLaudetHänni2002353–354-8)[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The significant level of [hybridisation](/wiki/Hybrid_(biology)) that occurs among wild ducks complicates efforts to tease apart the relationships between various species.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) Mallard landing in approach -In most modern classifications, the so-called 'true ducks' belong to the subfamily Anatinae, which is further split into a varying number of tribes. [[ 10 ]](#cite_note-FOOTNOTEElphickDunningSibley2001191-10) The largest of these, the Anatini, contains the 'dabbling' or 'river' ducks - named for their method of feeding primarily at the surface of fresh water. [[ 11 ]](#cite_note-FOOTNOTEKear2005448-11) The 'diving ducks', also named for their primary feeding method, make up the tribe Aythyini. [[ 12 ]](#cite_note-FOOTNOTEKear2005622–623-12) The 'sea ducks' of the tribe Mergini are diving ducks which specialise on fish and shellfish and spend a majority of their lives in saltwater. [[ 13 ]](#cite_note-FOOTNOTEKear2005686-13) The tribe Oxyurini contains the 'stifftails', diving ducks notable for their small size and stiff, upright tails. [[ 14 ]](#cite_note-FOOTNOTEElphickDunningSibley2001193-14) +In most modern classifications, the so-called 'true ducks' belong to the subfamily Anatinae, which is further split into a varying number of tribes.[[10]](#cite_note-FOOTNOTEElphickDunningSibley2001191-10) The largest of these, the Anatini, contains the 'dabbling' or 'river' ducks - named for their method of feeding primarily at the surface of fresh water.[[11]](#cite_note-FOOTNOTEKear2005448-11) The 'diving ducks', also named for their primary feeding method, make up the tribe Aythyini.[[12]](#cite_note-FOOTNOTEKear2005622–623-12) The 'sea ducks' of the tribe Mergini are diving ducks which specialise on fish and shellfish and spend a majority of their lives in saltwater.[[13]](#cite_note-FOOTNOTEKear2005686-13) The tribe Oxyurini contains the 'stifftails', diving ducks notable for their small size and stiff, upright tails.[[14]](#cite_note-FOOTNOTEElphickDunningSibley2001193-14) -A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The [whistling ducks](/wiki/Whistling_duck) are assigned either to a tribe (Dendrocygnini) in the subfamily Anatinae or the subfamily Anserinae, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae). [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) [[ 16 ]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998xix-16) The [freckled duck](/wiki/Freckled_duck) of Australia is either the sole member of the tribe Stictonettini in the subfamily Anserinae, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or in its own family, the Stictonettinae. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [shelducks](/wiki/Shelduck) make up the tribe Tadornini in the family Anserinae in some classifications, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) and their own subfamily, Tadorninae, in others, [[ 17 ]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998-17) while the [steamer ducks](/wiki/Steamer_duck) are either placed in the family Anserinae in the tribe Tachyerini [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or lumped with the shelducks in the tribe Tadorini. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [perching ducks](/wiki/Perching_duck) make up in the tribe Cairinini in the subfamily Anserinae in some classifications, while that tribe is eliminated in other classifications and its members assigned to the tribe Anatini. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [torrent duck](/wiki/Torrent_duck) is generally included in the subfamily Anserinae in the monotypic tribe Merganettini, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) but is sometimes included in the tribe Tadornini. [[ 18 ]](#cite_note-FOOTNOTECarboneras1992538-18) The [pink-eared duck](/wiki/Pink-eared_duck) is sometimes included as a true duck either in the tribe Anatini [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or the tribe Malacorhynchini, [[ 19 ]](#cite_note-FOOTNOTEChristidisBoles200862-19) and other times is included with the shelducks in the tribe Tadornini. [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) +A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The [whistling ducks](/wiki/Whistling_duck) are assigned either to a tribe (Dendrocygnini) in the subfamily Anatinae or the subfamily Anserinae,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae).[[9]](#cite_note-FOOTNOTECarboneras1992540-9)[[16]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998xix-16) The [freckled duck](/wiki/Freckled_duck) of Australia is either the sole member of the tribe Stictonettini in the subfamily Anserinae,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or in its own family, the Stictonettinae.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [shelducks](/wiki/Shelduck) make up the tribe Tadornini in the family Anserinae in some classifications,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) and their own subfamily, Tadorninae, in others,[[17]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998-17) while the [steamer ducks](/wiki/Steamer_duck) are either placed in the family Anserinae in the tribe Tachyerini[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or lumped with the shelducks in the tribe Tadorini.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [perching ducks](/wiki/Perching_duck) make up in the tribe Cairinini in the subfamily Anserinae in some classifications, while that tribe is eliminated in other classifications and its members assigned to the tribe Anatini.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [torrent duck](/wiki/Torrent_duck) is generally included in the subfamily Anserinae in the monotypic tribe Merganettini,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) but is sometimes included in the tribe Tadornini.[[18]](#cite_note-FOOTNOTECarboneras1992538-18) The [pink-eared duck](/wiki/Pink-eared_duck) is sometimes included as a true duck either in the tribe Anatini[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or the tribe Malacorhynchini,[[19]](#cite_note-FOOTNOTEChristidisBoles200862-19) and other times is included with the shelducks in the tribe Tadornini.[[15]](#cite_note-FOOTNOTECarboneras1992537-15) ## Morphology @@ -293,25 +293,25 @@ Male Mandarin duck -The overall [body plan](/wiki/Body_plan) of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The [bill](/wiki/Beak) is usually broad and contains serrated [pectens](/wiki/Pecten_(biology)) , which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the [flight](/wiki/Bird_flight) of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of [steamer duck](/wiki/Steamer_duck) are almost flightless, however. Many species of duck are temporarily flightless while [moulting](/wiki/Moult) ; they seek out protected habitat with good food supplies during this period. This moult typically precedes [migration](/wiki/Bird_migration) . +The overall [body plan](/wiki/Body_plan) of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The [bill](/wiki/Beak) is usually broad and contains serrated [pectens](/wiki/Pecten_(biology)), which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the [flight](/wiki/Bird_flight) of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of [steamer duck](/wiki/Steamer_duck) are almost flightless, however. Many species of duck are temporarily flightless while [moulting](/wiki/Moult); they seek out protected habitat with good food supplies during this period. This moult typically precedes [migration](/wiki/Bird_migration). -The drakes of northern species often have extravagant [plumage](/wiki/Plumage) , but that is [moulted](/wiki/Moult) in summer to give a more female-like appearance, the "eclipse" plumage. Southern resident species typically show less [sexual dimorphism](/wiki/Sexual_dimorphism) , although there are exceptions such as the [paradise shelduck](/wiki/Paradise_shelduck) of [New Zealand](/wiki/New_Zealand) , which is both strikingly sexually dimorphic and in which the female's plumage is brighter than that of the male. The plumage of juvenile birds generally resembles that of the female. Female ducks have evolved to have a corkscrew shaped vagina to prevent rape. +The drakes of northern species often have extravagant [plumage](/wiki/Plumage), but that is [moulted](/wiki/Moult) in summer to give a more female-like appearance, the "eclipse" plumage. Southern resident species typically show less [sexual dimorphism](/wiki/Sexual_dimorphism), although there are exceptions such as the [paradise shelduck](/wiki/Paradise_shelduck) of [New Zealand](/wiki/New_Zealand), which is both strikingly sexually dimorphic and in which the female's plumage is brighter than that of the male. The plumage of juvenile birds generally resembles that of the female. Female ducks have evolved to have a corkscrew shaped vagina to prevent rape. ## Distribution and habitat See also: [List of Anseriformes by population](/wiki/List_of_Anseriformes_by_population) -Flying steamer ducks in Ushuaia , Argentina +Flying steamer ducks in Ushuaia, Argentina -Ducks have a [cosmopolitan distribution](/wiki/Cosmopolitan_distribution) , and are found on every continent except Antarctica. [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Several species manage to live on subantarctic islands, including [South Georgia](/wiki/South_Georgia_and_the_South_Sandwich_Islands) and the [Auckland Islands](/wiki/Auckland_Islands) . [[ 20 ]](#cite_note-FOOTNOTEShirihai2008239,_245-20) Ducks have reached a number of isolated oceanic islands, including the [Hawaiian Islands](/wiki/Hawaiian_Islands) , [Micronesia](/wiki/Micronesia) and the [Galápagos Islands](/wiki/Gal%C3%A1pagos_Islands) , where they are often [vagrants](/wiki/Glossary_of_bird_terms#vagrants) and less often [residents](/wiki/Glossary_of_bird_terms#residents) . [[ 21 ]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) [[ 22 ]](#cite_note-FOOTNOTEFitterFitterHosking200052–3-22) A handful are [endemic](/wiki/Endemic) to such far-flung islands. [[ 21 ]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) +Ducks have a [cosmopolitan distribution](/wiki/Cosmopolitan_distribution), and are found on every continent except Antarctica.[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Several species manage to live on subantarctic islands, including [South Georgia](/wiki/South_Georgia_and_the_South_Sandwich_Islands) and the [Auckland Islands](/wiki/Auckland_Islands).[[20]](#cite_note-FOOTNOTEShirihai2008239,_245-20) Ducks have reached a number of isolated oceanic islands, including the [Hawaiian Islands](/wiki/Hawaiian_Islands), [Micronesia](/wiki/Micronesia) and the [Galápagos Islands](/wiki/Gal%C3%A1pagos_Islands), where they are often [vagrants](/wiki/Glossary_of_bird_terms#vagrants) and less often [residents](/wiki/Glossary_of_bird_terms#residents).[[21]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21)[[22]](#cite_note-FOOTNOTEFitterFitterHosking200052–3-22) A handful are [endemic](/wiki/Endemic) to such far-flung islands.[[21]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) -Female mallard in Cornwall , England +Female mallard in Cornwall, England -Some duck species, mainly those breeding in the temperate and Arctic Northern Hemisphere, are migratory; those in the tropics are generally not. Some ducks, particularly in Australia where rainfall is erratic, are nomadic, seeking out the temporary lakes and pools that form after localised heavy rain. [[ 23 ]](#cite_note-23) +Some duck species, mainly those breeding in the temperate and Arctic Northern Hemisphere, are migratory; those in the tropics are generally not. Some ducks, particularly in Australia where rainfall is erratic, are nomadic, seeking out the temporary lakes and pools that form after localised heavy rain.[[23]](#cite_note-23) ## Behaviour @@ -321,17 +321,17 @@ Pecten along the bill -Ducks eat food sources such as [grasses](/wiki/Poaceae) , aquatic plants, fish, insects, small amphibians, worms, and small [molluscs](/wiki/Mollusc) . +Ducks eat food sources such as [grasses](/wiki/Poaceae), aquatic plants, fish, insects, small amphibians, worms, and small [molluscs](/wiki/Mollusc). -[Dabbling ducks](/wiki/Dabbling_duck) feed on the surface of water or on land, or as deep as they can reach by up-ending without completely submerging. [[ 24 ]](#cite_note-24) Along the edge of the bill, there is a comb-like structure called a [pecten](/wiki/Pecten_(biology)) . This strains the water squirting from the side of the bill and traps any food. The pecten is also used to preen feathers and to hold slippery food items. +[Dabbling ducks](/wiki/Dabbling_duck) feed on the surface of water or on land, or as deep as they can reach by up-ending without completely submerging.[[24]](#cite_note-24) Along the edge of the bill, there is a comb-like structure called a [pecten](/wiki/Pecten_(biology)). This strains the water squirting from the side of the bill and traps any food. The pecten is also used to preen feathers and to hold slippery food items. [Diving ducks](/wiki/Diving_duck) and [sea ducks](/wiki/Sea_duck) forage deep underwater. To be able to submerge more easily, the diving ducks are heavier than dabbling ducks, and therefore have more difficulty taking off to fly. A few specialized species such as the [mergansers](/wiki/Merganser) are adapted to catch and swallow large fish. -The others have the characteristic wide flat bill adapted to [dredging](/wiki/Dredging) -type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no [cere](/wiki/Cere) , but the nostrils come out through hard horn. +The others have the characteristic wide flat bill adapted to [dredging](/wiki/Dredging)-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no [cere](/wiki/Cere), but the nostrils come out through hard horn. -[*The Guardian*](/wiki/The_Guardian) published an article advising that ducks should not be fed with bread because it [damages the health of the ducks](/wiki/Angel_wing) and pollutes waterways. [[ 25 ]](#cite_note-25) +[*The Guardian*](/wiki/The_Guardian) published an article advising that ducks should not be fed with bread because it [damages the health of the ducks](/wiki/Angel_wing) and pollutes waterways.[[25]](#cite_note-25) ### Breeding @@ -339,13 +339,13 @@ A Muscovy duckling -Ducks generally [only have one partner at a time](/wiki/Monogamy_in_animals) , although the partnership usually only lasts one year. [[ 26 ]](#cite_note-26) Larger species and the more sedentary species (like fast-river specialists) tend to have pair-bonds that last numerous years. [[ 27 ]](#cite_note-27) Most duck species breed once a year, choosing to do so in favourable conditions ( [spring](/wiki/Spring_(season)) /summer or wet seasons). Ducks also tend to make a [nest](/wiki/Bird_nest) before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed [courtyard](/wiki/Courtyard) ) or are not prospering due to genetic defects or sickness brought about by hypothermia, starvation, or disease. Ducklings can also be orphaned by inconsistent late hatching where a few eggs hatch after the mother has abandoned the nest and led her ducklings to water. [[ 28 ]](#cite_note-28) +Ducks generally [only have one partner at a time](/wiki/Monogamy_in_animals), although the partnership usually only lasts one year.[[26]](#cite_note-26) Larger species and the more sedentary species (like fast-river specialists) tend to have pair-bonds that last numerous years.[[27]](#cite_note-27) Most duck species breed once a year, choosing to do so in favourable conditions ([spring](/wiki/Spring_(season))/summer or wet seasons). Ducks also tend to make a [nest](/wiki/Bird_nest) before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed [courtyard](/wiki/Courtyard)) or are not prospering due to genetic defects or sickness brought about by hypothermia, starvation, or disease. Ducklings can also be orphaned by inconsistent late hatching where a few eggs hatch after the mother has abandoned the nest and led her ducklings to water.[[28]](#cite_note-28) ### Communication -Female [mallard](/wiki/Mallard) ducks (as well as several other species in the genus *Anas* , such as the [American](/wiki/American_black_duck) and [Pacific black ducks](/wiki/Pacific_black_duck) , [spot-billed duck](/wiki/Spot-billed_duck) , [northern pintail](/wiki/Northern_pintail) and [common teal](/wiki/Common_teal) ) make the classic "quack" sound while males make a similar but raspier sound that is sometimes written as "breeeeze", [[ 29 ]](#cite_note-29) [ [*self-published source?*](/wiki/Wikipedia:Verifiability#Self-published_sources) ] but, despite widespread misconceptions, most species of duck do not "quack". [[ 30 ]](#cite_note-30) In general, ducks make a range of [calls](/wiki/Bird_vocalisation) , including whistles, cooing, yodels and grunts. For example, the [scaup](/wiki/Scaup) - which are [diving ducks](/wiki/Diving_duck) - make a noise like "scaup" (hence their name). Calls may be loud displaying calls or quieter contact calls. +Female [mallard](/wiki/Mallard) ducks (as well as several other species in the genus *Anas*, such as the [American](/wiki/American_black_duck) and [Pacific black ducks](/wiki/Pacific_black_duck), [spot-billed duck](/wiki/Spot-billed_duck), [northern pintail](/wiki/Northern_pintail) and [common teal](/wiki/Common_teal)) make the classic "quack" sound while males make a similar but raspier sound that is sometimes written as "breeeeze",[[29]](#cite_note-29)[[*self-published source?*](/wiki/Wikipedia:Verifiability#Self-published_sources)] but, despite widespread misconceptions, most species of duck do not "quack".[[30]](#cite_note-30) In general, ducks make a range of [calls](/wiki/Bird_vocalisation), including whistles, cooing, yodels and grunts. For example, the [scaup](/wiki/Scaup) - which are [diving ducks](/wiki/Diving_duck) - make a noise like "scaup" (hence their name). Calls may be loud displaying calls or quieter contact calls. -A common [urban legend](/wiki/Urban_legend) claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the [University of Salford](/wiki/University_of_Salford) in 2003 as part of the [British Association](/wiki/British_Association) 's Festival of Science. [[ 31 ]](#cite_note-31) It was also debunked in [one of the earlier episodes](/wiki/MythBusters_(2003_season)#Does_a_Duck's_Quack_Echo?) of the popular Discovery Channel television show [*MythBusters*](/wiki/MythBusters) . [[ 32 ]](#cite_note-32) +A common [urban legend](/wiki/Urban_legend) claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the [University of Salford](/wiki/University_of_Salford) in 2003 as part of the [British Association](/wiki/British_Association)'s Festival of Science.[[31]](#cite_note-31) It was also debunked in [one of the earlier episodes](/wiki/MythBusters_(2003_season)#Does_a_Duck's_Quack_Echo?) of the popular Discovery Channel television show [*MythBusters*](/wiki/MythBusters).[[32]](#cite_note-32) ### Predators @@ -353,9 +353,9 @@ Ringed teal -Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like [pike](/wiki/Esox) , [crocodilians](/wiki/Crocodilia) , predatory [testudines](/wiki/Testudines) such as the [alligator snapping turtle](/wiki/Alligator_snapping_turtle) , and other aquatic hunters, including fish-eating birds such as [herons](/wiki/Heron) . Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as [foxes](/wiki/Fox) , or large birds, such as [hawks](/wiki/Hawk) or [owls](/wiki/Owl) . +Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like [pike](/wiki/Esox), [crocodilians](/wiki/Crocodilia), predatory [testudines](/wiki/Testudines) such as the [alligator snapping turtle](/wiki/Alligator_snapping_turtle), and other aquatic hunters, including fish-eating birds such as [herons](/wiki/Heron). Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as [foxes](/wiki/Fox), or large birds, such as [hawks](/wiki/Hawk) or [owls](/wiki/Owl). -Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American [muskie](/wiki/Muskellunge) and the European [pike](/wiki/Esox) . In flight, ducks are safe from all but a few predators such as humans and the [peregrine falcon](/wiki/Peregrine_falcon) , which uses its speed and strength to catch ducks. +Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American [muskie](/wiki/Muskellunge) and the European [pike](/wiki/Esox). In flight, ducks are safe from all but a few predators such as humans and the [peregrine falcon](/wiki/Peregrine_falcon), which uses its speed and strength to catch ducks. ## Relationship with humans @@ -363,33 +363,33 @@ Adult ducks are fast fliers, but may be caught on the water by large aquatic pre Main article: [Waterfowl hunting](/wiki/Waterfowl_hunting) -Humans have hunted ducks since prehistoric times. Excavations of [middens](/wiki/Midden) in California dating to 7800 - 6400 [BP](/wiki/Before_present) have turned up bones of ducks, including at least one now-extinct flightless species. [[ 33 ]](#cite_note-FOOTNOTEErlandson1994171-33) Ducks were captured in "significant numbers" by [Holocene](/wiki/Holocene) inhabitants of the lower [Ohio River](/wiki/Ohio_River) valley, suggesting they took advantage of the seasonal bounty provided by migrating waterfowl. [[ 34 ]](#cite_note-FOOTNOTEJeffries2008168,_243-34) Neolithic hunters in locations as far apart as the Caribbean, [[ 35 ]](#cite_note-FOOTNOTESued-Badillo200365-35) Scandinavia, [[ 36 ]](#cite_note-FOOTNOTEThorpe199668-36) Egypt, [[ 37 ]](#cite_note-FOOTNOTEMaisels199942-37) Switzerland, [[ 38 ]](#cite_note-FOOTNOTERau1876133-38) and China relied on ducks as a source of protein for some or all of the year. [[ 39 ]](#cite_note-FOOTNOTEHigman201223-39) Archeological evidence shows that [Māori people](/wiki/M%C4%81ori_people) in New Zealand hunted the flightless [Finsch's duck](/wiki/Finsch%27s_duck) , possibly to extinction, though rat predation may also have contributed to its fate. [[ 40 ]](#cite_note-FOOTNOTEHume201253-40) A similar end awaited the [Chatham duck](/wiki/Chatham_duck) , a species with reduced flying capabilities which went extinct shortly after its island was colonised by Polynesian settlers. [[ 41 ]](#cite_note-FOOTNOTEHume201252-41) It is probable that duck eggs were gathered by Neolithic hunter-gathers as well, though hard evidence of this is uncommon. [[ 35 ]](#cite_note-FOOTNOTESued-Badillo200365-35) [[ 42 ]](#cite_note-FOOTNOTEFieldhouse2002167-42) +Humans have hunted ducks since prehistoric times. Excavations of [middens](/wiki/Midden) in California dating to 7800 - 6400 [BP](/wiki/Before_present) have turned up bones of ducks, including at least one now-extinct flightless species.[[33]](#cite_note-FOOTNOTEErlandson1994171-33) Ducks were captured in "significant numbers" by [Holocene](/wiki/Holocene) inhabitants of the lower [Ohio River](/wiki/Ohio_River) valley, suggesting they took advantage of the seasonal bounty provided by migrating waterfowl.[[34]](#cite_note-FOOTNOTEJeffries2008168,_243-34) Neolithic hunters in locations as far apart as the Caribbean,[[35]](#cite_note-FOOTNOTESued-Badillo200365-35) Scandinavia,[[36]](#cite_note-FOOTNOTEThorpe199668-36) Egypt,[[37]](#cite_note-FOOTNOTEMaisels199942-37) Switzerland,[[38]](#cite_note-FOOTNOTERau1876133-38) and China relied on ducks as a source of protein for some or all of the year.[[39]](#cite_note-FOOTNOTEHigman201223-39) Archeological evidence shows that [Māori people](/wiki/M%C4%81ori_people) in New Zealand hunted the flightless [Finsch's duck](/wiki/Finsch%27s_duck), possibly to extinction, though rat predation may also have contributed to its fate.[[40]](#cite_note-FOOTNOTEHume201253-40) A similar end awaited the [Chatham duck](/wiki/Chatham_duck), a species with reduced flying capabilities which went extinct shortly after its island was colonised by Polynesian settlers.[[41]](#cite_note-FOOTNOTEHume201252-41) It is probable that duck eggs were gathered by Neolithic hunter-gathers as well, though hard evidence of this is uncommon.[[35]](#cite_note-FOOTNOTESued-Badillo200365-35)[[42]](#cite_note-FOOTNOTEFieldhouse2002167-42) -In many areas, wild ducks (including ducks farmed and released into the wild) are hunted for food or sport, [[ 43 ]](#cite_note-43) by shooting, or by being trapped using [duck decoys](/wiki/Duck_decoy_(structure)) . Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, "a sitting duck" has come to mean "an easy target". These ducks may be [contaminated by pollutants](/wiki/Duck_(food)#Pollution) such as [PCBs](/wiki/Polychlorinated_biphenyl) . [[ 44 ]](#cite_note-44) +In many areas, wild ducks (including ducks farmed and released into the wild) are hunted for food or sport,[[43]](#cite_note-43) by shooting, or by being trapped using [duck decoys](/wiki/Duck_decoy_(structure)). Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, "a sitting duck" has come to mean "an easy target". These ducks may be [contaminated by pollutants](/wiki/Duck_(food)#Pollution) such as [PCBs](/wiki/Polychlorinated_biphenyl).[[44]](#cite_note-44) ### Domestication Main article: [Domestic duck](/wiki/Domestic_duck) -Indian Runner ducks , a common breed of domestic ducks +Indian Runner ducks, a common breed of domestic ducks -Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their [down](/wiki/Down_feather) ). Approximately 3 billion ducks are slaughtered each year for meat worldwide. [[ 45 ]](#cite_note-45) They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the [mallard](/wiki/Mallard) ( *Anas platyrhynchos* ), apart from the [Muscovy duck](/wiki/Muscovy_duck) ( *Cairina moschata* ). [[ 46 ]](#cite_note-46) [[ 47 ]](#cite_note-47) The [Call duck](/wiki/Call_duck) is another example of a domestic duck breed. Its name comes from its original use established by hunters, as a decoy to attract wild mallards from the sky, into traps set for them on the ground. The call duck is the world's smallest domestic duck breed, as it weighs less than 1 kg (2.2 lb). [[ 48 ]](#cite_note-48) +Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their [down](/wiki/Down_feather)). Approximately 3 billion ducks are slaughtered each year for meat worldwide.[[45]](#cite_note-45) They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the [mallard](/wiki/Mallard) (*Anas platyrhynchos*), apart from the [Muscovy duck](/wiki/Muscovy_duck) (*Cairina moschata*).[[46]](#cite_note-46)[[47]](#cite_note-47) The [Call duck](/wiki/Call_duck) is another example of a domestic duck breed. Its name comes from its original use established by hunters, as a decoy to attract wild mallards from the sky, into traps set for them on the ground. The call duck is the world's smallest domestic duck breed, as it weighs less than 1 kg (2.2 lb).[[48]](#cite_note-48) ### Heraldry -Three black-colored ducks in the coat of arms of Maaninka [ 49 ] +Three black-colored ducks in the coat of arms of Maaninka[49] -Ducks appear on several [coats of arms](/wiki/Coats_of_arms) , including the coat of arms of [Lubāna](/wiki/Lub%C4%81na) ( [Latvia](/wiki/Latvia) ) [[ 50 ]](#cite_note-50) and the coat of arms of [Föglö](/wiki/F%C3%B6gl%C3%B6) ( [Åland](/wiki/%C3%85land) ). [[ 51 ]](#cite_note-51) +Ducks appear on several [coats of arms](/wiki/Coats_of_arms), including the coat of arms of [Lubāna](/wiki/Lub%C4%81na) ([Latvia](/wiki/Latvia))[[50]](#cite_note-50) and the coat of arms of [Föglö](/wiki/F%C3%B6gl%C3%B6) ([Åland](/wiki/%C3%85land)).[[51]](#cite_note-51) ### Cultural references -In 2002, psychologist [Richard Wiseman](/wiki/Richard_Wiseman) and colleagues at the [University of Hertfordshire](/wiki/University_of_Hertfordshire) , [UK](/wiki/UK) , finished a year-long [LaughLab](/wiki/LaughLab) experiment, concluding that of all animals, ducks attract the most humor and silliness; he said, "If you're going to tell a joke involving an animal, make it a duck." [[ 52 ]](#cite_note-52) The word "duck" may have become an [inherently funny word](/wiki/Inherently_funny_word) in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many [ducks in fiction](/wiki/List_of_fictional_ducks) , many are cartoon characters, such as [Walt Disney](/wiki/The_Walt_Disney_Company) 's [Donald Duck](/wiki/Donald_Duck) , and [Warner Bros.](/wiki/Warner_Bros.) ' [Daffy Duck](/wiki/Daffy_Duck) . [Howard the Duck](/wiki/Howard_the_Duck) started as a comic book character in 1973 [[ 53 ]](#cite_note-53) [[ 54 ]](#cite_note-54) and was made into a [movie](/wiki/Howard_the_Duck_(film)) in 1986. +In 2002, psychologist [Richard Wiseman](/wiki/Richard_Wiseman) and colleagues at the [University of Hertfordshire](/wiki/University_of_Hertfordshire), [UK](/wiki/UK), finished a year-long [LaughLab](/wiki/LaughLab) experiment, concluding that of all animals, ducks attract the most humor and silliness; he said, "If you're going to tell a joke involving an animal, make it a duck."[[52]](#cite_note-52) The word "duck" may have become an [inherently funny word](/wiki/Inherently_funny_word) in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many [ducks in fiction](/wiki/List_of_fictional_ducks), many are cartoon characters, such as [Walt Disney](/wiki/The_Walt_Disney_Company)'s [Donald Duck](/wiki/Donald_Duck), and [Warner Bros.](/wiki/Warner_Bros.)' [Daffy Duck](/wiki/Daffy_Duck). [Howard the Duck](/wiki/Howard_the_Duck) started as a comic book character in 1973[[53]](#cite_note-53)[[54]](#cite_note-54) and was made into a [movie](/wiki/Howard_the_Duck_(film)) in 1986. -The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starring [Emilio Estevez](/wiki/Emilio_Estevez) , chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual [National Hockey League](/wiki/National_Hockey_League) professional team of the [Anaheim Ducks](/wiki/Anaheim_Ducks) , who were founded with the name the Mighty Ducks of Anaheim. [ [*citation needed*](/wiki/Wikipedia:Citation_needed) ] The duck is also the nickname of the [University of Oregon](/wiki/University_of_Oregon) sports teams as well as the [Long Island Ducks](/wiki/Long_Island_Ducks) minor league [baseball](/wiki/Baseball) team. [[ 55 ]](#cite_note-55) +The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)), starring [Emilio Estevez](/wiki/Emilio_Estevez), chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual [National Hockey League](/wiki/National_Hockey_League) professional team of the [Anaheim Ducks](/wiki/Anaheim_Ducks), who were founded with the name the Mighty Ducks of Anaheim.[[*citation needed*](/wiki/Wikipedia:Citation_needed)] The duck is also the nickname of the [University of Oregon](/wiki/University_of_Oregon) sports teams as well as the [Long Island Ducks](/wiki/Long_Island_Ducks) minor league [baseball](/wiki/Baseball) team.[[55]](#cite_note-55) ## See also @@ -407,84 +407,84 @@ The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starr ### Citations -1. [**^**](#cite_ref-1) ["Duckling"](http://dictionary.reference.com/browse/duckling) . *The American Heritage Dictionary of the English Language, Fourth Edition* . Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 . -2. [**^**](#cite_ref-2) ["Duckling"](http://dictionary.reference.com/browse/duckling) . *Kernerman English Multilingual Dictionary (Beta Version)* . K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 . -3. [**^**](#cite_ref-3) Dohner, Janet Vorwald (2001). [*The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds*](https://books.google.com/books?id=WJCTL_mC5w4C&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck&pg=PA457) . Yale University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0300138139](/wiki/Special:BookSources/978-0300138139) . -4. [**^**](#cite_ref-4) Visca, Curt; Visca, Kelley (2003). [*How to Draw Cartoon Birds*](https://books.google.com/books?id=VqSquCLNrZcC&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck+%28or+hen%29&pg=PA16) . The Rosen Publishing Group. [ISBN](/wiki/ISBN_(identifier)) [9780823961566](/wiki/Special:BookSources/9780823961566) . -5. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992536_5-0) [***b***](#cite_ref-FOOTNOTECarboneras1992536_5-1) [***c***](#cite_ref-FOOTNOTECarboneras1992536_5-2) [***d***](#cite_ref-FOOTNOTECarboneras1992536_5-3) [Carboneras 1992](#CITEREFCarboneras1992) , p. 536. -6. [**^**](#cite_ref-FOOTNOTELivezey1986737–738_6-0) [Livezey 1986](#CITEREFLivezey1986) , pp. 737-738. -7. [**^**](#cite_ref-FOOTNOTEMadsenMcHughde_Kloet1988452_7-0) [Madsen, McHugh & de Kloet 1988](#CITEREFMadsenMcHughde_Kloet1988) , p. 452. -8. [**^**](#cite_ref-FOOTNOTEDonne-GousséLaudetHänni2002353–354_8-0) [Donne-Goussé, Laudet & Hänni 2002](#CITEREFDonne-GousséLaudetHänni2002) , pp. 353-354. -9. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992540_9-0) [***b***](#cite_ref-FOOTNOTECarboneras1992540_9-1) [***c***](#cite_ref-FOOTNOTECarboneras1992540_9-2) [***d***](#cite_ref-FOOTNOTECarboneras1992540_9-3) [***e***](#cite_ref-FOOTNOTECarboneras1992540_9-4) [***f***](#cite_ref-FOOTNOTECarboneras1992540_9-5) [Carboneras 1992](#CITEREFCarboneras1992) , p. 540. -10. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001191_10-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001) , p. 191. -11. [**^**](#cite_ref-FOOTNOTEKear2005448_11-0) [Kear 2005](#CITEREFKear2005) , p. 448. -12. [**^**](#cite_ref-FOOTNOTEKear2005622–623_12-0) [Kear 2005](#CITEREFKear2005) , p. 622-623. -13. [**^**](#cite_ref-FOOTNOTEKear2005686_13-0) [Kear 2005](#CITEREFKear2005) , p. 686. -14. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001193_14-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001) , p. 193. -15. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992537_15-0) [***b***](#cite_ref-FOOTNOTECarboneras1992537_15-1) [***c***](#cite_ref-FOOTNOTECarboneras1992537_15-2) [***d***](#cite_ref-FOOTNOTECarboneras1992537_15-3) [***e***](#cite_ref-FOOTNOTECarboneras1992537_15-4) [***f***](#cite_ref-FOOTNOTECarboneras1992537_15-5) [***g***](#cite_ref-FOOTNOTECarboneras1992537_15-6) [Carboneras 1992](#CITEREFCarboneras1992) , p. 537. -16. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998xix_16-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998) , p. xix. -17. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998_17-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998) . -18. [**^**](#cite_ref-FOOTNOTECarboneras1992538_18-0) [Carboneras 1992](#CITEREFCarboneras1992) , p. 538. -19. [**^**](#cite_ref-FOOTNOTEChristidisBoles200862_19-0) [Christidis & Boles 2008](#CITEREFChristidisBoles2008) , p. 62. -20. [**^**](#cite_ref-FOOTNOTEShirihai2008239,_245_20-0) [Shirihai 2008](#CITEREFShirihai2008) , pp. 239, 245. -21. ^ [***a***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-0) [***b***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-1) [Pratt, Bruner & Berrett 1987](#CITEREFPrattBrunerBerrett1987) , pp. 98-107. -22. [**^**](#cite_ref-FOOTNOTEFitterFitterHosking200052–3_22-0) [Fitter, Fitter & Hosking 2000](#CITEREFFitterFitterHosking2000) , pp. 52-3. -23. [**^**](#cite_ref-23) ["Pacific Black Duck"](http://www.wiresnr.org/pacificblackduck.html) . *www.wiresnr.org* . Retrieved 2018-04-27 . -24. [**^**](#cite_ref-24) Ogden, Evans. ["Dabbling Ducks"](https://www.sfu.ca/biology/wildberg/species/dabbducks.html) . CWE . Retrieved 2006-11-02 . -25. [**^**](#cite_ref-25) Karl Mathiesen (16 March 2015). ["Don't feed the ducks bread, say conservationists"](https://www.theguardian.com/environment/2015/mar/16/dont-feed-the-ducks-bread-say-conservationists) . *The Guardian* . Retrieved 13 November 2016 . -26. [**^**](#cite_ref-26) Rohwer, Frank C.; Anderson, Michael G. (1988). "Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl". *Current Ornithology* . pp. 187-221. [doi](/wiki/Doi_(identifier)) : [10.1007/978-1-4615-6787-5\_4](https://doi.org/10.1007%2F978-1-4615-6787-5_4) . [ISBN](/wiki/ISBN_(identifier)) [978-1-4615-6789-9](/wiki/Special:BookSources/978-1-4615-6789-9) . -27. [**^**](#cite_ref-27) Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ["Long-Term Pair Bonds in Harlequin Ducks"](https://doi.org/10.1093%2Fcondor%2F102.1.201) . *The Condor* . **102** (1): 201-205. [doi](/wiki/Doi_(identifier)) : [10.1093/condor/102.1.201](https://doi.org/10.1093%2Fcondor%2F102.1.201) . [hdl](/wiki/Hdl_(identifier)) : [10315/13797](https://hdl.handle.net/10315%2F13797) . -28. [**^**](#cite_ref-28) ["If You Find An Orphaned Duckling - Wildlife Rehabber"](https://web.archive.org/web/20180923152911/http://wildliferehabber.com/content/if-you-find-duckling) . *wildliferehabber.com* . Archived from [the original](https://wildliferehabber.com/content/if-you-find-duckling) on 2018-09-23 . Retrieved 2018-12-22 . -29. [**^**](#cite_ref-29) Carver, Heather (2011). [*The Duck Bible*](https://books.google.com/books?id=VGofAwAAQBAJ&q=mallard+sound+deep+and+raspy&pg=PA39) . Lulu.com. [ISBN](/wiki/ISBN_(identifier)) [9780557901562](/wiki/Special:BookSources/9780557901562) . [ [*self-published source*](/wiki/Wikipedia:Verifiability#Self-published_sources) ] -30. [**^**](#cite_ref-30) Titlow, Budd (2013-09-03). [*Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends*](https://books.google.com/books?id=fXJBBAAAQBAJ&q=Females+of+most+dabbling+ducks+make+the+classic+%22quack%22+sound+but+most+ducks+don%27t+quack&pg=PA123) . Rowman & Littlefield. [ISBN](/wiki/ISBN_(identifier)) [9780762797707](/wiki/Special:BookSources/9780762797707) . -31. [**^**](#cite_ref-31) Amos, Jonathan (2003-09-08). ["Sound science is quackers"](http://news.bbc.co.uk/2/hi/science/nature/3086890.stm) . *BBC News* . Retrieved 2006-11-02 . -32. [**^**](#cite_ref-32) ["Mythbusters Episode 8"](http://mythbustersresults.com/episode8) . 12 December 2003. -33. [**^**](#cite_ref-FOOTNOTEErlandson1994171_33-0) [Erlandson 1994](#CITEREFErlandson1994) , p. 171. -34. [**^**](#cite_ref-FOOTNOTEJeffries2008168,_243_34-0) [Jeffries 2008](#CITEREFJeffries2008) , pp. 168, 243. -35. ^ [***a***](#cite_ref-FOOTNOTESued-Badillo200365_35-0) [***b***](#cite_ref-FOOTNOTESued-Badillo200365_35-1) [Sued-Badillo 2003](#CITEREFSued-Badillo2003) , p. 65. -36. [**^**](#cite_ref-FOOTNOTEThorpe199668_36-0) [Thorpe 1996](#CITEREFThorpe1996) , p. 68. -37. [**^**](#cite_ref-FOOTNOTEMaisels199942_37-0) [Maisels 1999](#CITEREFMaisels1999) , p. 42. -38. [**^**](#cite_ref-FOOTNOTERau1876133_38-0) [Rau 1876](#CITEREFRau1876) , p. 133. -39. [**^**](#cite_ref-FOOTNOTEHigman201223_39-0) [Higman 2012](#CITEREFHigman2012) , p. 23. -40. [**^**](#cite_ref-FOOTNOTEHume201253_40-0) [Hume 2012](#CITEREFHume2012) , p. 53. -41. [**^**](#cite_ref-FOOTNOTEHume201252_41-0) [Hume 2012](#CITEREFHume2012) , p. 52. -42. [**^**](#cite_ref-FOOTNOTEFieldhouse2002167_42-0) [Fieldhouse 2002](#CITEREFFieldhouse2002) , p. 167. -43. [**^**](#cite_ref-43) Livingston, A. D. (1998-01-01). [*Guide to Edible Plants and Animals*](https://books.google.com/books?id=NViSMffyaSgC&q=%C2%A0%C2%A0In+many+areas,+wild+ducks+of+various+species+are+hunted+for+food+or+sport) . Wordsworth Editions, Limited. [ISBN](/wiki/ISBN_(identifier)) [9781853263774](/wiki/Special:BookSources/9781853263774) . -44. [**^**](#cite_ref-44) ["Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl"](https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) . *New York State Department of Environmental Conservation* . US Department of Commerce. December 2008. p. 3. [Archived](https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 . -45. [**^**](#cite_ref-45) ["FAOSTAT"](http://www.fao.org/faostat/en/#data/QL) . *www.fao.org* . Retrieved 2019-10-25 . -46. [**^**](#cite_ref-46) ["Anas platyrhynchos, Domestic Duck; DigiMorph Staff - The University of Texas at Austin"](http://digimorph.org/specimens/anas_platyrhynchos/skull/) . Digimorph.org . Retrieved 2012-12-23 . -47. [**^**](#cite_ref-47) Sy Montgomery. ["Mallard; Encyclopædia Britannica"](https://www.britannica.com/eb/topic-360302/mallard) . *Britannica.com* . Retrieved 2012-12-23 . -48. [**^**](#cite_ref-48) Glenday, Craig (2014). [*Guinness World Records*](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135) . Guinness World Records Limited. pp. [135](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135) . [ISBN](/wiki/ISBN_(identifier)) [978-1-908843-15-9](/wiki/Special:BookSources/978-1-908843-15-9) . -49. [**^**](#cite_ref-49) *Suomen kunnallisvaakunat* (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. [ISBN](/wiki/ISBN_(identifier)) [951-773-085-3](/wiki/Special:BookSources/951-773-085-3) . -50. [**^**](#cite_ref-50) ["Lubānas simbolika"](http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2) (in Latvian) . Retrieved September 9, 2021 . -51. [**^**](#cite_ref-51) ["Föglö"](http://digi.narc.fi/digi/view.ka?kuid=1738595) (in Swedish) . Retrieved September 9, 2021 . -52. [**^**](#cite_ref-52) Young, Emma. ["World's funniest joke revealed"](https://www.newscientist.com/article/dn2876-worlds-funniest-joke-revealed/) . *New Scientist* . Retrieved 7 January 2019 . -53. [**^**](#cite_ref-53) ["Howard the Duck (character)"](http://www.comics.org/character/name/Howard%20the%20Duck/sort/chrono/) . [*Grand Comics Database*](/wiki/Grand_Comics_Database) . -54. [**^**](#cite_ref-54) [Sanderson, Peter](/wiki/Peter_Sanderson) ; Gilbert, Laura (2008). "1970s". *Marvel Chronicle A Year by Year History* . London, United Kingdom: [Dorling Kindersley](/wiki/Dorling_Kindersley) . p. 161. [ISBN](/wiki/ISBN_(identifier)) [978-0756641238](/wiki/Special:BookSources/978-0756641238) . December saw the debut of the cigar-smoking Howard the Duck. In this story by writer Steve Gerber and artist Val Mayerik, various beings from different realities had begun turning up in the Man-Thing's Florida swamp, including this bad-tempered talking duck. -55. [**^**](#cite_ref-55) ["The Duck"](https://goducks.com/sports/2003/8/28/153778.aspx) . *University of Oregon Athletics* . Retrieved 2022-01-20 . +1. [**^**](#cite_ref-1) ["Duckling"](http://dictionary.reference.com/browse/duckling). *The American Heritage Dictionary of the English Language, Fourth Edition*. Houghton Mifflin Company. 2006. Retrieved 2015-05-22. +2. [**^**](#cite_ref-2) ["Duckling"](http://dictionary.reference.com/browse/duckling). *Kernerman English Multilingual Dictionary (Beta Version)*. K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22. +3. [**^**](#cite_ref-3) Dohner, Janet Vorwald (2001). [*The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds*](https://books.google.com/books?id=WJCTL_mC5w4C&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck&pg=PA457). Yale University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0300138139](/wiki/Special:BookSources/978-0300138139). +4. [**^**](#cite_ref-4) Visca, Curt; Visca, Kelley (2003). [*How to Draw Cartoon Birds*](https://books.google.com/books?id=VqSquCLNrZcC&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck+%28or+hen%29&pg=PA16). The Rosen Publishing Group. [ISBN](/wiki/ISBN_(identifier)) [9780823961566](/wiki/Special:BookSources/9780823961566). +5. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992536_5-0) [***b***](#cite_ref-FOOTNOTECarboneras1992536_5-1) [***c***](#cite_ref-FOOTNOTECarboneras1992536_5-2) [***d***](#cite_ref-FOOTNOTECarboneras1992536_5-3) [Carboneras 1992](#CITEREFCarboneras1992), p. 536. +6. [**^**](#cite_ref-FOOTNOTELivezey1986737–738_6-0) [Livezey 1986](#CITEREFLivezey1986), pp. 737-738. +7. [**^**](#cite_ref-FOOTNOTEMadsenMcHughde_Kloet1988452_7-0) [Madsen, McHugh & de Kloet 1988](#CITEREFMadsenMcHughde_Kloet1988), p. 452. +8. [**^**](#cite_ref-FOOTNOTEDonne-GousséLaudetHänni2002353–354_8-0) [Donne-Goussé, Laudet & Hänni 2002](#CITEREFDonne-GousséLaudetHänni2002), pp. 353-354. +9. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992540_9-0) [***b***](#cite_ref-FOOTNOTECarboneras1992540_9-1) [***c***](#cite_ref-FOOTNOTECarboneras1992540_9-2) [***d***](#cite_ref-FOOTNOTECarboneras1992540_9-3) [***e***](#cite_ref-FOOTNOTECarboneras1992540_9-4) [***f***](#cite_ref-FOOTNOTECarboneras1992540_9-5) [Carboneras 1992](#CITEREFCarboneras1992), p. 540. +10. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001191_10-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001), p. 191. +11. [**^**](#cite_ref-FOOTNOTEKear2005448_11-0) [Kear 2005](#CITEREFKear2005), p. 448. +12. [**^**](#cite_ref-FOOTNOTEKear2005622–623_12-0) [Kear 2005](#CITEREFKear2005), p. 622-623. +13. [**^**](#cite_ref-FOOTNOTEKear2005686_13-0) [Kear 2005](#CITEREFKear2005), p. 686. +14. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001193_14-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001), p. 193. +15. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992537_15-0) [***b***](#cite_ref-FOOTNOTECarboneras1992537_15-1) [***c***](#cite_ref-FOOTNOTECarboneras1992537_15-2) [***d***](#cite_ref-FOOTNOTECarboneras1992537_15-3) [***e***](#cite_ref-FOOTNOTECarboneras1992537_15-4) [***f***](#cite_ref-FOOTNOTECarboneras1992537_15-5) [***g***](#cite_ref-FOOTNOTECarboneras1992537_15-6) [Carboneras 1992](#CITEREFCarboneras1992), p. 537. +16. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998xix_16-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998), p. xix. +17. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998_17-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998). +18. [**^**](#cite_ref-FOOTNOTECarboneras1992538_18-0) [Carboneras 1992](#CITEREFCarboneras1992), p. 538. +19. [**^**](#cite_ref-FOOTNOTEChristidisBoles200862_19-0) [Christidis & Boles 2008](#CITEREFChristidisBoles2008), p. 62. +20. [**^**](#cite_ref-FOOTNOTEShirihai2008239,_245_20-0) [Shirihai 2008](#CITEREFShirihai2008), pp. 239, 245. +21. ^ [***a***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-0) [***b***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-1) [Pratt, Bruner & Berrett 1987](#CITEREFPrattBrunerBerrett1987), pp. 98-107. +22. [**^**](#cite_ref-FOOTNOTEFitterFitterHosking200052–3_22-0) [Fitter, Fitter & Hosking 2000](#CITEREFFitterFitterHosking2000), pp. 52-3. +23. [**^**](#cite_ref-23) ["Pacific Black Duck"](http://www.wiresnr.org/pacificblackduck.html). *www.wiresnr.org*. Retrieved 2018-04-27. +24. [**^**](#cite_ref-24) Ogden, Evans. ["Dabbling Ducks"](https://www.sfu.ca/biology/wildberg/species/dabbducks.html). CWE. Retrieved 2006-11-02. +25. [**^**](#cite_ref-25) Karl Mathiesen (16 March 2015). ["Don't feed the ducks bread, say conservationists"](https://www.theguardian.com/environment/2015/mar/16/dont-feed-the-ducks-bread-say-conservationists). *The Guardian*. Retrieved 13 November 2016. +26. [**^**](#cite_ref-26) Rohwer, Frank C.; Anderson, Michael G. (1988). "Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl". *Current Ornithology*. pp. 187-221. [doi](/wiki/Doi_(identifier)):[10.1007/978-1-4615-6787-5\_4](https://doi.org/10.1007%2F978-1-4615-6787-5_4). [ISBN](/wiki/ISBN_(identifier)) [978-1-4615-6789-9](/wiki/Special:BookSources/978-1-4615-6789-9). +27. [**^**](#cite_ref-27) Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ["Long-Term Pair Bonds in Harlequin Ducks"](https://doi.org/10.1093%2Fcondor%2F102.1.201). *The Condor*. **102** (1): 201-205. [doi](/wiki/Doi_(identifier)):[10.1093/condor/102.1.201](https://doi.org/10.1093%2Fcondor%2F102.1.201). [hdl](/wiki/Hdl_(identifier)):[10315/13797](https://hdl.handle.net/10315%2F13797). +28. [**^**](#cite_ref-28) ["If You Find An Orphaned Duckling - Wildlife Rehabber"](https://web.archive.org/web/20180923152911/http://wildliferehabber.com/content/if-you-find-duckling). *wildliferehabber.com*. Archived from [the original](https://wildliferehabber.com/content/if-you-find-duckling) on 2018-09-23. Retrieved 2018-12-22. +29. [**^**](#cite_ref-29) Carver, Heather (2011). [*The Duck Bible*](https://books.google.com/books?id=VGofAwAAQBAJ&q=mallard+sound+deep+and+raspy&pg=PA39). Lulu.com. [ISBN](/wiki/ISBN_(identifier)) [9780557901562](/wiki/Special:BookSources/9780557901562).[[*self-published source*](/wiki/Wikipedia:Verifiability#Self-published_sources)] +30. [**^**](#cite_ref-30) Titlow, Budd (2013-09-03). [*Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends*](https://books.google.com/books?id=fXJBBAAAQBAJ&q=Females+of+most+dabbling+ducks+make+the+classic+%22quack%22+sound+but+most+ducks+don%27t+quack&pg=PA123). Rowman & Littlefield. [ISBN](/wiki/ISBN_(identifier)) [9780762797707](/wiki/Special:BookSources/9780762797707). +31. [**^**](#cite_ref-31) Amos, Jonathan (2003-09-08). ["Sound science is quackers"](http://news.bbc.co.uk/2/hi/science/nature/3086890.stm). *BBC News*. Retrieved 2006-11-02. +32. [**^**](#cite_ref-32) ["Mythbusters Episode 8"](http://mythbustersresults.com/episode8). 12 December 2003. +33. [**^**](#cite_ref-FOOTNOTEErlandson1994171_33-0) [Erlandson 1994](#CITEREFErlandson1994), p. 171. +34. [**^**](#cite_ref-FOOTNOTEJeffries2008168,_243_34-0) [Jeffries 2008](#CITEREFJeffries2008), pp. 168, 243. +35. ^ [***a***](#cite_ref-FOOTNOTESued-Badillo200365_35-0) [***b***](#cite_ref-FOOTNOTESued-Badillo200365_35-1) [Sued-Badillo 2003](#CITEREFSued-Badillo2003), p. 65. +36. [**^**](#cite_ref-FOOTNOTEThorpe199668_36-0) [Thorpe 1996](#CITEREFThorpe1996), p. 68. +37. [**^**](#cite_ref-FOOTNOTEMaisels199942_37-0) [Maisels 1999](#CITEREFMaisels1999), p. 42. +38. [**^**](#cite_ref-FOOTNOTERau1876133_38-0) [Rau 1876](#CITEREFRau1876), p. 133. +39. [**^**](#cite_ref-FOOTNOTEHigman201223_39-0) [Higman 2012](#CITEREFHigman2012), p. 23. +40. [**^**](#cite_ref-FOOTNOTEHume201253_40-0) [Hume 2012](#CITEREFHume2012), p. 53. +41. [**^**](#cite_ref-FOOTNOTEHume201252_41-0) [Hume 2012](#CITEREFHume2012), p. 52. +42. [**^**](#cite_ref-FOOTNOTEFieldhouse2002167_42-0) [Fieldhouse 2002](#CITEREFFieldhouse2002), p. 167. +43. [**^**](#cite_ref-43) Livingston, A. D. (1998-01-01). [*Guide to Edible Plants and Animals*](https://books.google.com/books?id=NViSMffyaSgC&q=%C2%A0%C2%A0In+many+areas,+wild+ducks+of+various+species+are+hunted+for+food+or+sport). Wordsworth Editions, Limited. [ISBN](/wiki/ISBN_(identifier)) [9781853263774](/wiki/Special:BookSources/9781853263774). +44. [**^**](#cite_ref-44) ["Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl"](https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF). *New York State Department of Environmental Conservation*. US Department of Commerce. December 2008. p. 3. [Archived](https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) from the original on 2022-10-09. Retrieved 2 July 2019. +45. [**^**](#cite_ref-45) ["FAOSTAT"](http://www.fao.org/faostat/en/#data/QL). *www.fao.org*. Retrieved 2019-10-25. +46. [**^**](#cite_ref-46) ["Anas platyrhynchos, Domestic Duck; DigiMorph Staff - The University of Texas at Austin"](http://digimorph.org/specimens/anas_platyrhynchos/skull/). Digimorph.org. Retrieved 2012-12-23. +47. [**^**](#cite_ref-47) Sy Montgomery. ["Mallard; Encyclopædia Britannica"](https://www.britannica.com/eb/topic-360302/mallard). *Britannica.com*. Retrieved 2012-12-23. +48. [**^**](#cite_ref-48) Glenday, Craig (2014). [*Guinness World Records*](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135). Guinness World Records Limited. pp. [135](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135). [ISBN](/wiki/ISBN_(identifier)) [978-1-908843-15-9](/wiki/Special:BookSources/978-1-908843-15-9). +49. [**^**](#cite_ref-49) *Suomen kunnallisvaakunat* (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. [ISBN](/wiki/ISBN_(identifier)) [951-773-085-3](/wiki/Special:BookSources/951-773-085-3). +50. [**^**](#cite_ref-50) ["Lubānas simbolika"](http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2) (in Latvian). Retrieved September 9, 2021. +51. [**^**](#cite_ref-51) ["Föglö"](http://digi.narc.fi/digi/view.ka?kuid=1738595) (in Swedish). Retrieved September 9, 2021. +52. [**^**](#cite_ref-52) Young, Emma. ["World's funniest joke revealed"](https://www.newscientist.com/article/dn2876-worlds-funniest-joke-revealed/). *New Scientist*. Retrieved 7 January 2019. +53. [**^**](#cite_ref-53) ["Howard the Duck (character)"](http://www.comics.org/character/name/Howard%20the%20Duck/sort/chrono/). [*Grand Comics Database*](/wiki/Grand_Comics_Database). +54. [**^**](#cite_ref-54) [Sanderson, Peter](/wiki/Peter_Sanderson); Gilbert, Laura (2008). "1970s". *Marvel Chronicle A Year by Year History*. London, United Kingdom: [Dorling Kindersley](/wiki/Dorling_Kindersley). p. 161. [ISBN](/wiki/ISBN_(identifier)) [978-0756641238](/wiki/Special:BookSources/978-0756641238). December saw the debut of the cigar-smoking Howard the Duck. In this story by writer Steve Gerber and artist Val Mayerik, various beings from different realities had begun turning up in the Man-Thing's Florida swamp, including this bad-tempered talking duck. +55. [**^**](#cite_ref-55) ["The Duck"](https://goducks.com/sports/2003/8/28/153778.aspx). *University of Oregon Athletics*. Retrieved 2022-01-20. ### Sources -- American Ornithologists' Union (1998). [*Checklist of North American Birds*](https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) . Washington, DC: American Ornithologists' Union. [ISBN](/wiki/ISBN_(identifier)) [978-1-891276-00-2](/wiki/Special:BookSources/978-1-891276-00-2) . [Archived](https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) from the original on 2022-10-09. -- Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). *Handbook of the Birds of the World* . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. [ISBN](/wiki/ISBN_(identifier)) [978-84-87334-10-8](/wiki/Special:BookSources/978-84-87334-10-8) . -- Christidis, Les; Boles, Walter E., eds. (2008). *Systematics and Taxonomy of Australian Birds* . Collingwood, VIC: Csiro Publishing. [ISBN](/wiki/ISBN_(identifier)) [978-0-643-06511-6](/wiki/Special:BookSources/978-0-643-06511-6) . -- Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). "A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis". *Molecular Phylogenetics and Evolution* . **23** (3): 339-356. [Bibcode](/wiki/Bibcode_(identifier)) : [2002MolPE..23..339D](https://ui.adsabs.harvard.edu/abs/2002MolPE..23..339D) . [doi](/wiki/Doi_(identifier)) : [10.1016/S1055-7903(02)00019-2](https://doi.org/10.1016%2FS1055-7903%2802%2900019-2) . [PMID](/wiki/PMID_(identifier)) [12099792](https://pubmed.ncbi.nlm.nih.gov/12099792) . -- Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). *The Sibley Guide to Bird Life and Behaviour* . London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-0-7136-6250-4](/wiki/Special:BookSources/978-0-7136-6250-4) . -- Erlandson, Jon M. (1994). [*Early Hunter-Gatherers of the California Coast*](https://books.google.com/books?id=nGTaBwAAQBAJ&pg=171) . New York, NY: Springer Science & Business Media. [ISBN](/wiki/ISBN_(identifier)) [978-1-4419-3231-0](/wiki/Special:BookSources/978-1-4419-3231-0) . -- Fieldhouse, Paul (2002). [*Food, Feasts, and Faith: An Encyclopedia of Food Culture in World Religions*](https://books.google.com/books?id=P-FqDgAAQBAJ&pg=PA167) . Vol. I: A-K. Santa Barbara: ABC-CLIO. [ISBN](/wiki/ISBN_(identifier)) [978-1-61069-412-4](/wiki/Special:BookSources/978-1-61069-412-4) . -- Fitter, Julian; Fitter, Daniel; Hosking, David (2000). *Wildlife of the Galápagos* . Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-10295-5](/wiki/Special:BookSources/978-0-691-10295-5) . -- Higman, B. W. (2012). [*How Food Made History*](https://books.google.com/books?id=YIUoz98yMvgC&pg=RA1-PA1801) . Chichester, UK: John Wiley & Sons. [ISBN](/wiki/ISBN_(identifier)) [978-1-4051-8947-7](/wiki/Special:BookSources/978-1-4051-8947-7) . -- Hume, Julian H. (2012). [*Extinct Birds*](https://books.google.com/books?id=40sxDwAAQBAJ&pg=PA53) . London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-1-4729-3744-5](/wiki/Special:BookSources/978-1-4729-3744-5) . -- Jeffries, Richard (2008). [*Holocene Hunter-Gatherers of the Lower Ohio River Valley*](https://archive.org/details/holocenehunterga0000jeff/mode/2up) . Tuscaloosa: University of Alabama Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-8173-1658-7](/wiki/Special:BookSources/978-0-8173-1658-7) . -- Kear, Janet, ed. (2005). *Ducks, Geese and Swans: Species Accounts (* Cairina *to* Mergus *)* . Bird Families of the World. Oxford: Oxford University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-19-861009-0](/wiki/Special:BookSources/978-0-19-861009-0) . -- Livezey, Bradley C. (October 1986). ["A phylogenetic analysis of recent Anseriform genera using morphological characters"](https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) . *The Auk* . **103** (4): 737-754. [doi](/wiki/Doi_(identifier)) : [10.1093/auk/103.4.737](https://doi.org/10.1093%2Fauk%2F103.4.737) . [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) from the original on 2022-10-09. -- Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ["A partial classification of waterfowl (Anatidae) based on single-copy DNA"](https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) . *The Auk* . **105** (3): 452-459. [doi](/wiki/Doi_(identifier)) : [10.1093/auk/105.3.452](https://doi.org/10.1093%2Fauk%2F105.3.452) . [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) from the original on 2022-10-09. -- Maisels, Charles Keith (1999). [*Early Civilizations of the Old World*](https://books.google.com/books?id=I2dgI2ijww8C&pg=PA42) . London: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-10975-8](/wiki/Special:BookSources/978-0-415-10975-8) . -- Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). *A Field Guide to the Birds of Hawaii and the Tropical Pacific* . Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [0-691-02399-9](/wiki/Special:BookSources/0-691-02399-9) . -- Rau, Charles (1876). [*Early Man in Europe*](https://books.google.com/books?id=9XBgAAAAIAAJ&pg=133) . New York: Harper & Brothers. [LCCN](/wiki/LCCN_(identifier)) [05040168](https://lccn.loc.gov/05040168) . -- Shirihai, Hadoram (2008). *A Complete Guide to Antarctic Wildlife* . Princeton, NJ, US: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-13666-0](/wiki/Special:BookSources/978-0-691-13666-0) . -- Sued-Badillo, Jalil (2003). [*Autochthonous Societies*](https://books.google.com/books?id=zexcW7q-4LgC&pg=PA65) . General History of the Caribbean. Paris: UNESCO. [ISBN](/wiki/ISBN_(identifier)) [978-92-3-103832-7](/wiki/Special:BookSources/978-92-3-103832-7) . -- Thorpe, I. J. (1996). [*The Origins of Agriculture in Europe*](https://books.google.com/books?id=YA-EAgAAQBAJ&pg=PA68) . New York: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-08009-5](/wiki/Special:BookSources/978-0-415-08009-5) . +- American Ornithologists' Union (1998). [*Checklist of North American Birds*](https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF). Washington, DC: American Ornithologists' Union. [ISBN](/wiki/ISBN_(identifier)) [978-1-891276-00-2](/wiki/Special:BookSources/978-1-891276-00-2). [Archived](https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) from the original on 2022-10-09. +- Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). *Handbook of the Birds of the World*. Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. [ISBN](/wiki/ISBN_(identifier)) [978-84-87334-10-8](/wiki/Special:BookSources/978-84-87334-10-8). +- Christidis, Les; Boles, Walter E., eds. (2008). *Systematics and Taxonomy of Australian Birds*. Collingwood, VIC: Csiro Publishing. [ISBN](/wiki/ISBN_(identifier)) [978-0-643-06511-6](/wiki/Special:BookSources/978-0-643-06511-6). +- Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). "A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis". *Molecular Phylogenetics and Evolution*. **23** (3): 339-356. [Bibcode](/wiki/Bibcode_(identifier)):[2002MolPE..23..339D](https://ui.adsabs.harvard.edu/abs/2002MolPE..23..339D). [doi](/wiki/Doi_(identifier)):[10.1016/S1055-7903(02)00019-2](https://doi.org/10.1016%2FS1055-7903%2802%2900019-2). [PMID](/wiki/PMID_(identifier)) [12099792](https://pubmed.ncbi.nlm.nih.gov/12099792). +- Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). *The Sibley Guide to Bird Life and Behaviour*. London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-0-7136-6250-4](/wiki/Special:BookSources/978-0-7136-6250-4). +- Erlandson, Jon M. (1994). [*Early Hunter-Gatherers of the California Coast*](https://books.google.com/books?id=nGTaBwAAQBAJ&pg=171). New York, NY: Springer Science & Business Media. [ISBN](/wiki/ISBN_(identifier)) [978-1-4419-3231-0](/wiki/Special:BookSources/978-1-4419-3231-0). +- Fieldhouse, Paul (2002). [*Food, Feasts, and Faith: An Encyclopedia of Food Culture in World Religions*](https://books.google.com/books?id=P-FqDgAAQBAJ&pg=PA167). Vol. I: A-K. Santa Barbara: ABC-CLIO. [ISBN](/wiki/ISBN_(identifier)) [978-1-61069-412-4](/wiki/Special:BookSources/978-1-61069-412-4). +- Fitter, Julian; Fitter, Daniel; Hosking, David (2000). *Wildlife of the Galápagos*. Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-10295-5](/wiki/Special:BookSources/978-0-691-10295-5). +- Higman, B. W. (2012). [*How Food Made History*](https://books.google.com/books?id=YIUoz98yMvgC&pg=RA1-PA1801). Chichester, UK: John Wiley & Sons. [ISBN](/wiki/ISBN_(identifier)) [978-1-4051-8947-7](/wiki/Special:BookSources/978-1-4051-8947-7). +- Hume, Julian H. (2012). [*Extinct Birds*](https://books.google.com/books?id=40sxDwAAQBAJ&pg=PA53). London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-1-4729-3744-5](/wiki/Special:BookSources/978-1-4729-3744-5). +- Jeffries, Richard (2008). [*Holocene Hunter-Gatherers of the Lower Ohio River Valley*](https://archive.org/details/holocenehunterga0000jeff/mode/2up). Tuscaloosa: University of Alabama Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-8173-1658-7](/wiki/Special:BookSources/978-0-8173-1658-7). +- Kear, Janet, ed. (2005). *Ducks, Geese and Swans: Species Accounts (*Cairina *to* Mergus*)*. Bird Families of the World. Oxford: Oxford University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-19-861009-0](/wiki/Special:BookSources/978-0-19-861009-0). +- Livezey, Bradley C. (October 1986). ["A phylogenetic analysis of recent Anseriform genera using morphological characters"](https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF). *The Auk*. **103** (4): 737-754. [doi](/wiki/Doi_(identifier)):[10.1093/auk/103.4.737](https://doi.org/10.1093%2Fauk%2F103.4.737). [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) from the original on 2022-10-09. +- Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ["A partial classification of waterfowl (Anatidae) based on single-copy DNA"](https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF). *The Auk*. **105** (3): 452-459. [doi](/wiki/Doi_(identifier)):[10.1093/auk/105.3.452](https://doi.org/10.1093%2Fauk%2F105.3.452). [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) from the original on 2022-10-09. +- Maisels, Charles Keith (1999). [*Early Civilizations of the Old World*](https://books.google.com/books?id=I2dgI2ijww8C&pg=PA42). London: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-10975-8](/wiki/Special:BookSources/978-0-415-10975-8). +- Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). *A Field Guide to the Birds of Hawaii and the Tropical Pacific*. Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [0-691-02399-9](/wiki/Special:BookSources/0-691-02399-9). +- Rau, Charles (1876). [*Early Man in Europe*](https://books.google.com/books?id=9XBgAAAAIAAJ&pg=133). New York: Harper & Brothers. [LCCN](/wiki/LCCN_(identifier)) [05040168](https://lccn.loc.gov/05040168). +- Shirihai, Hadoram (2008). *A Complete Guide to Antarctic Wildlife*. Princeton, NJ, US: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-13666-0](/wiki/Special:BookSources/978-0-691-13666-0). +- Sued-Badillo, Jalil (2003). [*Autochthonous Societies*](https://books.google.com/books?id=zexcW7q-4LgC&pg=PA65). General History of the Caribbean. Paris: UNESCO. [ISBN](/wiki/ISBN_(identifier)) [978-92-3-103832-7](/wiki/Special:BookSources/978-92-3-103832-7). +- Thorpe, I. J. (1996). [*The Origins of Agriculture in Europe*](https://books.google.com/books?id=YA-EAgAAQBAJ&pg=PA68). New York: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-08009-5](/wiki/Special:BookSources/978-0-415-08009-5). ## External links @@ -512,9 +512,9 @@ The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starr | National | - [United States](https://id.loc.gov/authorities/sh85039879) - [France](https://catalogue.bnf.fr/ark:/12148/cb119761481) - [BnF data](https://data.bnf.fr/ark:/12148/cb119761481) - [Japan](https://id.ndl.go.jp/auth/ndlna/00564819) - [Latvia](https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number=000090751&P_CON_LNG=ENG) - [Israel](http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007565486205171) | | Other | - [IdRef](https://www.idref.fr/027796124) | -Retrieved from " [https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351](https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351) " +Retrieved from "[https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351](https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351)" -[Categories](/wiki/Help:Category) : +[Categories](/wiki/Help:Category): - [Ducks](/wiki/Category:Ducks) - [Game birds](/wiki/Category:Game_birds) diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.itxt b/tests/data/jats/groundtruth/elife-56337.nxml.itxt index c428ce22c6..03add283f9 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.itxt +++ b/tests/data/jats/groundtruth/elife-56337.nxml.itxt @@ -7,9 +7,9 @@ item-0 at level 0: unspecified: group _root_ item-6 at level 2: section_header: Introduction item-7 at level 3: text: Nearly half of the human and mou ... s are active beyond early development. item-8 at level 3: inline: group group - item-9 at level 4: text: TEs, especially long terminal re ... ion by recruiting KAP1 to TEs. Indeed, + item-9 at level 4: text: TEs, especially long terminal re ... on by recruiting KAP1 to TEs. Indeed, item-10 at level 4: text: Zfp809 - item-11 at level 4: text: knock-out (KO) in mice resulted ... f evolutionarily young KRAB-ZFP genes. + item-11 at level 4: text: knock-out (KO) in mice resulted ... f evolutionarily young KRAB-ZFP genes. item-12 at level 2: section_header: Results item-13 at level 3: section_header: Mouse KRAB-ZFPs target retrotransposons item-14 at level 4: text: We analyzed the RNA expression p ... duplications (Kauzlaric et al., 2017). @@ -24,9 +24,9 @@ item-0 at level 0: unspecified: group _root_ item-21 at level 4: inline: group group item-22 at level 5: text: We generally observed that KRAB- ... ZFP961 motif closely resembles the PBS item-23 at level 5: text: Lys1,2 - item-24 at level 5: text: (Figure 1—figure supplement 3A), ... f et al., 2008). Repression of the PBS + item-24 at level 5: text: (Figure 1—figure supplement 3A) ... f et al., 2008). Repression of the PBS item-25 at level 5: text: Lys1,2 - item-26 at level 5: text: by ZFP961 was also confirmed in ... responsible for this silencing effect. + item-26 at level 5: text: by ZFP961 was also confirmed in ... responsible for this silencing effect. item-27 at level 4: text: To further test the hypothesis t ... t easily evade repression by mutation. item-28 at level 4: text: Our KRAB-ZFP ChIP-seq dataset al ... ntirely shift the mode of DNA binding. item-29 at level 3: section_header: Genetic deletion of KRAB-ZFP gen ... leads to retrotransposon reactivation @@ -38,15 +38,15 @@ item-0 at level 0: unspecified: group _root_ item-34 at level 4: picture item-34 at level 5: caption: Figure 3. TE-dependent gene activation in KRAB-ZFP cluster KO ES cells. (A) Differential gene expression in Chr2-cl and Chr4-cl KO ES cells. Significantly up- and downregulated genes (adjusted p-value<0.05) are highlighted in red and green, respectively, KRAB-ZFP genes within the deleted clusters are shown in blue. (B) Correlation of TEs and gene deregulation. Plots show enrichment of TE groups within 100 kb of up- and downregulated genes relative to all genes. Significantly overrepresented LTR and LINE groups (adjusted p-value<0.1) are highlighted in blue and red, respectively. (C) Schematic view of the downstream region of Chst1 where a 5’ truncated ETn insertion is located. ChIP-seq (Input subtracted from ChIP) data for overexpressed epitope-tagged Gm13051 (a Chr4-cl KRAB-ZFP) in F9 EC cells, and re-mapped KAP1 (GEO accession: GSM1406445) and H3K9me3 (GEO accession: GSM1327148) in WT ES cells are shown together with RNA-seq data from Chr4-cl WT and KO ES cells (mapped using Bowtie (-a -m 1 --strata -v 2) to exclude reads that cannot be uniquely mapped). (D) RT-qPCR analysis of Chst1 mRNA expression in Chr4-cl WT and KO ES cells with or without the CRISPR/Cas9 deleted ETn insertion near Chst1. Values represent mean expression (normalized to Gapdh) from three biological replicates per sample (each performed in three technical replicates) in arbitrary units. Error bars represent standard deviation and asterisks indicate significance (p<0.01, Student’s t-test). n.s.: not significant. (E) Mean coverage of ChIP-seq data (Input subtracted from ChIP) in Chr4-cl WT and KO ES cells over 127 full-length ETn insertions. The binding sites of the Chr4-cl KRAB-ZFPs Rex2 and Gm13051 are indicated by dashed lines. item-35 at level 4: inline: group group - item-36 at level 5: text: While we generally observed that ... ETn insertion to the first exon of the + item-36 at level 5: text: While we generally observed that ... Tn insertion to the first exon of the item-37 at level 5: text: Cd59a - item-38 at level 5: text: gene, which is strongly activate ... is located about 60 kb from the TSS of + item-38 at level 5: text: gene, which is strongly activat ... s located about 60 kb from the TSS of item-39 at level 5: text: Chst1 - item-40 at level 5: text: , one of the top-upregulated gen ... C). RT-qPCR analysis revealed that the + item-40 at level 5: text: , one of the top-upregulated gen ... ). RT-qPCR analysis revealed that the item-41 at level 5: text: Chst1 - item-42 at level 5: text: upregulation phenotype in Chr4-c ... ontrolled ETn-borne enhancer regulates + item-42 at level 5: text: upregulation phenotype in Chr4- ... ntrolled ETn-borne enhancer regulates item-43 at level 5: text: Chst1 - item-44 at level 5: text: expression (Figure 3D). Furtherm ... he internal region and not on the LTR. + item-44 at level 5: text: expression (Figure 3D). Further ... he internal region and not on the LTR. item-45 at level 3: section_header: ETn retrotransposition in Chr4-cl KO and WT mice item-46 at level 4: text: IAP, ETn/ETnERV and MuLV/RLTR4 r ... s may contribute to reduced viability. item-47 at level 4: text: We reasoned that retrotransposon ... Tn insertions at a high recovery rate. @@ -66,49 +66,49 @@ item-0 at level 0: unspecified: group _root_ item-59 at level 4: inline: group group item-60 at level 5: text: Mouse ES cells and F9 EC cells w ... nes originate from JM8A3.N1 C57BL/6N-A item-61 at level 5: text: tm1Brd - item-62 at level 5: text: ES cells (KOMP Repository). Chr2 ... KO/KO and KO/WT (B6/129 F2) offspring. + item-62 at level 5: text: ES cells (KOMP Repository). Chr ... KO/KO and KO/WT (B6/129 F2) offspring. item-63 at level 3: section_header: Generation of KRAB-ZFP expressing cell lines item-64 at level 4: inline: group group - item-65 at level 5: text: KRAB-ZFP ORFs were PCR-amplified ... r 3XHA tags in F9 EC or ES cells using + item-65 at level 5: text: KRAB-ZFP ORFs were PCR-amplified ... 3XHA tags in F9 EC or ES cells using item-66 at level 5: text: Sleeping beauty - item-67 at level 5: text: transposon-based (Wolf et al., 2 ... led and further expanded for ChIP-seq. + item-67 at level 5: text: transposon-based (Wolf et al., ... led and further expanded for ChIP-seq. item-68 at level 3: section_header: CRISPR/Cas9 mediated deletion of KRAB-ZFP clusters and an MMETn insertion item-69 at level 4: inline: group group item-70 at level 5: text: All gRNAs were expressed from th ... ddgene_42230) and nucleofected into 10 item-71 at level 5: text: 6 - item-72 at level 5: text: ES cells using Amaxa nucleofecti ... PCR genotyping (Supplementary file 3). + item-72 at level 5: text: ES cells using Amaxa nucleofect ... PCR genotyping (Supplementary file 3). item-73 at level 3: section_header: ChIP-seq analysis item-74 at level 4: inline: group group item-75 at level 5: text: For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 10 item-76 at level 5: text: 7 - item-77 at level 5: text: cells were crosslinked and immun ... 010 or Khil et al., 2012 respectively. + item-77 at level 5: text: cells were crosslinked and immu ... 010 or Khil et al., 2012 respectively. item-78 at level 4: text: ChIP-seq libraries were construc ... were re-mapped using Bowtie (--best). item-79 at level 3: section_header: Luciferase reporter assays item-80 at level 4: inline: group group - item-81 at level 5: text: For KRAB-ZFP repression assays, ... y of the MMETn element upstream of the + item-81 at level 5: text: For KRAB-ZFP repression assays, ... of the MMETn element upstream of the item-82 at level 5: text: Cd59a - item-83 at level 5: text: gene, fragments of varying sizes ... after transfection as described above. + item-83 at level 5: text: gene, fragments of varying size ... after transfection as described above. item-84 at level 3: section_header: RNA-seq analysis item-85 at level 4: inline: group group - item-86 at level 5: text: Whole RNA was purified using RNe ... function of BED tools. The probability + item-86 at level 5: text: Whole RNA was purified using RNe ... unction of BED tools. The probability item-87 at level 5: text: p - item-88 at level 5: text: in the binomial distribution was ... apped with KRAB-ZFP peaks. Then, given + item-88 at level 5: text: in the binomial distribution wa ... pped with KRAB-ZFP peaks. Then, given item-89 at level 5: text: n - item-90 at level 5: text: which is the number of specific groups of genes, and + item-90 at level 5: text: which is the number of specific groups of genes, and item-91 at level 5: text: x - item-92 at level 5: text: which is the number of this grou ... lemented in the R function p.adjust(). + item-92 at level 5: text: which is the number of this gro ... lemented in the R function p.adjust(). item-93 at level 3: section_header: Reduced representation bisulfite sequencing (RRBS-seq) item-94 at level 4: text: For RRBS-seq analysis, Chr4-cl W ... h sample were considered for analysis. item-95 at level 3: section_header: Retrotransposition assay item-96 at level 4: inline: group group item-97 at level 5: text: The retrotransposition vectors p ... MusD retrotransposition assays, 5 × 10 item-98 at level 5: text: 4 - item-99 at level 5: text: HeLa cells (ATCC CCL-2) were tra ... were stained with Amido Black (Sigma). + item-99 at level 5: text: HeLa cells (ATCC CCL-2) were tr ... were stained with Amido Black (Sigma). item-100 at level 3: section_header: Capture-seq screen item-101 at level 4: inline: group group item-102 at level 5: text: To identify novel retrotransposo ... target enrichment using the SureSelect item-103 at level 5: text: QXT - item-104 at level 5: text: Target Enrichment kit (Agilent). ... assembly using the Unicycler software. + item-104 at level 5: text: Target Enrichment kit (Agilent) ... assembly using the Unicycler software. item-105 at level 2: section_header: Funding Information item-106 at level 3: text: This paper was supported by the following grants: item-107 at level 3: list: group list diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.json b/tests/data/jats/groundtruth/elife-56337.nxml.json index f9a1eeea63..22dfe89b50 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.json +++ b/tests/data/jats/groundtruth/elife-56337.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "elife-56337", "origin": { "mimetype": "application/xml", @@ -910,8 +910,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed,", - "text": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed," + "orig": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed, ", + "text": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed, " }, { "self_ref": "#/texts/8", @@ -941,8 +941,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes.", - "text": "knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes." + "orig": " knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes.", + "text": " knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes." }, { "self_ref": "#/texts/10", @@ -1124,8 +1124,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS", - "text": "(Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS" + "orig": " (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS", + "text": " (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS" }, { "self_ref": "#/texts/21", @@ -1155,8 +1155,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect.", - "text": "by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect." + "orig": " by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect.", + "text": " by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect." }, { "self_ref": "#/texts/23", @@ -1282,8 +1282,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the", - "text": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the" + "orig": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the ", + "text": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the " }, { "self_ref": "#/texts/32", @@ -1313,8 +1313,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of", - "text": "gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of" + "orig": " gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of ", + "text": " gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of " }, { "self_ref": "#/texts/34", @@ -1344,8 +1344,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the", - "text": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the" + "orig": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the ", + "text": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the " }, { "self_ref": "#/texts/36", @@ -1375,8 +1375,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates", - "text": "upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates" + "orig": " upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates ", + "text": " upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates " }, { "self_ref": "#/texts/38", @@ -1406,8 +1406,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR.", - "text": "expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR." + "orig": " expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR.", + "text": " expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR." }, { "self_ref": "#/texts/40", @@ -1685,8 +1685,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring.", - "text": "ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring." + "orig": " ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring.", + "text": " ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring." }, { "self_ref": "#/texts/57", @@ -1714,8 +1714,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using", - "text": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using" + "orig": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using ", + "text": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using " }, { "self_ref": "#/texts/59", @@ -1745,8 +1745,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq.", - "text": "transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq." + "orig": " transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq.", + "text": " transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq." }, { "self_ref": "#/texts/61", @@ -1805,8 +1805,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3).", - "text": "ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3)." + "orig": " ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3).", + "text": " ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3)." }, { "self_ref": "#/texts/65", @@ -1868,8 +1868,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB_307019 or Covance Cat# MMS-101P-200, RRID:AB_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively.", - "text": "cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB_307019 or Covance Cat# MMS-101P-200, RRID:AB_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively." + "orig": " cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB_307019 or Covance Cat# MMS-101P-200, RRID:AB_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively.", + "text": " cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB_307019 or Covance Cat# MMS-101P-200, RRID:AB_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively." }, { "self_ref": "#/texts/69", @@ -1909,8 +1909,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the", - "text": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the" + "orig": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the ", + "text": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the " }, { "self_ref": "#/texts/72", @@ -1940,8 +1940,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above.", - "text": "gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above." + "orig": " gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above.", + "text": " gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above." }, { "self_ref": "#/texts/74", @@ -1969,8 +1969,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID:SCR_016383) or HiSeq3000 (RRID:SCR_016386) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID:SCR_013035; settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID:SCR_012954) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID:SCR_015687). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability", - "text": "Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID:SCR_016383) or HiSeq3000 (RRID:SCR_016386) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID:SCR_013035; settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID:SCR_012954) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID:SCR_015687). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability" + "orig": "Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID:SCR_016383) or HiSeq3000 (RRID:SCR_016386) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID:SCR_013035; settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID:SCR_012954) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID:SCR_015687). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability ", + "text": "Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID:SCR_016383) or HiSeq3000 (RRID:SCR_016386) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID:SCR_013035; settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID:SCR_012954) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID:SCR_015687). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability " }, { "self_ref": "#/texts/76", @@ -2000,8 +2000,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given", - "text": "in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given" + "orig": " in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given ", + "text": " in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given " }, { "self_ref": "#/texts/78", @@ -2031,8 +2031,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "which is the number of specific groups of genes, and", - "text": "which is the number of specific groups of genes, and" + "orig": " which is the number of specific groups of genes, and ", + "text": " which is the number of specific groups of genes, and " }, { "self_ref": "#/texts/80", @@ -2062,8 +2062,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust().", - "text": "which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust()." + "orig": " which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust().", + "text": " which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust()." }, { "self_ref": "#/texts/82", @@ -2151,8 +2151,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma).", - "text": "HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma)." + "orig": " HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma).", + "text": " HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma)." }, { "self_ref": "#/texts/88", @@ -2211,8 +2211,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software.", - "text": "Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software." + "orig": " Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software.", + "text": " Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software." }, { "self_ref": "#/texts/92", diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.md b/tests/data/jats/groundtruth/elife-56337.nxml.md index 4816c0fda2..2355b9c8e5 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.md +++ b/tests/data/jats/groundtruth/elife-56337.nxml.md @@ -20,7 +20,7 @@ TEs, especially long terminal repeat (LTR) retrotransposons, also known as endog We analyzed the RNA expression profiles of mouse KRAB-ZFPs across a wide range of tissues to identify candidates active in early embryos/ES cells. While the majority of KRAB-ZFPs are expressed at low levels and uniformly across tissues, a group of KRAB-ZFPs are highly and almost exclusively expressed in ES cells (Figure 1—figure supplement 1A). About two thirds of these KRAB-ZFPs are physically linked in two clusters on chromosome 2 (Chr2-cl) and 4 (Chr4-cl) (Figure 1—figure supplement 1B). These two clusters encode 40 and 21 KRAB-ZFP annotated genes, respectively, which, with one exception on Chr4-cl, do not have orthologues in rat or any other sequenced mammals (Supplementary file 1). The KRAB-ZFPs within these two genomic clusters also group together phylogenetically (Figure 1—figure supplement 1C), indicating these gene clusters arose by a series of recent segmental gene duplications (Kauzlaric et al., 2017). -To determine the binding sites of the KRAB-ZFPs within these and other gene clusters, we expressed epitope-tagged KRAB-ZFPs using stably integrating vectors in mouse embryonic carcinoma (EC) or ES cells (Table 1, Supplementary file 1) and performed chromatin immunoprecipitation followed by deep sequencing (ChIP-seq). We then determined whether the identified binding sites are significantly enriched over annotated TEs and used the non-repetitive peak fraction to identify binding motifs. We discarded 7 of 68 ChIP-seq datasets because we could not obtain a binding motif or a target TE and manual inspection confirmed low signal to noise ratio. Of the remaining 61 KRAB-ZFPs, 51 significantly overlapped at least one TE subfamily ( *adjusted p-value* <1e-5). Altogether, 81 LTR retrotransposon, 18 LINE, 10 SINE and one DNA transposon subfamilies were targeted by at least one of the 51 KRAB-ZFPs (Figure 1A and Supplementary file 1). Chr2-cl KRAB-ZFPs preferably bound IAPEz retrotransposons and L1-type LINEs, while Chr4-cl KRAB-ZFPs targeted various retrotransposons, including the closely related MMETn (hereafter referred to as ETn) and ETnERV (also known as MusD) elements (Figure 1A). ETn elements are non-autonomous LTR retrotransposons that require trans-complementation by the fully coding ETnERV elements that contain Gag, Pro and Pol genes (Ribet et al., 2004). These elements have accumulated to ~240 and~100 copies in the reference C57BL/6 genome, respectively, with ~550 solitary LTRs (Baust et al., 2003). Both ETn and ETnERVs are still active, generating polymorphisms and mutations in several mouse strains (Gagnier et al., 2019). The validity of our ChIP-seq screen was confirmed by the identification of binding motifs - which often resembled the computationally predicted motifs (Figure 1—figure supplement 2A) - for the majority of screened KRAB-ZFPs (Supplementary file 1). Moreover, predicted and experimentally determined motifs were found in targeted TEs in most cases (Supplementary file 1), and reporter repression assays confirmed KRAB-ZFP induced silencing for all the tested sequences (Figure 1—figure supplement 2B). Finally, we observed KAP1 and H3K9me3 enrichment at most of the targeted TEs in wild type ES cells, indicating that most of these KRAB-ZFPs are functionally active in the early embryo (Figure 1A). +To determine the binding sites of the KRAB-ZFPs within these and other gene clusters, we expressed epitope-tagged KRAB-ZFPs using stably integrating vectors in mouse embryonic carcinoma (EC) or ES cells (Table 1, Supplementary file 1) and performed chromatin immunoprecipitation followed by deep sequencing (ChIP-seq). We then determined whether the identified binding sites are significantly enriched over annotated TEs and used the non-repetitive peak fraction to identify binding motifs. We discarded 7 of 68 ChIP-seq datasets because we could not obtain a binding motif or a target TE and manual inspection confirmed low signal to noise ratio. Of the remaining 61 KRAB-ZFPs, 51 significantly overlapped at least one TE subfamily (*adjusted p-value*<1e-5). Altogether, 81 LTR retrotransposon, 18 LINE, 10 SINE and one DNA transposon subfamilies were targeted by at least one of the 51 KRAB-ZFPs (Figure 1A and Supplementary file 1). Chr2-cl KRAB-ZFPs preferably bound IAPEz retrotransposons and L1-type LINEs, while Chr4-cl KRAB-ZFPs targeted various retrotransposons, including the closely related MMETn (hereafter referred to as ETn) and ETnERV (also known as MusD) elements (Figure 1A). ETn elements are non-autonomous LTR retrotransposons that require trans-complementation by the fully coding ETnERV elements that contain Gag, Pro and Pol genes (Ribet et al., 2004). These elements have accumulated to ~240 and~100 copies in the reference C57BL/6 genome, respectively, with ~550 solitary LTRs (Baust et al., 2003). Both ETn and ETnERVs are still active, generating polymorphisms and mutations in several mouse strains (Gagnier et al., 2019). The validity of our ChIP-seq screen was confirmed by the identification of binding motifs - which often resembled the computationally predicted motifs (Figure 1—figure supplement 2A) - for the majority of screened KRAB-ZFPs (Supplementary file 1). Moreover, predicted and experimentally determined motifs were found in targeted TEs in most cases (Supplementary file 1), and reporter repression assays confirmed KRAB-ZFP induced silencing for all the tested sequences (Figure 1—figure supplement 2B). Finally, we observed KAP1 and H3K9me3 enrichment at most of the targeted TEs in wild type ES cells, indicating that most of these KRAB-ZFPs are functionally active in the early embryo (Figure 1A). Figure 1. Genome-wide binding patterns of mouse KRAB-ZFPs. (A) Probability heatmap of KRAB-ZFP binding to TEs. Blue color intensity (main field) corresponds to -log10 (adjusted p-value) enrichment of ChIP-seq peak overlap with TE groups (Fisher’s exact test). The green/red color intensity (top panel) represents mean KAP1 (GEO accession: GSM1406445) and H3K9me3 (GEO accession: GSM1327148) enrichment (respectively) at peaks overlapping significantly targeted TEs (adjusted p-value<1e-5) in WT ES cells. (B) Summarized ChIP-seq signal for indicated KRAB-ZFPs and previously published KAP1 and H3K9me3 in WT ES cells across 127 intact ETn elements. (C) Heatmaps of KRAB-ZFP ChIP-seq signal at ChIP-seq peaks. For better comparison, peaks for all three KRAB-ZFPs were called with the same parameters (p<1e-10, peak enrichment >20). The top panel shows a schematic of the arrangement of the contact amino acid composition of each zinc finger. Zinc fingers are grouped and colored according to similarity, with amino acid differences relative to the five consensus fingers highlighted in white. @@ -39,7 +39,7 @@ Table 1. KRAB-ZFP genes clusters in the mouse genome that were investigated in t | Chr9 | Chr9 qA3 | 0.1 | 4 | 2 | | Other | - | - | 248 | 4 | -We generally observed that KRAB-ZFPs present exclusively in mouse target TEs that are restricted to the mouse genome, indicating KRAB-ZFPs and their targets emerged together. For example, several mouse-specific KRAB-ZFPs in Chr2-cl and Chr4-cl target IAP and ETn elements which are only found in the mouse genome and are highly active. This is the strongest data to date supporting that recent KRAB-ZFP expansions in these young clusters is a response to recent TE activity. Likewise, ZFP599 and ZFP617, both conserved in Muroidea, bind to various ORR1-type LTRs which are present in the rat genome (Supplementary file 1). However, ZFP961, a KRAB-ZFP encoded on a small gene cluster on chromosome 8 that is conserved in Muroidea targets TEs that are only found in the mouse genome (e.g. ETn), a paradox we have previously observed with ZFP809, which also targets TEs that are evolutionarily younger than itself (Wolf et al., 2015b). The ZFP961 binding site is located at the 5’ end of the internal region of ETn and ETnERV elements, a sequence that usually contains the primer binding site (PBS), which is required to prime retroviral reverse transcription. Indeed, the ZFP961 motif closely resembles the PBS Lys1,2 (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS Lys1,2 by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect. +We generally observed that KRAB-ZFPs present exclusively in mouse target TEs that are restricted to the mouse genome, indicating KRAB-ZFPs and their targets emerged together. For example, several mouse-specific KRAB-ZFPs in Chr2-cl and Chr4-cl target IAP and ETn elements which are only found in the mouse genome and are highly active. This is the strongest data to date supporting that recent KRAB-ZFP expansions in these young clusters is a response to recent TE activity. Likewise, ZFP599 and ZFP617, both conserved in Muroidea, bind to various ORR1-type LTRs which are present in the rat genome (Supplementary file 1). However, ZFP961, a KRAB-ZFP encoded on a small gene cluster on chromosome 8 that is conserved in Muroidea targets TEs that are only found in the mouse genome (e.g. ETn), a paradox we have previously observed with ZFP809, which also targets TEs that are evolutionarily younger than itself (Wolf et al., 2015b). The ZFP961 binding site is located at the 5’ end of the internal region of ETn and ETnERV elements, a sequence that usually contains the primer binding site (PBS), which is required to prime retroviral reverse transcription. Indeed, the ZFP961 motif closely resembles the PBSLys1,2 (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBSLys1,2 by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect. To further test the hypothesis that KRAB-ZFPs target sites necessary for retrotransposition, we utilized previously generated ETn and ETnERV retrotransposition reporters in which we mutated KRAB-ZFP binding sites (Ribet et al., 2004). Whereas the ETnERV reporters are sufficient for retrotransposition, the ETn reporter requires ETnERV genes supplied in trans. We tested and confirmed that the REX2/ZFP600 and GM13051 binding sites within these TEs are required for efficient retrotransposition (Figure 1—figure supplement 3B). REX2 and ZFP600 both bind a target about 200 bp from the start of the internal region (Figure 1B), a region that often encodes the packaging signal. GM13051 binds a target coding for part of a highly structured mRNA export signal (Legiewicz et al., 2010) near the 3’ end of the internal region of ETn (Figure 1—figure supplement 3C). Both signals are characterized by stem-loop intramolecular base-pairing in which a single mutation can disrupt loop formation. This indicates that at least some KRAB-ZFPs evolved to bind functionally essential target sequences which cannot easily evade repression by mutation. @@ -61,7 +61,7 @@ Figure 3. TE-dependent gene activation in KRAB-ZFP cluster KO ES cells. (A) Diff -While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the *Cd59a* gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of *Chst1* , one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the *Chst1* upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates *Chst1* expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR. +While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the *Cd59a* gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of *Chst1*, one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the *Chst1* upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates *Chst1* expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR. ### ETn retrotransposition in Chr4-cl KO and WT mice @@ -126,7 +126,7 @@ Key resources table ### Cell lines and transgenic mice -Mouse ES cells and F9 EC cells were cultivated as described previously (Wolf et al., 2015b) unless stated otherwise. Chr4-cl KO ES cells originate from B6;129‐ Gt(ROSA)26Sortm1(cre/ERT)Nat/J mice (Jackson lab), all other KRAB-ZFP cluster KO ES cell lines originate from JM8A3.N1 C57BL/6N-A tm1Brd ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring. +Mouse ES cells and F9 EC cells were cultivated as described previously (Wolf et al., 2015b) unless stated otherwise. Chr4-cl KO ES cells originate from B6;129‐ Gt(ROSA)26Sortm1(cre/ERT)Nat/J mice (Jackson lab), all other KRAB-ZFP cluster KO ES cell lines originate from JM8A3.N1 C57BL/6N-Atm1Brd ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring. ### Generation of KRAB-ZFP expressing cell lines @@ -134,11 +134,11 @@ KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimizatio ### CRISPR/Cas9 mediated deletion of KRAB-ZFP clusters and an MMETn insertion -All gRNAs were expressed from the pX330-U6-Chimeric\_BB-CBh-hSpCas9 vector (RRID:Addgene\_42230) and nucleofected into 10 6 ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3). +All gRNAs were expressed from the pX330-U6-Chimeric\_BB-CBh-hSpCas9 vector (RRID:Addgene\_42230) and nucleofected into 106 ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3). ### ChIP-seq analysis -For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 10 7 cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB\_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB\_307019 or Covance Cat# MMS-101P-200, RRID:AB\_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB\_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB\_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB\_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB\_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB\_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively. +For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 107 cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:AB\_262044) or anti-HA (Abcam Cat# ab9110, RRID:AB\_307019 or Covance Cat# MMS-101P-200, RRID:AB\_10064068) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:AB\_2532132) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:AB\_221569) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:AB\_306649), H3K4me1 (Abcam Cat# ab8895, RRID:AB\_306847) and H3K27ac (Abcam Cat# ab4729, RRID:AB\_2118291) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively. ChIP-seq libraries were constructed and sequenced as indicated in Supplementary file 4. Reads were mapped to the mm9 genome using Bowtie (RRID:SCR\_005476; settings: --best) or Bowtie2 (Langmead and Salzberg, 2012) as indicated in Supplementary file 4. Under these settings, reads that map to multiple genomic regions are assigned to the top-scored match and, if a set of equally good choices is encountered, a pseudo-random number is used to choose one location. Peaks were called using MACS14 (RRID:SCR\_013291) under high stringency settings (p<1e-10, peak enrichment >20) (Zhang et al., 2008). Peaks were called both over the Input control and a FLAG or HA control ChIP (unless otherwise stated in Supplementary file 4) and only peaks that were called in both settings were kept for further analysis. In cases when the stringency settings did not result in at least 50 peaks, the settings were changed to medium (p<1e-10, peak enrichment >10) or low (p<1e-5, peak enrichment >10) stringency (Supplementary file 4). For further analysis, all peaks were scaled to 200 bp regions centered around the peak summits. The overlap of the scaled peaks to each repeat element in UCSC Genome Browser (RRID:SCR\_005780) were calculated by using the bedfisher function (settings: -f 0.25) from BEDTools (RRID:SCR\_006646). The right-tailed p-values between pair-wise comparison of each ChIP-seq peak and repeat element were extracted, and then adjusted using the Benjamini-Hochberg approach implemented in the R function p.adjust(). Binding motifs were determined using only nonrepetitive (<10% repeat content) peaks with MEME (Bailey et al., 2009). MEME motifs were compared with in silico predicted motifs (Najafabadi et al., 2015) using Tomtom (Bailey et al., 2009) and considered as significantly overlapping with a False Discovery Rate (FDR) below 0.1. To find MEME and predicted motifs in repetitive peaks, we used FIMO (Bailey et al., 2009). Differential H3K9me3 and KAP1 distribution in WT and Chr2-cl or Chr4-cl KO ES cells at TEs was determined by counting ChIP-seq reads overlapping annotated insertions of each TE group using BEDTools (MultiCovBed). Additionally, ChIP-seq reads were counted at the TE fraction that was bound by Chr2-cl or Chr4-cl KRAB-ZFPs (overlapping with 200 bp peaks). Count tables were concatenated and analyzed using DESeq2 (Love et al., 2014). The previously published ChIP-seq datasets for KAP1 (Castro-Diaz et al., 2014) and H3K9me3 (Dan et al., 2014) were re-mapped using Bowtie (--best). @@ -156,11 +156,11 @@ For RRBS-seq analysis, Chr4-cl WT and KO ES cells were grown in either standard ### Retrotransposition assay -The retrotransposition vectors pCMV-MusD2, pCMV-MusD2-neoTNF and pCMV-ETnI1-neoTNF (Ribet et al., 2004) were a kind gift from Dixie Mager. To partially delete the Gm13051 binding site within pCMV-MusD2-neoTNF, the vector was cut with KpnI and re-ligated using a repair oligo, leaving a 24 bp deletion within the Gm13051 binding site. The Rex2 binding site in pCMV-ETnI1-neoTNF was deleted by cutting the vector with EcoRI and XbaI followed by re-ligation using two overlapping PCR products, leaving a 45 bp deletion while maintaining the rest of the vector unchanged (see Supplementary file 3 for primer sequences). For MusD retrotransposition assays, 5 × 10 4 HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma). +The retrotransposition vectors pCMV-MusD2, pCMV-MusD2-neoTNF and pCMV-ETnI1-neoTNF (Ribet et al., 2004) were a kind gift from Dixie Mager. To partially delete the Gm13051 binding site within pCMV-MusD2-neoTNF, the vector was cut with KpnI and re-ligated using a repair oligo, leaving a 24 bp deletion within the Gm13051 binding site. The Rex2 binding site in pCMV-ETnI1-neoTNF was deleted by cutting the vector with EcoRI and XbaI followed by re-ligation using two overlapping PCR products, leaving a 45 bp deletion while maintaining the rest of the vector unchanged (see Supplementary file 3 for primer sequences). For MusD retrotransposition assays, 5 × 104 HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma). ### Capture-seq screen -To identify novel retrotransposon insertions, genomic DNA from various tissues (Supplementary file 4) was purified and used for library construction with target enrichment using the SureSelect QXT Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4\_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4\_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software. +To identify novel retrotransposon insertions, genomic DNA from various tissues (Supplementary file 4) was purified and used for library construction with target enrichment using the SureSelectQXT Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4\_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4\_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software. ## Funding Information diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt b/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt index 0787b59170..31d65f60c8 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt @@ -22,44 +22,44 @@ item-0 at level 0: unspecified: group _root_ item-20 at level 3: section_header: Outcome and covariate variables item-21 at level 4: text: The outcome of interest for this ... r than or equal to 1% Mf or 2% Ag [4]. item-22 at level 4: inline: group group - item-23 at level 5: text: Potential covariates were derive ... ous variables were derived from either + item-23 at level 5: text: Potential covariates were derive ... us variables were derived from either item-24 at level 5: text: a priori - item-25 at level 5: text: knowledge or through exploratory ... is and the final categorizations used. + item-25 at level 5: text: knowledge or through explorator ... is and the final categorizations used. item-26 at level 4: section_header: Baseline prevalence item-27 at level 5: text: Baseline prevalence can be assum ... (2) using the cut-off of <10% or ≥10%. item-28 at level 4: section_header: Agent item-29 at level 5: inline: group group - item-30 at level 6: text: In terms of differences in trans ... mics by agent, research has shown that + item-30 at level 6: text: In terms of differences in trans ... ics by agent, research has shown that item-31 at level 6: text: Brugia - item-32 at level 6: text: spp. are more susceptible to the anti-filarial drug regimens than + item-32 at level 6: text: spp. are more susceptible to the anti-filarial drug regimens than item-33 at level 6: text: Wuchereria bancrofti - item-34 at level 6: text: parasites [23]. Thus, we combined districts reporting + item-34 at level 6: text: parasites [23]. Thus, we combined districts reporting item-35 at level 6: text: B - item-36 at level 6: text: . + item-36 at level 6: text: . item-37 at level 6: text: malayi - item-38 at level 6: text: and + item-38 at level 6: text: and item-39 at level 6: text: B - item-40 at level 6: text: . + item-40 at level 6: text: . item-41 at level 6: text: timori - item-42 at level 6: text: and compared them to areas with + item-42 at level 6: text: and compared them to areas with item-43 at level 6: text: W - item-44 at level 6: text: . + item-44 at level 6: text: . item-45 at level 6: text: bancrofti - item-46 at level 6: text: or mixed parasites. Two variable ... e were variables delineating vectors ( + item-46 at level 6: text: or mixed parasites. Two variabl ... e were variables delineating vectors ( item-47 at level 6: text: Anopheles - item-48 at level 6: text: or + item-48 at level 6: text: or item-49 at level 6: text: Mansonia - item-50 at level 6: text: compared to + item-50 at level 6: text: compared to item-51 at level 6: text: Culex item-52 at level 6: text: ) from the environmental domain ... dazole (DEC-ALB)] from the MDA domain. item-53 at level 4: section_header: Environment item-54 at level 5: text: LF transmission intensity is inf ... dicates a higher level of “greenness.” item-55 at level 5: inline: group group - item-56 at level 6: text: We included the socio-economic v ... countries LF is mostly transmitted by + item-56 at level 6: text: We included the socio-economic v ... countries LF is mostly transmitted by item-57 at level 6: text: Culex - item-58 at level 6: text: in urban areas and by + item-58 at level 6: text: in urban areas and by item-59 at level 6: text: Anopheles - item-60 at level 6: text: in rural areas [32]. Additionall ... proxy for socio-economic status [33]. + item-60 at level 6: text: in rural areas [32]. Additional ... proxy for socio-economic status [33]. item-61 at level 5: text: Finally, all or parts of distric ... s were co-endemic with onchocerciasis. item-62 at level 4: section_header: MDA item-63 at level 5: text: Treatment effectiveness depends ... esent a threat to elimination [41,42]. @@ -71,13 +71,13 @@ item-0 at level 0: unspecified: group _root_ item-69 at level 3: section_header: Statistical analysis and modeling item-70 at level 4: text: Statistical analysis and modelin ... d the number of variables accordingly. item-71 at level 4: inline: group group - item-72 at level 5: text: Sensitivity analysis was perform ... ica, (3) including only districts with + item-72 at level 5: text: Sensitivity analysis was perform ... ca, (3) including only districts with item-73 at level 5: text: W - item-74 at level 5: text: . + item-74 at level 5: text: . item-75 at level 5: text: bancrofti - item-76 at level 5: text: parasite, and (4) including only districts with + item-76 at level 5: text: parasite, and (4) including only districts with item-77 at level 5: text: Anopheles - item-78 at level 5: text: as the primary vector. The sensi ... ot have been truly LF-endemic [43,44]. + item-78 at level 5: text: as the primary vector. The sens ... ot have been truly LF-endemic [43,44]. item-79 at level 2: section_header: Results item-80 at level 3: text: The overall pre-TAS pass rate fo ... ts had baseline prevalences below 20%. item-81 at level 3: picture @@ -85,7 +85,7 @@ item-0 at level 0: unspecified: group _root_ item-82 at level 3: picture item-82 at level 4: caption: Fig 2 District-level baseline prevalence by country. item-83 at level 3: inline: group group - item-84 at level 4: text: Fig 3 shows the unadjusted analy ... FTS diagnostic test, primary vector of + item-84 at level 4: text: Fig 3 shows the unadjusted analy ... TS diagnostic test, primary vector of item-85 at level 4: text: Culex item-86 at level 4: text: , treatment with DEC-ALB, higher ... overage, and sufficient rounds of MDA. item-87 at level 3: picture @@ -95,17 +95,17 @@ item-0 at level 0: unspecified: group _root_ item-90 at level 3: picture item-90 at level 4: caption: Fig 4 Adjusted risk ratios for pre-TAS failure with 95% Confidence Interval from log-binomial model. item-91 at level 3: inline: group group - item-92 at level 4: text: Sensitivity analyses were conduc ... cts in Africa, (3) only districts with + item-92 at level 4: text: Sensitivity analyses were conduc ... ts in Africa, (3) only districts with item-93 at level 4: text: W - item-94 at level 4: text: . + item-94 at level 4: text: . item-95 at level 4: text: bancrofti - item-96 at level 4: text: , and (4) only districts with + item-96 at level 4: text: , and (4) only districts with item-97 at level 4: text: Anopheles - item-98 at level 4: text: as primary vector. The results o ... hough the estimate was unstable in the + item-98 at level 4: text: as primary vector. The results ... ough the estimate was unstable in the item-99 at level 4: text: W - item-100 at level 4: text: . + item-100 at level 4: text: . item-101 at level 4: text: bancrofti - item-102 at level 4: text: -only and + item-102 at level 4: text: -only and item-103 at level 4: text: Anopheles item-104 at level 4: text: -only models (models 3 and 4 res ... gnified by large confidence intervals. item-105 at level 3: table with [11x6] @@ -115,30 +115,30 @@ item-0 at level 0: unspecified: group _root_ item-107 at level 4: caption: Fig 5 Analysis of failures by model combinations. item-108 at level 2: section_header: Discussion item-109 at level 3: inline: group group - item-110 at level 4: text: This paper reports for the first ... similar to what was found in Goldberg + item-110 at level 4: text: This paper reports for the first ... similar to what was found in Goldberg item-111 at level 4: text: et al item-112 at level 4: text: ., which explored ecological and ... ctors associated with TAS failure [7]. item-113 at level 3: text: Though diagnostic test used was ... FTS was more sensitive than ICT [45]. item-114 at level 3: inline: group group - item-115 at level 4: text: Elevation was the only environme ... ous studies [8,31], including Goldberg + item-115 at level 4: text: Elevation was the only environme ... us studies [8,31], including Goldberg item-116 at level 4: text: et al item-117 at level 4: text: . [7], who used a cutoff of 200 ... ich impact vector chances of survival. item-118 at level 3: inline: group group - item-119 at level 4: text: The small number of failures ove ... ied in the bivariate analyses, such as + item-119 at level 4: text: The small number of failures ove ... ed in the bivariate analyses, such as item-120 at level 4: text: Culex - item-121 at level 4: text: vector, higher population densit ... ecisions. Other models have shown that + item-121 at level 4: text: vector, higher population densi ... cisions. Other models have shown that item-122 at level 4: text: Culex - item-123 at level 4: text: as the predominant vector in a district, compared to + item-123 at level 4: text: as the predominant vector in a district, compared to item-124 at level 4: text: Anopheles item-125 at level 4: text: , results in more intense interv ... search has shown the opposite [15,16]. item-126 at level 3: inline: group group - item-127 at level 4: text: All other variables included in ... -TAS failure in our analysis. Goldberg + item-127 at level 4: text: All other variables included in ... TAS failure in our analysis. Goldberg item-128 at level 4: text: et al - item-129 at level 4: text: . found + item-129 at level 4: text: . found item-130 at level 4: text: Brugia - item-131 at level 4: text: spp. to be significantly associa ... to the small number of districts with + item-131 at level 4: text: spp. to be significantly associ ... to the small number of districts with item-132 at level 4: text: Brugia - item-133 at level 4: text: spp. in our dataset (6%) compared to 46% in the Goldberg + item-133 at level 4: text: spp. in our dataset (6%) compared to 46% in the Goldberg item-134 at level 4: text: et al item-135 at level 4: text: . article [7]. MDA coverage leve ... are not necessary to lower prevalence. item-136 at level 3: text: Limitations to this study includ ... reducing LF prevalence [41,48,51–53]. diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.json b/tests/data/jats/groundtruth/pntd.0008301.nxml.json index 36c7c0587c..433917b27a 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.json +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pntd.0008301", "origin": { "mimetype": "application/xml", @@ -927,8 +927,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either", - "text": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either" + "orig": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either ", + "text": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either " }, { "self_ref": "#/texts/22", @@ -958,8 +958,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used.", - "text": "knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used." + "orig": " knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used.", + "text": " knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used." }, { "self_ref": "#/texts/24", @@ -1016,8 +1016,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In terms of differences in transmission dynamics by agent, research has shown that", - "text": "In terms of differences in transmission dynamics by agent, research has shown that" + "orig": "In terms of differences in transmission dynamics by agent, research has shown that ", + "text": "In terms of differences in transmission dynamics by agent, research has shown that " }, { "self_ref": "#/texts/28", @@ -1047,8 +1047,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. are more susceptible to the anti-filarial drug regimens than", - "text": "spp. are more susceptible to the anti-filarial drug regimens than" + "orig": " spp. are more susceptible to the anti-filarial drug regimens than ", + "text": " spp. are more susceptible to the anti-filarial drug regimens than " }, { "self_ref": "#/texts/30", @@ -1078,8 +1078,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "parasites [23]. Thus, we combined districts reporting", - "text": "parasites [23]. Thus, we combined districts reporting" + "orig": " parasites [23]. Thus, we combined districts reporting ", + "text": " parasites [23]. Thus, we combined districts reporting " }, { "self_ref": "#/texts/32", @@ -1109,8 +1109,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/34", @@ -1140,8 +1140,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/36", @@ -1171,8 +1171,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/38", @@ -1202,8 +1202,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and compared them to areas with", - "text": "and compared them to areas with" + "orig": " and compared them to areas with ", + "text": " and compared them to areas with " }, { "self_ref": "#/texts/40", @@ -1233,8 +1233,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/42", @@ -1264,8 +1264,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (", - "text": "or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (" + "orig": " or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (", + "text": " or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (" }, { "self_ref": "#/texts/44", @@ -1295,8 +1295,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or", - "text": "or" + "orig": " or ", + "text": " or " }, { "self_ref": "#/texts/46", @@ -1326,8 +1326,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "compared to", - "text": "compared to" + "orig": " compared to ", + "text": " compared to " }, { "self_ref": "#/texts/48", @@ -1404,8 +1404,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by", - "text": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by" + "orig": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by ", + "text": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by " }, { "self_ref": "#/texts/53", @@ -1435,8 +1435,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in urban areas and by", - "text": "in urban areas and by" + "orig": " in urban areas and by ", + "text": " in urban areas and by " }, { "self_ref": "#/texts/55", @@ -1466,8 +1466,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33].", - "text": "in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33]." + "orig": " in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33].", + "text": " in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33]." }, { "self_ref": "#/texts/57", @@ -1624,8 +1624,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with", - "text": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with" + "orig": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with ", + "text": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with " }, { "self_ref": "#/texts/68", @@ -1655,8 +1655,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/70", @@ -1686,8 +1686,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "parasite, and (4) including only districts with", - "text": "parasite, and (4) including only districts with" + "orig": " parasite, and (4) including only districts with ", + "text": " parasite, and (4) including only districts with " }, { "self_ref": "#/texts/72", @@ -1717,8 +1717,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44].", - "text": "as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]." + "orig": " as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44].", + "text": " as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]." }, { "self_ref": "#/texts/74", @@ -1815,8 +1815,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of", - "text": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of" + "orig": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of ", + "text": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of " }, { "self_ref": "#/texts/79", @@ -1906,8 +1906,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with", - "text": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with" + "orig": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with ", + "text": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with " }, { "self_ref": "#/texts/86", @@ -1937,8 +1937,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/88", @@ -1968,8 +1968,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and (4) only districts with", - "text": ", and (4) only districts with" + "orig": ", and (4) only districts with ", + "text": ", and (4) only districts with " }, { "self_ref": "#/texts/90", @@ -1999,8 +1999,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the", - "text": "as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the" + "orig": " as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the ", + "text": " as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the " }, { "self_ref": "#/texts/92", @@ -2030,8 +2030,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/94", @@ -2061,8 +2061,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-only and", - "text": "-only and" + "orig": "-only and ", + "text": "-only and " }, { "self_ref": "#/texts/96", @@ -2181,8 +2181,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg", - "text": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg" + "orig": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg ", + "text": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg " }, { "self_ref": "#/texts/103", @@ -2236,8 +2236,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg", - "text": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg" + "orig": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg ", + "text": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg " }, { "self_ref": "#/texts/107", @@ -2279,8 +2279,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as", - "text": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as" + "orig": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as ", + "text": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as " }, { "self_ref": "#/texts/110", @@ -2310,8 +2310,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that", - "text": "vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that" + "orig": " vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that ", + "text": " vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that " }, { "self_ref": "#/texts/112", @@ -2341,8 +2341,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as the predominant vector in a district, compared to", - "text": "as the predominant vector in a district, compared to" + "orig": " as the predominant vector in a district, compared to ", + "text": " as the predominant vector in a district, compared to " }, { "self_ref": "#/texts/114", @@ -2384,8 +2384,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg", - "text": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg" + "orig": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg ", + "text": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg " }, { "self_ref": "#/texts/117", @@ -2415,8 +2415,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". found", - "text": ". found" + "orig": ". found ", + "text": ". found " }, { "self_ref": "#/texts/119", @@ -2446,8 +2446,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with", - "text": "spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with" + "orig": " spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with ", + "text": " spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with " }, { "self_ref": "#/texts/121", @@ -2477,8 +2477,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. in our dataset (6%) compared to 46% in the Goldberg", - "text": "spp. in our dataset (6%) compared to 46% in the Goldberg" + "orig": " spp. in our dataset (6%) compared to 46% in the Goldberg ", + "text": " spp. in our dataset (6%) compared to 46% in the Goldberg " }, { "self_ref": "#/texts/123", diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.md b/tests/data/jats/groundtruth/pntd.0008301.nxml.md index 6522294806..4b899e9c54 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.md +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.md @@ -68,7 +68,7 @@ Baseline prevalence can be assumed as a proxy for local transmission conditions #### Agent -In terms of differences in transmission dynamics by agent, research has shown that *Brugia* spp. are more susceptible to the anti-filarial drug regimens than *Wuchereria bancrofti* parasites [23]. Thus, we combined districts reporting *B* . *malayi* and *B* . *timori* and compared them to areas with *W* . *bancrofti* or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors ( *Anopheles* or *Mansonia* compared to *Culex* ) from the environmental domain and drug package [ivermectin-albendazole (IVM-ALB) compared to diethylcarbamazine-albendazole (DEC-ALB)] from the MDA domain. +In terms of differences in transmission dynamics by agent, research has shown that *Brugia* spp. are more susceptible to the anti-filarial drug regimens than *Wuchereria bancrofti* parasites [23]. Thus, we combined districts reporting *B*. *malayi* and *B*. *timori* and compared them to areas with *W*. *bancrofti* or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (*Anopheles* or *Mansonia* compared to *Culex*) from the environmental domain and drug package [ivermectin-albendazole (IVM-ALB) compared to diethylcarbamazine-albendazole (DEC-ALB)] from the MDA domain. #### Environment @@ -96,7 +96,7 @@ The dataset, summarized at the district level, included information from 568 dis Statistical analysis and modeling were done with Stata MP 15.1 (College Station, TX). Descriptive statistics comparing various variables to the principle outcome were performed. Significant differences were identified using a chi-square test. A generalized linear model (GLM) with a log link and binomial error distribution—which estimates relative risks—was developed using forward stepwise modeling methods (called log-binomial model). Models with higher pseudo-r-squared and lower Akaike information criterion (AIC) were retained at each step. Pseudo-r-squared is a value between 0 and 1 with the higher the value, the better the model is at predicting the outcome of interest. AIC values are used to compare the relative quality of models compared to each other; in general, a lower value indicates a better model. Variables were tested by factor group. Once a variable was selected from the group, no other variable in that same group was eligible to be included in the final model due to issues of collinearity and small sample sizes. Interaction between terms in the model was tested after model selection, and interaction terms that modified the original terms’ significance were included in the final model. Overall, the number of potential variables able to be included in the model remained low due to the relatively small number of failure results (13%) in the dataset. Furthermore, the models with more than 3 variables and one interaction term either were unstable (indicated by very large confidence interval widths) or did not improve the model by being significant predictors or by modifying other parameters already in the model. These models were at heightened risk of non-convergence; we limited the number of variables accordingly. -Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with *W* . *bancrofti* parasite, and (4) including only districts with *Anopheles* as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]. +Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with *W*. *bancrofti* parasite, and (4) including only districts with *Anopheles* as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]. ## Results @@ -110,7 +110,7 @@ Fig 2 District-level baseline prevalence by country. -Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of *Culex* , treatment with DEC-ALB, higher elevation, higher population density, higher EVI, higher annual rainfall, and six or more rounds of MDA. Variables that were not significantly associated with pre-TAS failure included diagnostic method used (Ag or Mf), parasite, co-endemicity for onchocerciasis, median MDA coverage, and sufficient rounds of MDA. +Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of *Culex*, treatment with DEC-ALB, higher elevation, higher population density, higher EVI, higher annual rainfall, and six or more rounds of MDA. Variables that were not significantly associated with pre-TAS failure included diagnostic method used (Ag or Mf), parasite, co-endemicity for onchocerciasis, median MDA coverage, and sufficient rounds of MDA. Fig 3 Percent pre-TAS failure by each characteristic (unadjusted). @@ -124,7 +124,7 @@ Fig 4 Adjusted risk ratios for pre-TAS failure with 95% Confidence Interval from -Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with *W* . *bancrofti* , and (4) only districts with *Anopheles* as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the *W* . *bancrofti* -only and *Anopheles* -only models (models 3 and 4 respectively), as signified by large confidence intervals. +Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with *W*. *bancrofti*, and (4) only districts with *Anopheles* as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the *W*. *bancrofti*-only and *Anopheles*-only models (models 3 and 4 respectively), as signified by large confidence intervals. Table 2 Adjusted risk ratios for pre-TAS failure from log-binomial model sensitivity analysis. @@ -149,15 +149,15 @@ Fig 5 Analysis of failures by model combinations. ## Discussion -This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg *et al* ., which explored ecological and socioeconomic factors associated with TAS failure [7]. +This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg *et al*., which explored ecological and socioeconomic factors associated with TAS failure [7]. Though diagnostic test used was selected for the final log-binomial model, neither category (FTS or ICT) were significant after interaction with high baseline. FTS alone is significant in the bivariate analysis compared to ICT or Mf. This result is not surprising given previous research which found that FTS was more sensitive than ICT [45]. -Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg *et al* . [7], who used a cutoff of 200 meters. Elevation likely also encompasses some related environmental concepts, such as vector habitat, greenness (EVI), or rainfall, which impact vector chances of survival. +Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg *et al*. [7], who used a cutoff of 200 meters. Elevation likely also encompasses some related environmental concepts, such as vector habitat, greenness (EVI), or rainfall, which impact vector chances of survival. -The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as *Culex* vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that *Culex* as the predominant vector in a district, compared to *Anopheles* , results in more intense interventions needed to reach elimination [24,41]. Higher population density, which was also found to predict TAS failure [7], could be related to different vector species’ transmission dynamics in urban areas, as well as the fact that MDAs are harder to conduct and to accurately measure in urban areas [46,47]. Both higher enhanced vegetation index (>0.3) and higher rainfall (>700 mm per year) contribute to expansion of vector habitats and population. Additionally, having more than five rounds of MDA before pre-TAS was also statistically significantly associated with higher failure in the bivariate analysis. It is unclear why higher number of rounds is associated with first pre-TAS failure given that other research has shown the opposite [15,16]. +The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as *Culex* vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that *Culex* as the predominant vector in a district, compared to *Anopheles*, results in more intense interventions needed to reach elimination [24,41]. Higher population density, which was also found to predict TAS failure [7], could be related to different vector species’ transmission dynamics in urban areas, as well as the fact that MDAs are harder to conduct and to accurately measure in urban areas [46,47]. Both higher enhanced vegetation index (>0.3) and higher rainfall (>700 mm per year) contribute to expansion of vector habitats and population. Additionally, having more than five rounds of MDA before pre-TAS was also statistically significantly associated with higher failure in the bivariate analysis. It is unclear why higher number of rounds is associated with first pre-TAS failure given that other research has shown the opposite [15,16]. -All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg *et al* . found *Brugia* spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with *Brugia* spp. in our dataset (6%) compared to 46% in the Goldberg *et al* . article [7]. MDA coverage levels were not significantly associated with pre-TAS failure, likely due to the lack of variance in the coverage data since WHO guidance dictates a minimum of five rounds of MDA with ≥65% epidemiological coverage to be eligible to implement pre-TAS. It should not be interpreted as evidence that high MDA coverage levels are not necessary to lower prevalence. +All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg *et al*. found *Brugia* spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with *Brugia* spp. in our dataset (6%) compared to 46% in the Goldberg *et al*. article [7]. MDA coverage levels were not significantly associated with pre-TAS failure, likely due to the lack of variance in the coverage data since WHO guidance dictates a minimum of five rounds of MDA with ≥65% epidemiological coverage to be eligible to implement pre-TAS. It should not be interpreted as evidence that high MDA coverage levels are not necessary to lower prevalence. Limitations to this study include data sources, excluded data, unreported data, misassigned data, and aggregation of results at the district level. The main data sources for this analysis were programmatic data, which may be less accurate than data collected specifically for research purposes. This is particularly true of the MDA coverage data, where some countries report data quality challenges in areas of instability or frequent population migration. Even though risk factors such as age, sex, compliance with MDA, and use of bednets have been shown to influence infection in individuals [40,48–50], we could not include factors from the human host domain in our analysis, as data sets were aggregated at site level and did not include individual information. In addition, vector control data were not universally available across the 13 countries and thus were not included in the analysis, despite studies showing that vector control has an impact on reducing LF prevalence [41,48,51–53]. diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.itxt b/tests/data/jats/groundtruth/pone.0234687.nxml.itxt index f96ccd7396..5e663eb086 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.itxt +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.itxt @@ -8,7 +8,7 @@ item-0 at level 0: unspecified: group _root_ item-7 at level 3: inline: group group item-8 at level 4: text: Greenhouse gas (GHG) emissions f ... ssions [1], ranging from 5.5–7.5 Gt CO item-9 at level 4: text: 2 - item-10 at level 4: text: equivalents (CO + item-10 at level 4: text: equivalents (CO item-11 at level 4: text: 2 item-12 at level 4: text: e) yr item-13 at level 4: text: -1 @@ -18,7 +18,7 @@ item-0 at level 0: unspecified: group _root_ item-17 at level 4: text: 4 item-18 at level 4: text: ) emissions from enteric ferment ... ment [6] and manure management [7]. CH item-19 at level 4: text: 4 - item-20 at level 4: text: emissions from enteric fermentat ... anagement to mitigate the C footprint. + item-20 at level 4: text: emissions from enteric fermenta ... anagement to mitigate the C footprint. item-21 at level 3: text: In subtropical climate zones, co ... t in tropical pastures (e.g. [17–19]). item-22 at level 3: text: It has been shown that dairy cow ... sions from crop and reduced DM intake. item-23 at level 3: text: The aim of this work was to quan ... uring lactation periods was evaluated. @@ -35,23 +35,23 @@ item-0 at level 0: unspecified: group _root_ item-32 at level 5: caption: Table 1 Descriptive characteristics of the herd. item-33 at level 3: section_header: Data sources and livestock system description item-34 at level 4: inline: group group - item-35 at level 5: text: The individual feed requirements ... cows that received both 75 and 50% of + item-35 at level 5: text: The individual feed requirements ... cows that received both 75 and 50% of item-36 at level 5: text: ad libitum - item-37 at level 5: text: TMR intake with access to grazing a tropical pasture (pearl-millet, + item-37 at level 5: text: TMR intake with access to grazing a tropical pasture (pearl-millet, item-38 at level 5: text: Pennisetum glaucum - item-39 at level 5: text: ‘Campeiro’) compared to cows receiving + item-39 at level 5: text: ‘Campeiro’) compared to cows receiving item-40 at level 5: text: ad libitum - item-41 at level 5: text: TMR intake. Cows grazing on a temperate pasture (ryegrass, + item-41 at level 5: text: TMR intake. Cows grazing on a temperate pasture (ryegrass, item-42 at level 5: text: Lolium multiflorum - item-43 at level 5: text: ‘Maximus’) did not need changes to ECM production compared to the + item-43 at level 5: text: ‘Maximus’) did not need changes to ECM production compared to the item-44 at level 5: text: ad libitum - item-45 at level 5: text: TMR intake group. + item-45 at level 5: text: TMR intake group. item-46 at level 4: inline: group group - item-47 at level 5: text: Using experimental data, three s ... evaluated during the lactation period: + item-47 at level 5: text: Using experimental data, three s ... valuated during the lactation period: item-48 at level 5: text: ad libitum - item-49 at level 5: text: TMR intake, and 75, and 50% of + item-49 at level 5: text: TMR intake, and 75, and 50% of item-50 at level 5: text: ad libitum - item-51 at level 5: text: TMR intake with access to grazin ... nction of month ([26], Civiero et al., + item-51 at level 5: text: TMR intake with access to grazi ... ction of month ([26], Civiero et al., item-52 at level 5: text: in press item-53 at level 5: text: ). From April to October (210 da ... med during an entire lactation period. item-54 at level 3: section_header: Impact assessment @@ -62,23 +62,23 @@ item-0 at level 0: unspecified: group _root_ item-59 at level 5: text: 2 item-60 at level 5: text: , CH item-61 at level 5: text: 4 - item-62 at level 5: text: and N + item-62 at level 5: text: and N item-63 at level 5: text: 2 item-64 at level 5: text: O by their 100-year global warming potential (GWP item-65 at level 5: text: 100 item-66 at level 5: text: ), based on IPCC assessment report 5 (AR5; [27]). The values of GWP item-67 at level 5: text: 100 - item-68 at level 5: text: are 1, 28 and 265 for CO + item-68 at level 5: text: are 1, 28 and 265 for CO item-69 at level 5: text: 2 item-70 at level 5: text: , CH item-71 at level 5: text: 4 - item-72 at level 5: text: and N + item-72 at level 5: text: and N item-73 at level 5: text: 2 item-74 at level 5: text: O, respectively. item-75 at level 3: section_header: Feed production item-76 at level 4: section_header: Diets composition item-77 at level 5: inline: group group - item-78 at level 6: text: The DM intake of each ingredient ... ennial tropical pasture (kikuyu grass, + item-78 at level 6: text: The DM intake of each ingredient ... nnial tropical pasture (kikuyu grass, item-79 at level 6: text: Pennisetum clandestinum item-80 at level 6: text: ). The DM intake of calves, heif ... meet the net energy for lactation (NE item-81 at level 6: text: L @@ -119,49 +119,49 @@ item-0 at level 0: unspecified: group _root_ item-114 at level 6: text: 2 item-115 at level 6: text: -C emissions from lime + urea, d ... stures, a C sequestration of 0.57 t ha item-116 at level 6: text: -1 - item-117 at level 6: text: was used based on a 9-year study ... red was 8.9 (no-tillage) and 14.3 L ha + item-117 at level 6: text: was used based on a 9-year stud ... red was 8.9 (no-tillage) and 14.3 L ha item-118 at level 6: text: -1 - item-119 at level 6: text: (disking) for annual tropical an ... te pastures, respectively [40]. The CO + item-119 at level 6: text: (disking) for annual tropical a ... te pastures, respectively [40]. The CO item-120 at level 6: text: 2 - item-121 at level 6: text: from fuel combustion was 2.7 kg CO + item-121 at level 6: text: from fuel combustion was 2.7 kg CO item-122 at level 6: text: 2 - item-123 at level 6: text: L + item-123 at level 6: text: L item-124 at level 6: text: -1 - item-125 at level 6: text: [41]. Secondary sources of emiss ... factors described by Rotz et al. [42]. + item-125 at level 6: text: [41]. Secondary sources of emis ... factors described by Rotz et al. [42]. item-126 at level 5: table with [28x5] item-126 at level 6: caption: Table 4 GHG emissions from On-farm feed production. item-127 at level 3: section_header: Animal husbandry item-128 at level 4: inline: group group item-129 at level 5: text: The CH item-130 at level 5: text: 4 - item-131 at level 5: text: emissions from enteric fermentation intensity (g (kg ECM) + item-131 at level 5: text: emissions from enteric fermentation intensity (g (kg ECM) item-132 at level 5: text: -1 item-133 at level 5: text: ) was a function of estimated CH item-134 at level 5: text: 4 - item-135 at level 5: text: yield (g (kg DM intake) + item-135 at level 5: text: yield (g (kg DM intake) item-136 at level 5: text: -1 item-137 at level 5: text: ), actual DM intake and ECM. The enteric CH item-138 at level 5: text: 4 - item-139 at level 5: text: yield was estimated as a functio ... proposed by Niu et al. [43], where: CH + item-139 at level 5: text: yield was estimated as a functi ... proposed by Niu et al. [43], where: CH item-140 at level 5: text: 4 - item-141 at level 5: text: yield (g (kg DM intake) + item-141 at level 5: text: yield (g (kg DM intake) item-142 at level 5: text: -1 item-143 at level 5: text: ) = 13.8 + 0.185 × NDF (% DM intake). item-144 at level 3: section_header: Manure from confined cows and urine and dung from grazing animals item-145 at level 4: inline: group group item-146 at level 5: text: The CH item-147 at level 5: text: 4 - item-148 at level 5: text: emission from manure (kg (kg ECM) + item-148 at level 5: text: emission from manure (kg (kg ECM) item-149 at level 5: text: -1 item-150 at level 5: text: ) was a function of daily CH item-151 at level 5: text: 4 - item-152 at level 5: text: emission from manure (kg cow + item-152 at level 5: text: emission from manure (kg cow item-153 at level 5: text: -1 item-154 at level 5: text: ) and daily ECM (kg cow item-155 at level 5: text: -1 item-156 at level 5: text: ). The daily CH item-157 at level 5: text: 4 - item-158 at level 5: text: emission from manure was estimat ... olatile solid (VS) excreted (kg DM cow + item-158 at level 5: text: emission from manure was estima ... olatile solid (VS) excreted (kg DM cow item-159 at level 5: text: -1 item-160 at level 5: text: ) in manure. The daily VS was es ... n an organic matter (OM) basis (kg day item-161 at level 5: text: -1 @@ -190,11 +190,11 @@ item-0 at level 0: unspecified: group _root_ item-184 at level 5: text: 2 item-185 at level 5: text: O-N (kg N) item-186 at level 5: text: -1 - item-187 at level 5: text: stored in a pit below animal confinements, and 0.02 kg N + item-187 at level 5: text: stored in a pit below animal confinements, and 0.02 kg N item-188 at level 5: text: 2 item-189 at level 5: text: O-N (kg of urine and dung) item-190 at level 5: text: -1 - item-191 at level 5: text: deposited on pasture [38]. The indirect N + item-191 at level 5: text: deposited on pasture [38]. The indirect N item-192 at level 5: text: 2 item-193 at level 5: text: O emissions from storage manure ... using the IPCC [38] emission factors. item-194 at level 3: section_header: Farm management @@ -218,36 +218,36 @@ item-0 at level 0: unspecified: group _root_ item-211 at level 5: text: -1 item-212 at level 5: text: ) [41]. Emissions from manufactu ... w (t) × (kg machinery mass (kg manure) item-213 at level 5: text: -1 - item-214 at level 5: text: × 10 + item-214 at level 5: text: × 10 item-215 at level 5: text: −3 item-216 at level 5: text: ) [42] × kg CO item-217 at level 5: text: 2 item-218 at level 5: text: e (kg machinery mass) item-219 at level 5: text: -1 - item-220 at level 5: text: [42]. + item-220 at level 5: text: [42]. item-221 at level 4: inline: group group item-222 at level 5: text: Emissions from electricity for m ... ated using two emission factors (kg CO item-223 at level 5: text: 2 - item-224 at level 5: text: kWh + item-224 at level 5: text: kWh item-225 at level 5: text: -1 item-226 at level 5: text: ). The first one is based on Uni ... ivities is 0.06 kWh (kg milk produced) item-227 at level 5: text: -1 - item-228 at level 5: text: [47]. The annual electricity use for lighting was 75 kWh cow + item-228 at level 5: text: [47]. The annual electricity use for lighting was 75 kWh cow item-229 at level 5: text: -1 item-230 at level 5: text: , which is the value considered ... ws in naturally ventilated barns [47]. item-231 at level 3: section_header: Co-product allocation item-232 at level 4: inline: group group item-233 at level 5: text: The C footprint for milk produce ... ibed by Thoma et al. [48]. Briefly, AR item-234 at level 5: text: milk - item-235 at level 5: text: = 1–6.04 × BMR, where + item-235 at level 5: text: = 1–6.04 × BMR, where item-236 at level 5: text: : - item-237 at level 5: text: AR + item-237 at level 5: text: AR item-238 at level 5: text: milk - item-239 at level 5: text: is the allocation ratio for milk ... during cow`s entire life (kg). The AR + item-239 at level 5: text: is the allocation ratio for mil ... during cow`s entire life (kg). The AR item-240 at level 5: text: milk - item-241 at level 5: text: were 0.854 and 0.849 for TMR and ... asture scenarios, respectively. The AR + item-241 at level 5: text: were 0.854 and 0.849 for TMR an ... asture scenarios, respectively. The AR item-242 at level 5: text: milk - item-243 at level 5: text: was applied to the whole emissio ... directly assigned to milk production. + item-243 at level 5: text: was applied to the whole emissi ... directly assigned to milk production. item-244 at level 3: section_header: Sensitivity analysis item-245 at level 4: text: A sensitivity index was calculat ... ses a similar change in the footprint. item-246 at level 2: section_header: Results and discussion @@ -258,17 +258,17 @@ item-0 at level 0: unspecified: group _root_ item-251 at level 5: text: 2 item-252 at level 5: text: e (kg ECM) item-253 at level 5: text: -1 - item-254 at level 5: text: (Fig 2C and 2D) in scenarios that included pastures compared to + item-254 at level 5: text: (Fig 2C and 2D) in scenarios that included pastures compared to item-255 at level 5: text: ad libitum - item-256 at level 5: text: TMR intake. Due to differences i ... values ranged from 0.92 to 1.04 kg CO + item-256 at level 5: text: TMR intake. Due to differences ... values ranged from 0.92 to 1.04 kg CO item-257 at level 5: text: 2 item-258 at level 5: text: e (kg ECM) item-259 at level 5: text: -1 - item-260 at level 5: text: for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO + item-260 at level 5: text: for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO item-261 at level 5: text: 2 item-262 at level 5: text: e (kg ECM) item-263 at level 5: text: -1 - item-264 at level 5: text: for cows with access to pasture. ... ocal emission factors for estimating N + item-264 at level 5: text: for cows with access to pasture ... ocal emission factors for estimating N item-265 at level 5: text: 2 item-266 at level 5: text: O-N emissions [37], manure emiss ... more than 5% of overall GHG emissions. item-267 at level 4: picture @@ -300,13 +300,13 @@ item-0 at level 0: unspecified: group _root_ item-292 at level 5: text: 2 item-293 at level 5: text: e (kg ECM) item-294 at level 5: text: -1 - item-295 at level 5: text: [8,55]. Thus, even though differ ... e emissions estimation, sequestered CO + item-295 at level 5: text: [8,55]. Thus, even though diffe ... e emissions estimation, sequestered CO item-296 at level 5: text: 2 item-297 at level 5: text: -C, etc.), herd productivity and ... the C footprint of the dairy systems. item-298 at level 4: inline: group group item-299 at level 5: text: The similarity of C footprint be ... served that an increase of 1000 kg cow item-300 at level 5: text: -1 - item-301 at level 5: text: (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO + item-301 at level 5: text: (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO item-302 at level 5: text: 2 item-303 at level 5: text: e (kg ECM) item-304 at level 5: text: -1 @@ -316,55 +316,55 @@ item-0 at level 0: unspecified: group _root_ item-308 at level 4: inline: group group item-309 at level 5: text: The lower C footprint in scenari ... emission factors [37] were used for N item-310 at level 5: text: 2 - item-311 at level 5: text: O emissions from urine and dung ... enarios including pastures compared to + item-311 at level 5: text: O emissions from urine and dung ... narios including pastures compared to item-312 at level 5: text: ad libitum - item-313 at level 5: text: TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N + item-313 at level 5: text: TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N item-314 at level 5: text: 2 item-315 at level 5: text: O-N (kg N) item-316 at level 5: text: -1 - item-317 at level 5: text: for urine and dung from grazing ... five times lower, averaging 0.004 kg N + item-317 at level 5: text: for urine and dung from grazing ... five times lower, averaging 0.004 kg N item-318 at level 5: text: 2 item-319 at level 5: text: O-N kg item-320 at level 5: text: -1 - item-321 at level 5: text: [37]. + item-321 at level 5: text: [37]. item-322 at level 3: section_header: Methane emissions item-323 at level 4: inline: group group item-324 at level 5: text: The enteric CH item-325 at level 5: text: 4 - item-326 at level 5: text: intensity was similar between di ... Fig 3). The large effect of enteric CH + item-326 at level 5: text: intensity was similar between d ... Fig 3). The large effect of enteric CH item-327 at level 5: text: 4 - item-328 at level 5: text: emissions on the whole C footpri ... cted, because the impact of enteric CH + item-328 at level 5: text: emissions on the whole C footpr ... cted, because the impact of enteric CH item-329 at level 5: text: 4 - item-330 at level 5: text: on GHG emissions of milk product ... o range from 44 to 60% of the total CO + item-330 at level 5: text: on GHG emissions of milk produc ... o range from 44 to 60% of the total CO item-331 at level 5: text: 2 item-332 at level 5: text: e [50,52,57,58]. However, emissi ... trate feeds are greater than 0.7 kg CO item-333 at level 5: text: 2 item-334 at level 5: text: e kg item-335 at level 5: text: -1 - item-336 at level 5: text: [59], which did not happen in this study. + item-336 at level 5: text: [59], which did not happen in this study. item-337 at level 4: picture item-337 at level 5: caption: Fig 3 Sensitivity of the C footprint. Sensitivity index = percentage change in C footprint for a 10% change in the given emission source divided by 10% of. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. item-338 at level 4: inline: group group item-339 at level 5: text: The lack of difference in enteric CH item-340 at level 5: text: 4 - item-341 at level 5: text: emissions in different systems c ... nual temperate pastures (495 g (kg DM) + item-341 at level 5: text: emissions in different systems ... nual temperate pastures (495 g (kg DM) item-342 at level 5: text: -1 item-343 at level 5: text: ) compared to corn silage (550 g (kg DM) item-344 at level 5: text: -1 item-345 at level 5: text: ). Hence, an expected, increase ... have shown that the actual enteric CH item-346 at level 5: text: 4 - item-347 at level 5: text: emissions may decrease with incl ... ybean meal [60] or increase enteric CH + item-347 at level 5: text: emissions may decrease with inc ... ybean meal [60] or increase enteric CH item-348 at level 5: text: 4 - item-349 at level 5: text: emissions when dairy cows grazin ... silage [61]. Additionally, enteric CH + item-349 at level 5: text: emissions when dairy cows grazi ... silage [61]. Additionally, enteric CH item-350 at level 5: text: 4 - item-351 at level 5: text: emissions did not differ between ... same scenarios as in this study [26]. + item-351 at level 5: text: emissions did not differ betwee ... same scenarios as in this study [26]. item-352 at level 3: section_header: Emissions from excreta and feed production item-353 at level 4: inline: group group item-354 at level 5: text: Using IPCC emission factors for N item-355 at level 5: text: 2 item-356 at level 5: text: O emissions from urine and dung [38] and those from Table 3, CH item-357 at level 5: text: 4 - item-358 at level 5: text: emissions from manure decreased 0.07 kg CO + item-358 at level 5: text: emissions from manure decreased 0.07 kg CO item-359 at level 5: text: 2 item-360 at level 5: text: e (kg ECM) item-361 at level 5: text: -1 @@ -374,9 +374,9 @@ item-0 at level 0: unspecified: group _root_ item-365 at level 5: text: 2 item-366 at level 5: text: e (kg ECM) item-367 at level 5: text: -1 - item-368 at level 5: text: , as TMR intake was restricted to 50% + item-368 at level 5: text: , as TMR intake was restricted to 50% item-369 at level 5: text: ad libitum - item-370 at level 5: text: (Fig 4A). Emissions for pastures increased by 0.06 kg CO + item-370 at level 5: text: (Fig 4A). Emissions for pastures increased by 0.06 kg CO item-371 at level 5: text: 2 item-372 at level 5: text: e (kg ECM) item-373 at level 5: text: -1 @@ -392,9 +392,9 @@ item-0 at level 0: unspecified: group _root_ item-383 at level 5: text: -1 item-384 at level 5: text: , N intake decreased by 20% and ... g dairy cows ranged from 150 g (kg DM) item-385 at level 5: text: -1 - item-386 at level 5: text: on TMR system to 198 g (kg DM) + item-386 at level 5: text: on TMR system to 198 g (kg DM) item-387 at level 5: text: -1 - item-388 at level 5: text: on 50% TMR with pasture. Additio ... may not be captured by microbes [65]. + item-388 at level 5: text: on 50% TMR with pasture. Additi ... may not be captured by microbes [65]. item-389 at level 4: picture item-389 at level 5: caption: Fig 4 Greenhouse gas emissions (GHG) from manure and feed production in dairy cattle systems. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38]. (b) Feed production emission factors from Table 3. (c) N2O emission factors for urine and dung from local data [37]. (d) Feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture. item-390 at level 4: inline: group group @@ -402,7 +402,7 @@ item-0 at level 0: unspecified: group _root_ item-392 at level 5: text: 2 item-393 at level 5: text: O emissions from urine and dung ... d those from Table 4, reductions in CH item-394 at level 5: text: 4 - item-395 at level 5: text: emissions from stocked manure, w ... iets, did not offset by increases in N + item-395 at level 5: text: emissions from stocked manure, ... iets, did not offset by increases in N item-396 at level 5: text: 2 item-397 at level 5: text: O emissions from excreta (Fig 4C ... much lower emission factors used for N item-398 at level 5: text: 2 @@ -415,26 +415,26 @@ item-0 at level 0: unspecified: group _root_ item-405 at level 5: text: 2 item-406 at level 5: text: e kWh item-407 at level 5: text: -1 - item-408 at level 5: text: [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO + item-408 at level 5: text: [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO item-409 at level 5: text: 2 item-410 at level 5: text: e kWh item-411 at level 5: text: -1 - item-412 at level 5: text: [42]). This apparent discrepancy ... has an emission factor of 0.074 kg CO + item-412 at level 5: text: [42]). This apparent discrepanc ... has an emission factor of 0.074 kg CO item-413 at level 5: text: 2 item-414 at level 5: text: e kWh item-415 at level 5: text: -1 - item-416 at level 5: text: against 0.382 and 0.926 kg CO + item-416 at level 5: text: against 0.382 and 0.926 kg CO item-417 at level 5: text: 2 item-418 at level 5: text: e kWh item-419 at level 5: text: -1 - item-420 at level 5: text: produced by natural gas and hard coal, respectively [46]. + item-420 at level 5: text: produced by natural gas and hard coal, respectively [46]. item-421 at level 3: section_header: Assumptions and limitations item-422 at level 4: inline: group group item-423 at level 5: text: The milk production and composit ... sion factors for direct and indirect N item-424 at level 5: text: 2 item-425 at level 5: text: O emissions from urine and dung ... sary to reduce the uncertainty. The CO item-426 at level 5: text: 2 - item-427 at level 5: text: emitted from lime and urea appli ... ions as a function of soil management. + item-427 at level 5: text: emitted from lime and urea appl ... ions as a function of soil management. item-428 at level 3: section_header: Further considerations item-429 at level 4: inline: group group item-430 at level 5: text: The potential for using pasture ... reduced the C footprint by 0.12 kg CO @@ -449,34 +449,34 @@ item-0 at level 0: unspecified: group _root_ item-439 at level 5: text: 2 item-440 at level 5: text: e (kg ECM) item-441 at level 5: text: -1 - item-442 at level 5: text: in subclinical ketosis [71] and by 0.02 kg CO + item-442 at level 5: text: in subclinical ketosis [71] and by 0.02 kg CO item-443 at level 5: text: 2 item-444 at level 5: text: e (kg ECM) item-445 at level 5: text: -1 - item-446 at level 5: text: in case of foot lesions [72]. + item-446 at level 5: text: in case of foot lesions [72]. item-447 at level 4: inline: group group item-448 at level 5: text: Grazing lands may also improve b ... n subtropical areas by 0.5 to 1.5 t ha item-449 at level 5: text: -1 - item-450 at level 5: text: [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha + item-450 at level 5: text: [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha item-451 at level 5: text: -1 - item-452 at level 5: text: would be sequestered, further re ... e C footprint by 0.015 and 0.025 kg CO + item-452 at level 5: text: would be sequestered, further r ... e C footprint by 0.015 and 0.025 kg CO item-453 at level 5: text: 2 item-454 at level 5: text: e (kg ECM) item-455 at level 5: text: -1 - item-456 at level 5: text: for the scenarios using 75 and 5 ... emissions would be 0.03 and 0.05 kg CO + item-456 at level 5: text: for the scenarios using 75 and ... emissions would be 0.03 and 0.05 kg CO item-457 at level 5: text: 2 item-458 at level 5: text: e (kg ECM) item-459 at level 5: text: -1 - item-460 at level 5: text: for 75 and 50% TMR, respectively ... C storage, so that net exchange of CO + item-460 at level 5: text: for 75 and 50% TMR, respectivel ... C storage, so that net exchange of CO item-461 at level 5: text: 2 - item-462 at level 5: text: would be negligible [76]. + item-462 at level 5: text: would be negligible [76]. item-463 at level 2: section_header: Conclusions item-464 at level 3: inline: group group item-465 at level 4: text: This study assessed the C footpr ... attributable to the evidence of low N item-466 at level 4: text: 2 item-467 at level 4: text: O emissions from urine and dung ... ical areas. Even though the enteric CH item-468 at level 4: text: 4 - item-469 at level 4: text: intensity was the largest source of CO + item-469 at level 4: text: intensity was the largest source of CO item-470 at level 4: text: 2 item-471 at level 4: text: e emissions, it did not change b ... on with or without access to pastures. item-472 at level 2: section_header: Acknowledgments diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.json b/tests/data/jats/groundtruth/pone.0234687.nxml.json index 0f04af0c2d..5a94a4af40 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.json +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pone.0234687", "origin": { "mimetype": "application/xml", @@ -1946,8 +1946,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "equivalents (CO", - "text": "equivalents (CO" + "orig": " equivalents (CO", + "text": " equivalents (CO" }, { "self_ref": "#/texts/9", @@ -2082,8 +2082,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint.", - "text": "emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint." + "orig": " emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint.", + "text": " emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint." }, { "self_ref": "#/texts/18", @@ -2312,8 +2312,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of", - "text": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of" + "orig": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of ", + "text": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of " }, { "self_ref": "#/texts/32", @@ -2343,8 +2343,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake with access to grazing a tropical pasture (pearl-millet,", - "text": "TMR intake with access to grazing a tropical pasture (pearl-millet," + "orig": " TMR intake with access to grazing a tropical pasture (pearl-millet, ", + "text": " TMR intake with access to grazing a tropical pasture (pearl-millet, " }, { "self_ref": "#/texts/34", @@ -2374,8 +2374,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "‘Campeiro’) compared to cows receiving", - "text": "‘Campeiro’) compared to cows receiving" + "orig": " ‘Campeiro’) compared to cows receiving ", + "text": " ‘Campeiro’) compared to cows receiving " }, { "self_ref": "#/texts/36", @@ -2405,8 +2405,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Cows grazing on a temperate pasture (ryegrass,", - "text": "TMR intake. Cows grazing on a temperate pasture (ryegrass," + "orig": " TMR intake. Cows grazing on a temperate pasture (ryegrass, ", + "text": " TMR intake. Cows grazing on a temperate pasture (ryegrass, " }, { "self_ref": "#/texts/38", @@ -2436,8 +2436,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "‘Maximus’) did not need changes to ECM production compared to the", - "text": "‘Maximus’) did not need changes to ECM production compared to the" + "orig": " ‘Maximus’) did not need changes to ECM production compared to the ", + "text": " ‘Maximus’) did not need changes to ECM production compared to the " }, { "self_ref": "#/texts/40", @@ -2467,8 +2467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake group.", - "text": "TMR intake group." + "orig": " TMR intake group.", + "text": " TMR intake group." }, { "self_ref": "#/texts/42", @@ -2479,8 +2479,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Using experimental data, three scenarios were evaluated during the lactation period:", - "text": "Using experimental data, three scenarios were evaluated during the lactation period:" + "orig": "Using experimental data, three scenarios were evaluated during the lactation period: ", + "text": "Using experimental data, three scenarios were evaluated during the lactation period: " }, { "self_ref": "#/texts/43", @@ -2510,8 +2510,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake, and 75, and 50% of", - "text": "TMR intake, and 75, and 50% of" + "orig": " TMR intake, and 75, and 50% of ", + "text": " TMR intake, and 75, and 50% of " }, { "self_ref": "#/texts/45", @@ -2541,8 +2541,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al.,", - "text": "TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al.," + "orig": " TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., ", + "text": " TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., " }, { "self_ref": "#/texts/47", @@ -2694,8 +2694,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and N", - "text": "and N" + "orig": " and N", + "text": " and N" }, { "self_ref": "#/texts/57", @@ -2787,8 +2787,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are 1, 28 and 265 for CO", - "text": "are 1, 28 and 265 for CO" + "orig": " are 1, 28 and 265 for CO", + "text": " are 1, 28 and 265 for CO" }, { "self_ref": "#/texts/63", @@ -2849,8 +2849,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and N", - "text": "and N" + "orig": " and N", + "text": " and N" }, { "self_ref": "#/texts/67", @@ -2932,8 +2932,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass,", - "text": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass," + "orig": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, ", + "text": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, " }, { "self_ref": "#/texts/72", @@ -3502,8 +3502,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha", - "text": "was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha" + "orig": " was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha", + "text": " was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha" }, { "self_ref": "#/texts/109", @@ -3533,8 +3533,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(disking) for annual tropical and temperate pastures, respectively [40]. The CO", - "text": "(disking) for annual tropical and temperate pastures, respectively [40]. The CO" + "orig": " (disking) for annual tropical and temperate pastures, respectively [40]. The CO", + "text": " (disking) for annual tropical and temperate pastures, respectively [40]. The CO" }, { "self_ref": "#/texts/111", @@ -3564,8 +3564,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "from fuel combustion was 2.7 kg CO", - "text": "from fuel combustion was 2.7 kg CO" + "orig": " from fuel combustion was 2.7 kg CO", + "text": " from fuel combustion was 2.7 kg CO" }, { "self_ref": "#/texts/113", @@ -3595,8 +3595,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "L", - "text": "L" + "orig": " L", + "text": " L" }, { "self_ref": "#/texts/115", @@ -3626,8 +3626,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42].", - "text": "[41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]." + "orig": " [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42].", + "text": " [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]." }, { "self_ref": "#/texts/117", @@ -3698,8 +3698,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from enteric fermentation intensity (g (kg ECM)", - "text": "emissions from enteric fermentation intensity (g (kg ECM)" + "orig": " emissions from enteric fermentation intensity (g (kg ECM)", + "text": " emissions from enteric fermentation intensity (g (kg ECM)" }, { "self_ref": "#/texts/122", @@ -3760,8 +3760,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield (g (kg DM intake)", - "text": "yield (g (kg DM intake)" + "orig": " yield (g (kg DM intake)", + "text": " yield (g (kg DM intake)" }, { "self_ref": "#/texts/126", @@ -3822,8 +3822,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH", - "text": "yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH" + "orig": " yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH", + "text": " yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH" }, { "self_ref": "#/texts/130", @@ -3853,8 +3853,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield (g (kg DM intake)", - "text": "yield (g (kg DM intake)" + "orig": " yield (g (kg DM intake)", + "text": " yield (g (kg DM intake)" }, { "self_ref": "#/texts/132", @@ -3950,8 +3950,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure (kg (kg ECM)", - "text": "emission from manure (kg (kg ECM)" + "orig": " emission from manure (kg (kg ECM)", + "text": " emission from manure (kg (kg ECM)" }, { "self_ref": "#/texts/138", @@ -4012,8 +4012,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure (kg cow", - "text": "emission from manure (kg cow" + "orig": " emission from manure (kg cow", + "text": " emission from manure (kg cow" }, { "self_ref": "#/texts/142", @@ -4105,8 +4105,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow", - "text": "emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow" + "orig": " emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow", + "text": " emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow" }, { "self_ref": "#/texts/148", @@ -4532,8 +4532,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "stored in a pit below animal confinements, and 0.02 kg N", - "text": "stored in a pit below animal confinements, and 0.02 kg N" + "orig": " stored in a pit below animal confinements, and 0.02 kg N", + "text": " stored in a pit below animal confinements, and 0.02 kg N" }, { "self_ref": "#/texts/176", @@ -4594,8 +4594,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "deposited on pasture [38]. The indirect N", - "text": "deposited on pasture [38]. The indirect N" + "orig": " deposited on pasture [38]. The indirect N", + "text": " deposited on pasture [38]. The indirect N" }, { "self_ref": "#/texts/180", @@ -4919,8 +4919,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "× 10", - "text": "× 10" + "orig": " × 10", + "text": " × 10" }, { "self_ref": "#/texts/201", @@ -5012,8 +5012,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[42].", - "text": "[42]." + "orig": " [42].", + "text": " [42]." }, { "self_ref": "#/texts/207", @@ -5055,8 +5055,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "kWh", - "text": "kWh" + "orig": " kWh", + "text": " kWh" }, { "self_ref": "#/texts/210", @@ -5117,8 +5117,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[47]. The annual electricity use for lighting was 75 kWh cow", - "text": "[47]. The annual electricity use for lighting was 75 kWh cow" + "orig": " [47]. The annual electricity use for lighting was 75 kWh cow", + "text": " [47]. The annual electricity use for lighting was 75 kWh cow" }, { "self_ref": "#/texts/214", @@ -5208,8 +5208,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "= 1–6.04 × BMR, where", - "text": "= 1–6.04 × BMR, where" + "orig": " = 1–6.04 × BMR, where", + "text": " = 1–6.04 × BMR, where" }, { "self_ref": "#/texts/220", @@ -5239,8 +5239,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "AR", - "text": "AR" + "orig": " AR", + "text": " AR" }, { "self_ref": "#/texts/222", @@ -5270,8 +5270,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR", - "text": "is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR" + "orig": " is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR", + "text": " is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR" }, { "self_ref": "#/texts/224", @@ -5301,8 +5301,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR", - "text": "were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR" + "orig": " were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR", + "text": " were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR" }, { "self_ref": "#/texts/226", @@ -5332,8 +5332,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production.", - "text": "was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production." + "orig": " was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production.", + "text": " was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production." }, { "self_ref": "#/texts/228", @@ -5511,8 +5511,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Fig 2C and 2D) in scenarios that included pastures compared to", - "text": "(Fig 2C and 2D) in scenarios that included pastures compared to" + "orig": " (Fig 2C and 2D) in scenarios that included pastures compared to ", + "text": " (Fig 2C and 2D) in scenarios that included pastures compared to " }, { "self_ref": "#/texts/238", @@ -5542,8 +5542,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO", - "text": "TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO" + "orig": " TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO", + "text": " TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO" }, { "self_ref": "#/texts/240", @@ -5604,8 +5604,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO", - "text": "for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO" + "orig": " for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO", + "text": " for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO" }, { "self_ref": "#/texts/244", @@ -5666,8 +5666,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N", - "text": "for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N" + "orig": " for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N", + "text": " for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N" }, { "self_ref": "#/texts/248", @@ -6124,8 +6124,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO", - "text": "[8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO" + "orig": " [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO", + "text": " [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO" }, { "self_ref": "#/texts/278", @@ -6198,8 +6198,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO", - "text": "(5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO" + "orig": " (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO", + "text": " (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO" }, { "self_ref": "#/texts/283", @@ -6334,8 +6334,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to", - "text": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to" + "orig": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to ", + "text": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to " }, { "self_ref": "#/texts/292", @@ -6365,8 +6365,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N", - "text": "TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N" + "orig": " TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N", + "text": " TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N" }, { "self_ref": "#/texts/294", @@ -6427,8 +6427,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N", - "text": "for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N" + "orig": " for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N", + "text": " for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N" }, { "self_ref": "#/texts/298", @@ -6489,8 +6489,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[37].", - "text": "[37]." + "orig": " [37].", + "text": " [37]." }, { "self_ref": "#/texts/302", @@ -6555,8 +6555,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH", - "text": "intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH" + "orig": " intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH", + "text": " intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH" }, { "self_ref": "#/texts/306", @@ -6586,8 +6586,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions on the whole C footprint was expected, because the impact of enteric CH", - "text": "emissions on the whole C footprint was expected, because the impact of enteric CH" + "orig": " emissions on the whole C footprint was expected, because the impact of enteric CH", + "text": " emissions on the whole C footprint was expected, because the impact of enteric CH" }, { "self_ref": "#/texts/308", @@ -6617,8 +6617,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO", - "text": "on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO" + "orig": " on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO", + "text": " on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO" }, { "self_ref": "#/texts/310", @@ -6710,8 +6710,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[59], which did not happen in this study.", - "text": "[59], which did not happen in this study." + "orig": " [59], which did not happen in this study.", + "text": " [59], which did not happen in this study." }, { "self_ref": "#/texts/316", @@ -6765,8 +6765,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)", - "text": "emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)" + "orig": " emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)", + "text": " emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)" }, { "self_ref": "#/texts/320", @@ -6858,8 +6858,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH", - "text": "emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH" + "orig": " emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH", + "text": " emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH" }, { "self_ref": "#/texts/326", @@ -6889,8 +6889,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH", - "text": "emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH" + "orig": " emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH", + "text": " emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH" }, { "self_ref": "#/texts/328", @@ -6920,8 +6920,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26].", - "text": "emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]." + "orig": " emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26].", + "text": " emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]." }, { "self_ref": "#/texts/330", @@ -7020,8 +7020,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from manure decreased 0.07 kg CO", - "text": "emissions from manure decreased 0.07 kg CO" + "orig": " emissions from manure decreased 0.07 kg CO", + "text": " emissions from manure decreased 0.07 kg CO" }, { "self_ref": "#/texts/336", @@ -7175,8 +7175,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", as TMR intake was restricted to 50%", - "text": ", as TMR intake was restricted to 50%" + "orig": ", as TMR intake was restricted to 50% ", + "text": ", as TMR intake was restricted to 50% " }, { "self_ref": "#/texts/346", @@ -7206,8 +7206,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Fig 4A). Emissions for pastures increased by 0.06 kg CO", - "text": "(Fig 4A). Emissions for pastures increased by 0.06 kg CO" + "orig": " (Fig 4A). Emissions for pastures increased by 0.06 kg CO", + "text": " (Fig 4A). Emissions for pastures increased by 0.06 kg CO" }, { "self_ref": "#/texts/348", @@ -7454,8 +7454,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on TMR system to 198 g (kg DM)", - "text": "on TMR system to 198 g (kg DM)" + "orig": " on TMR system to 198 g (kg DM)", + "text": " on TMR system to 198 g (kg DM)" }, { "self_ref": "#/texts/364", @@ -7485,8 +7485,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65].", - "text": "on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]." + "orig": " on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65].", + "text": " on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]." }, { "self_ref": "#/texts/366", @@ -7571,8 +7571,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from stocked manure, when pastures were included on diets, did not offset by increases in N", - "text": "emissions from stocked manure, when pastures were included on diets, did not offset by increases in N" + "orig": " emissions from stocked manure, when pastures were included on diets, did not offset by increases in N", + "text": " emissions from stocked manure, when pastures were included on diets, did not offset by increases in N" }, { "self_ref": "#/texts/372", @@ -7751,8 +7751,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[46]) is much lower than that in a LCA study conducted in US (0.73 kg CO", - "text": "[46]) is much lower than that in a LCA study conducted in US (0.73 kg CO" + "orig": " [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO", + "text": " [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO" }, { "self_ref": "#/texts/384", @@ -7813,8 +7813,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO", - "text": "[42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO" + "orig": " [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO", + "text": " [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO" }, { "self_ref": "#/texts/388", @@ -7875,8 +7875,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "against 0.382 and 0.926 kg CO", - "text": "against 0.382 and 0.926 kg CO" + "orig": " against 0.382 and 0.926 kg CO", + "text": " against 0.382 and 0.926 kg CO" }, { "self_ref": "#/texts/392", @@ -7937,8 +7937,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "produced by natural gas and hard coal, respectively [46].", - "text": "produced by natural gas and hard coal, respectively [46]." + "orig": " produced by natural gas and hard coal, respectively [46].", + "text": " produced by natural gas and hard coal, respectively [46]." }, { "self_ref": "#/texts/396", @@ -8028,8 +8028,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management.", - "text": "emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management." + "orig": " emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management.", + "text": " emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management." }, { "self_ref": "#/texts/402", @@ -8246,8 +8246,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in subclinical ketosis [71] and by 0.02 kg CO", - "text": "in subclinical ketosis [71] and by 0.02 kg CO" + "orig": " in subclinical ketosis [71] and by 0.02 kg CO", + "text": " in subclinical ketosis [71] and by 0.02 kg CO" }, { "self_ref": "#/texts/416", @@ -8308,8 +8308,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in case of foot lesions [72].", - "text": "in case of foot lesions [72]." + "orig": " in case of foot lesions [72].", + "text": " in case of foot lesions [72]." }, { "self_ref": "#/texts/420", @@ -8351,8 +8351,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha", - "text": "[75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha" + "orig": " [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha", + "text": " [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha" }, { "self_ref": "#/texts/423", @@ -8382,8 +8382,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO", - "text": "would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO" + "orig": " would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO", + "text": " would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO" }, { "self_ref": "#/texts/425", @@ -8444,8 +8444,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO", - "text": "for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO" + "orig": " for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO", + "text": " for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO" }, { "self_ref": "#/texts/429", @@ -8506,8 +8506,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO", - "text": "for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO" + "orig": " for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO", + "text": " for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO" }, { "self_ref": "#/texts/433", @@ -8537,8 +8537,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "would be negligible [76].", - "text": "would be negligible [76]." + "orig": " would be negligible [76].", + "text": " would be negligible [76]." }, { "self_ref": "#/texts/435", @@ -8628,8 +8628,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "intensity was the largest source of CO", - "text": "intensity was the largest source of CO" + "orig": " intensity was the largest source of CO", + "text": " intensity was the largest source of CO" }, { "self_ref": "#/texts/441", diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.md b/tests/data/jats/groundtruth/pone.0234687.nxml.md index 7d9f965810..4c1d0e613f 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.md +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.md @@ -10,9 +10,9 @@ Carbon (C) footprint of dairy production, expressed in kg C dioxide (CO2) equiva ## Introduction -Greenhouse gas (GHG) emissions from livestock activities represent 10–12% of global emissions [1], ranging from 5.5–7.5 Gt CO 2 equivalents (CO 2 e) yr -1 , with almost 30% coming from dairy cattle production systems [2]. However, the livestock sector supply between 13 and 17% of calories and between 28 and 33% of human edible protein consumption globally [3]. Additionally, livestock produce more human-edible protein per unit area than crops when land is unsuitable for food crop production [4]. +Greenhouse gas (GHG) emissions from livestock activities represent 10–12% of global emissions [1], ranging from 5.5–7.5 Gt CO2 equivalents (CO2e) yr-1, with almost 30% coming from dairy cattle production systems [2]. However, the livestock sector supply between 13 and 17% of calories and between 28 and 33% of human edible protein consumption globally [3]. Additionally, livestock produce more human-edible protein per unit area than crops when land is unsuitable for food crop production [4]. -Considering the key role of livestock systems in global food security, several technical and management interventions have been investigated to mitigate methane (CH 4 ) emissions from enteric fermentation [5], animal management [6] and manure management [7]. CH 4 emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint. +Considering the key role of livestock systems in global food security, several technical and management interventions have been investigated to mitigate methane (CH4) emissions from enteric fermentation [5], animal management [6] and manure management [7]. CH4 emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint. In subtropical climate zones, cows may graze tropical pastures rather than temperate pastures during the warm season [12]. Some important dairy production areas, such as southern Brazil, central to northern Argentina, Uruguay, South Africa, New Zealand and Australia, are located in these climate zones, having more than 900 million ha in native, permanent or temporary pastures, producing almost 20% of global milk production [13]. However, due to a considerable inter-annual variation in pasture growth rates [14,15], the interest in mixed systems, using total mixed ration (TMR) + pasture has been increasing [16]. Nevertheless, to our best knowledge, studies conducted to evaluate milk production response in dairy cow diets receiving TMR and pastures have only been conducted in temperate pastures and not in tropical pastures (e.g. [17–19]). @@ -59,17 +59,17 @@ Table 1 Descriptive characteristics of the herd. The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of *ad libitum* TMR intake with access to grazing a tropical pasture (pearl-millet, *Pennisetum glaucum* ‘Campeiro’) compared to cows receiving *ad libitum* TMR intake. Cows grazing on a temperate pasture (ryegrass, *Lolium multiflorum* ‘Maximus’) did not need changes to ECM production compared to the *ad libitum* TMR intake group. -Using experimental data, three scenarios were evaluated during the lactation period: *ad libitum* TMR intake, and 75, and 50% of *ad libitum* TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., *in press* ). From April to October (210 days) cows accessed an annual temperate pasture (ryegrass), and from November to beginning of February (95 days) cows grazed an annual tropical pasture (pearl-millet). The average annual reduction in ECM production in dairy cows with access to pastures is 3%. This value was assumed during an entire lactation period. +Using experimental data, three scenarios were evaluated during the lactation period: *ad libitum* TMR intake, and 75, and 50% of *ad libitum* TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., *in press*). From April to October (210 days) cows accessed an annual temperate pasture (ryegrass), and from November to beginning of February (95 days) cows grazed an annual tropical pasture (pearl-millet). The average annual reduction in ECM production in dairy cows with access to pastures is 3%. This value was assumed during an entire lactation period. ### Impact assessment -The CO 2 e emissions were calculated by multiplying the emissions of CO 2 , CH 4 and N 2 O by their 100-year global warming potential (GWP 100 ), based on IPCC assessment report 5 (AR5; [27]). The values of GWP 100 are 1, 28 and 265 for CO 2 , CH 4 and N 2 O, respectively. +The CO2e emissions were calculated by multiplying the emissions of CO2, CH4 and N2O by their 100-year global warming potential (GWP100), based on IPCC assessment report 5 (AR5; [27]). The values of GWP100 are 1, 28 and 265 for CO2, CH4 and N2O, respectively. ### Feed production #### Diets composition -The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, *Pennisetum clandestinum* ). The DM intake of calves, heifers and dry cows was calculated assuming 2.8, 2.5 and 1.9% body weight, respectively [20]. In each case, the actual DM intake of concentrate and corn silage was recorded, and pasture DM intake was estimated by the difference between daily expected DM intake and actual DM intake of concentrate and corn silage. For lactating heifers and cows, TMR was formulated to meet the net energy for lactation (NE L ) and metabolizable protein (MP) requirements of experimental animals, according to [28]. The INRA system was used because it is possible to estimate pasture DM intake taking into account the TMR intake, pasture management and the time of access to pasture using the GrazeIn model [29], which was integrated in the software INRAtion 4.07 (https://www.inration.educagri.fr/fr/forum.php). The nutrient intake was calculated as a product of TMR and pasture intake and the nutrient contents of TMR and pasture, respectively, which were determined in feed samples collected throughout the experiments. +The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, *Pennisetum clandestinum*). The DM intake of calves, heifers and dry cows was calculated assuming 2.8, 2.5 and 1.9% body weight, respectively [20]. In each case, the actual DM intake of concentrate and corn silage was recorded, and pasture DM intake was estimated by the difference between daily expected DM intake and actual DM intake of concentrate and corn silage. For lactating heifers and cows, TMR was formulated to meet the net energy for lactation (NEL) and metabolizable protein (MP) requirements of experimental animals, according to [28]. The INRA system was used because it is possible to estimate pasture DM intake taking into account the TMR intake, pasture management and the time of access to pasture using the GrazeIn model [29], which was integrated in the software INRAtion 4.07 (https://www.inration.educagri.fr/fr/forum.php). The nutrient intake was calculated as a product of TMR and pasture intake and the nutrient contents of TMR and pasture, respectively, which were determined in feed samples collected throughout the experiments. Table 2 Dairy cows’ diets in different scenariosa. @@ -98,7 +98,7 @@ Table 2 Dairy cows’ diets in different scenariosa. #### GHG emissions from crop and pasture production -GHG emission factors used for off- and on-farm feed production were based on literature values, and are presented in Table 3. The emission factor used for corn grain is the average of emission factors observed in different levels of synthetic N fertilization [30]. The emission factor used for soybean is based on Brazilian soybean production [31]. The emissions used for corn silage, including feed processing (cutting, crushing and mixing), and annual or perennial grass productions were 3300 and 1500 kg CO 2 e ha -1 , respectively [32]. The DM production (kg ha -1 ) of corn silage and pastures were based on regional and locally recorded data [33–36], assuming that animals are able to consume 70% of pastures during grazing. +GHG emission factors used for off- and on-farm feed production were based on literature values, and are presented in Table 3. The emission factor used for corn grain is the average of emission factors observed in different levels of synthetic N fertilization [30]. The emission factor used for soybean is based on Brazilian soybean production [31]. The emissions used for corn silage, including feed processing (cutting, crushing and mixing), and annual or perennial grass productions were 3300 and 1500 kg CO2e ha-1, respectively [32]. The DM production (kg ha-1) of corn silage and pastures were based on regional and locally recorded data [33–36], assuming that animals are able to consume 70% of pastures during grazing. Table 3 GHG emission factors for Off- and On-farm feed production. @@ -113,7 +113,7 @@ Table 3 GHG emission factors for Off- and On-farm feed production. | Pearl milletd | 11,000 | 0.195 | kg CO2e (kg DM)-1 | [32,35] | | Kikuyu grasse | 9,500 | 0.226 | kg CO2e (kg DM)-1 | [32,36] | -Emissions from on-farm feed production (corn silage and pasture) were estimated using primary and secondary sources based on the actual amount of each input (Table 4). Primary sources were direct and indirect N 2 O-N emissions from organic and synthetic fertilizers and crop/pasture residues, CO 2 -C emissions from lime and urea applications, as well as fuel combustion. The direct N 2 O-N emission factor (kg (kg N input) -1 ) is based on a local study performed previously [37]. For indirect N 2 O-N emissions (kg N 2 O-N (kg NH 3 -N + NO x ) -1 ), as well as CO 2 -C emissions from lime + urea, default values proposed by IPCC [38] were used. For perennial pastures, a C sequestration of 0.57 t ha -1 was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha -1 (disking) for annual tropical and temperate pastures, respectively [40]. The CO 2 from fuel combustion was 2.7 kg CO 2 L -1 [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]. +Emissions from on-farm feed production (corn silage and pasture) were estimated using primary and secondary sources based on the actual amount of each input (Table 4). Primary sources were direct and indirect N2O-N emissions from organic and synthetic fertilizers and crop/pasture residues, CO2-C emissions from lime and urea applications, as well as fuel combustion. The direct N2O-N emission factor (kg (kg N input)-1) is based on a local study performed previously [37]. For indirect N2O-N emissions (kg N2O-N (kg NH3-N + NOx)-1), as well as CO2-C emissions from lime + urea, default values proposed by IPCC [38] were used. For perennial pastures, a C sequestration of 0.57 t ha-1 was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha-1 (disking) for annual tropical and temperate pastures, respectively [40]. The CO2 from fuel combustion was 2.7 kg CO2 L-1 [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]. Table 4 GHG emissions from On-farm feed production. @@ -149,15 +149,15 @@ Table 4 GHG emissions from On-farm feed production. ### Animal husbandry -The CH 4 emissions from enteric fermentation intensity (g (kg ECM) -1 ) was a function of estimated CH 4 yield (g (kg DM intake) -1 ), actual DM intake and ECM. The enteric CH 4 yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH 4 yield (g (kg DM intake) -1 ) = 13.8 + 0.185 × NDF (% DM intake). +The CH4 emissions from enteric fermentation intensity (g (kg ECM)-1) was a function of estimated CH4 yield (g (kg DM intake)-1), actual DM intake and ECM. The enteric CH4 yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH4 yield (g (kg DM intake)-1) = 13.8 + 0.185 × NDF (% DM intake). ### Manure from confined cows and urine and dung from grazing animals -The CH 4 emission from manure (kg (kg ECM) -1 ) was a function of daily CH 4 emission from manure (kg cow -1 ) and daily ECM (kg cow -1 ). The daily CH 4 emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow -1 ) in manure. The daily VS was estimated as proposed by Eugène et al. [44] as: VS = NDOMI + (UE × GE) × (OM/18.45), where: VS = volatile solid excretion on an organic matter (OM) basis (kg day -1 ), NDOMI = non-digestible OM intake (kg day -1 ): (1- OM digestibility) × OM intake, UE = urinary energy excretion as a fraction of GE (0.04), GE = gross energy intake (MJ day -1 ), OM = organic matter (g), 18.45 = conversion factor for dietary GE per kg of DM (MJ kg -1 ). +The CH4 emission from manure (kg (kg ECM)-1) was a function of daily CH4 emission from manure (kg cow-1) and daily ECM (kg cow-1). The daily CH4 emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow-1) in manure. The daily VS was estimated as proposed by Eugène et al. [44] as: VS = NDOMI + (UE × GE) × (OM/18.45), where: VS = volatile solid excretion on an organic matter (OM) basis (kg day-1), NDOMI = non-digestible OM intake (kg day-1): (1- OM digestibility) × OM intake, UE = urinary energy excretion as a fraction of GE (0.04), GE = gross energy intake (MJ day-1), OM = organic matter (g), 18.45 = conversion factor for dietary GE per kg of DM (MJ kg-1). The OM digestibility was estimated as a function of chemical composition, using equations published by INRA [21], which takes into account the effects of digestive interactions due to feeding level, the proportion of concentrate and rumen protein balance on OM digestibility. For scenarios where cows had access to grazing, the amount of calculated VS were corrected as a function of the time at pasture. The biodegradability of manure factor (0.13 for dairy cows in Latin America) and methane conversion factor (MCF) values were taken from IPCC [38]. The MCF values for pit storage below animal confinements (> 1 month) were used for the calculation, taking into account the annual average temperature (16.6ºC) or the average temperatures during the growth period of temperate (14.4ºC) or tropical (21ºC) annual pastures, which were 31%, 26% and 46%, respectively. -The N 2 O-N emissions from urine and feces were estimated considering the proportion of N excreted as manure and storage or as urine and dung deposited by grazing animals. These proportions were calculated based on the proportion of daily time that animals stayed on pasture (7 h/24 h = 0.29) or confinement (1−0.29 = 0.71). For lactating heifers and cows, the total amount of N excreted was calculated by the difference between N intake and milk N excretion. For heifers and non-lactating cows, urinary and fecal N excretion were estimated as proposed by Reed et al. [45] (Table 3: equations 10 and 12, respectively). The N 2 O emissions from stored manure as well as urine and dung during grazing were calculated based on the conversion of N 2 O-N emissions to N 2 O emissions, where N 2 O emissions = N 2 O-N emissions × 44/28. The emission factors were 0.002 kg N 2 O-N (kg N) -1 stored in a pit below animal confinements, and 0.02 kg N 2 O-N (kg of urine and dung) -1 deposited on pasture [38]. The indirect N 2 O emissions from storage manure and urine and dung deposits on pasture were also estimated using the IPCC [38] emission factors. +The N2O-N emissions from urine and feces were estimated considering the proportion of N excreted as manure and storage or as urine and dung deposited by grazing animals. These proportions were calculated based on the proportion of daily time that animals stayed on pasture (7 h/24 h = 0.29) or confinement (1−0.29 = 0.71). For lactating heifers and cows, the total amount of N excreted was calculated by the difference between N intake and milk N excretion. For heifers and non-lactating cows, urinary and fecal N excretion were estimated as proposed by Reed et al. [45] (Table 3: equations 10 and 12, respectively). The N2O emissions from stored manure as well as urine and dung during grazing were calculated based on the conversion of N2O-N emissions to N2O emissions, where N2O emissions = N2O-N emissions × 44/28. The emission factors were 0.002 kg N2O-N (kg N)-1 stored in a pit below animal confinements, and 0.02 kg N2O-N (kg of urine and dung)-1 deposited on pasture [38]. The indirect N2O emissions from storage manure and urine and dung deposits on pasture were also estimated using the IPCC [38] emission factors. ### Farm management @@ -179,15 +179,15 @@ Table 5 Factors for major resource inputs in farm management. | Electricity for milking | 0.06 | kWh (kg milk)-1 | [47] | | Electricity for lightingd | 75 | kWh cow-1 | [47] | -The amount of fuel use for manure handling were estimated taking into consideration the amount of manure produced per cow and the amounts of fuel required for manure handling (L diesel t -1 ) [42]. The amount of manure was estimated from OM excretions (kg cow -1 ), assuming that the manure has 8% ash on DM basis and 60% DM content. The OM excretions were calculated by NDOMI × days in confinement × proportion of daily time that animals stayed on confinement. +The amount of fuel use for manure handling were estimated taking into consideration the amount of manure produced per cow and the amounts of fuel required for manure handling (L diesel t-1) [42]. The amount of manure was estimated from OM excretions (kg cow-1), assuming that the manure has 8% ash on DM basis and 60% DM content. The OM excretions were calculated by NDOMI × days in confinement × proportion of daily time that animals stayed on confinement. -The emissions from fuel were estimated considering the primary (emissions from fuel burned) and secondary (emissions for producing and transporting fuel) emissions. The primary emissions were calculated by the amount of fuel required for manure handling (L) × (kg CO 2 e L -1 ) [41]. The secondary emissions from fuel were calculated by the amount of fuel required for manure handling × emissions for production and transport of fuel (kg CO 2 e L -1 ) [41]. Emissions from manufacture and repair of machinery for manure handling were estimated by manure produced per cow (t) × (kg machinery mass (kg manure) -1 × 10 −3 ) [42] × kg CO 2 e (kg machinery mass) -1 [42]. +The emissions from fuel were estimated considering the primary (emissions from fuel burned) and secondary (emissions for producing and transporting fuel) emissions. The primary emissions were calculated by the amount of fuel required for manure handling (L) × (kg CO2e L-1) [41]. The secondary emissions from fuel were calculated by the amount of fuel required for manure handling × emissions for production and transport of fuel (kg CO2e L-1) [41]. Emissions from manufacture and repair of machinery for manure handling were estimated by manure produced per cow (t) × (kg machinery mass (kg manure)-1 × 10−3) [42] × kg CO2e (kg machinery mass)-1 [42]. -Emissions from electricity for milking and confinement were estimated using two emission factors (kg CO 2 kWh -1 ). The first one is based on United States electricity matrix [41], and was used as a reference of an electricity matrix with less hydroelectric power than the region under study. The second is based on the Brazilian electricity matrix [46]. The electricity required for milking activities is 0.06 kWh (kg milk produced) -1 [47]. The annual electricity use for lighting was 75 kWh cow -1 , which is the value considered for lactating cows in naturally ventilated barns [47]. +Emissions from electricity for milking and confinement were estimated using two emission factors (kg CO2 kWh-1). The first one is based on United States electricity matrix [41], and was used as a reference of an electricity matrix with less hydroelectric power than the region under study. The second is based on the Brazilian electricity matrix [46]. The electricity required for milking activities is 0.06 kWh (kg milk produced)-1 [47]. The annual electricity use for lighting was 75 kWh cow-1, which is the value considered for lactating cows in naturally ventilated barns [47]. ### Co-product allocation -The C footprint for milk produced in the system was calculated using a biophysical allocation approach, as recommended by the International Dairy Federation [49], and described by Thoma et al. [48]. Briefly, AR milk = 1–6.04 × BMR, where : AR milk is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR milk were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR milk was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production. +The C footprint for milk produced in the system was calculated using a biophysical allocation approach, as recommended by the International Dairy Federation [49], and described by Thoma et al. [48]. Briefly, ARmilk = 1–6.04 × BMR, where: ARmilk is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The ARmilk were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The ARmilk was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production. ### Sensitivity analysis @@ -199,37 +199,37 @@ The study has assessed the impact of tropical and temperate pastures in dairy co ### Greenhouse gas emissions -Depending on emission factors used for calculating emissions from urine and dung (IPCC or local data) and feed production (Tables 3 or 4), the C footprint was similar (Fig 2A and 2B) or decreased by 0.04 kg CO 2 e (kg ECM) -1 (Fig 2C and 2D) in scenarios that included pastures compared to *ad libitum* TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO 2 e (kg ECM) -1 for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO 2 e (kg ECM) -1 for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N 2 O-N emissions [37], manure emissions decreased as TMR intake went down (Fig 2C and 2D). Regardless of emission factors used (Tables 3 or 4), emissions from feed production decreased to a small extent as the proportion of TMR intake decreased. Emissions from farm management did not contribute more than 5% of overall GHG emissions. +Depending on emission factors used for calculating emissions from urine and dung (IPCC or local data) and feed production (Tables 3 or 4), the C footprint was similar (Fig 2A and 2B) or decreased by 0.04 kg CO2e (kg ECM)-1 (Fig 2C and 2D) in scenarios that included pastures compared to *ad libitum* TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO2e (kg ECM)-1 for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO2e (kg ECM)-1 for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N2O-N emissions [37], manure emissions decreased as TMR intake went down (Fig 2C and 2D). Regardless of emission factors used (Tables 3 or 4), emissions from feed production decreased to a small extent as the proportion of TMR intake decreased. Emissions from farm management did not contribute more than 5% of overall GHG emissions. Fig 2 Overall greenhouse gas emissions in dairy cattle systems under various scenarios. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. -Considering IPCC emission factors for N 2 O emissions from urine and dung [38] and those from Table 3, the C footprint ranged from 0.99 to 1.04 kg CO 2 e (kg ECM) -1 , and was close to those reported under confined based systems in California [49], Canada [50], China [8], Ireland [9], different scenarios in Australia [51,52] and Uruguay [11], which ranged from 0.98 to 1.16 kg CO 2 e (kg ECM) -1 . When local emission factors for N 2 O emissions from urine and dung [37] and those from Table 4 were taking into account, the C footprint for scenarios including pasture, without accounting for sequestered CO 2 -C from perennial pasture—0.91 kg CO 2 e (kg ECM) -1 —was lower than the range of values described above. However, these values were still greater than high-performance confinement systems in UK and USA [53] or grass based dairy systems in Ireland [9,53] and New Zealand [8,54], which ranged from 0.52 to 0.89 kg CO 2 e (kg ECM) -1 . Regardless of which emission factor was used, we found a lower C footprint in all conditions compared to scenarios with lower milk production per cow or in poor conditions of manure management, which ranged from 1.4 to 2.3 kg CO 2 e (kg ECM) -1 [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO 2 -C, etc.), herd productivity and manure management were systematically associated with the C footprint of the dairy systems. +Considering IPCC emission factors for N2O emissions from urine and dung [38] and those from Table 3, the C footprint ranged from 0.99 to 1.04 kg CO2e (kg ECM)-1, and was close to those reported under confined based systems in California [49], Canada [50], China [8], Ireland [9], different scenarios in Australia [51,52] and Uruguay [11], which ranged from 0.98 to 1.16 kg CO2e (kg ECM)-1. When local emission factors for N2O emissions from urine and dung [37] and those from Table 4 were taking into account, the C footprint for scenarios including pasture, without accounting for sequestered CO2-C from perennial pasture—0.91 kg CO2e (kg ECM)-1—was lower than the range of values described above. However, these values were still greater than high-performance confinement systems in UK and USA [53] or grass based dairy systems in Ireland [9,53] and New Zealand [8,54], which ranged from 0.52 to 0.89 kg CO2e (kg ECM)-1. Regardless of which emission factor was used, we found a lower C footprint in all conditions compared to scenarios with lower milk production per cow or in poor conditions of manure management, which ranged from 1.4 to 2.3 kg CO2e (kg ECM)-1 [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO2-C, etc.), herd productivity and manure management were systematically associated with the C footprint of the dairy systems. -The similarity of C footprint between different scenarios using IPCC [38] for estimating emissions from manure and for emissions from feed production (Table 3) was a consequence of the trade-off between greater manure emissions and lower emissions to produce feed, as the proportion of pasture in diets increased. Additionally, the small negative effect of pasture on ECM production also contributed to the trade-off. The impact of milk production on the C footprint was reported in a meta-analysis comprising 30 studies from 15 different countries [22]. As observed in this study (Fig 2A and 2B) the authors reported no significant difference between the C footprint of pasture-based vs. confinement systems. However, they observed that an increase of 1000 kg cow -1 (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO 2 e (kg ECM) -1 , which may explain an apparent discrepancy between our study and an LCA performed in south Brazilian conditions [56]. Their study compared a confinement and a grazing-based dairy system with annual average milk production of 7667 and 5535 kg cow, respectively. In this study, the same herd was used in all systems, with an annual average milk production of around 7000 kg cow -1 . Experimental data showed a reduction not greater than 3% of ECM when 50% of TMR was replaced by pasture access. +The similarity of C footprint between different scenarios using IPCC [38] for estimating emissions from manure and for emissions from feed production (Table 3) was a consequence of the trade-off between greater manure emissions and lower emissions to produce feed, as the proportion of pasture in diets increased. Additionally, the small negative effect of pasture on ECM production also contributed to the trade-off. The impact of milk production on the C footprint was reported in a meta-analysis comprising 30 studies from 15 different countries [22]. As observed in this study (Fig 2A and 2B) the authors reported no significant difference between the C footprint of pasture-based vs. confinement systems. However, they observed that an increase of 1000 kg cow-1 (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO2e (kg ECM)-1, which may explain an apparent discrepancy between our study and an LCA performed in south Brazilian conditions [56]. Their study compared a confinement and a grazing-based dairy system with annual average milk production of 7667 and 5535 kg cow, respectively. In this study, the same herd was used in all systems, with an annual average milk production of around 7000 kg cow-1. Experimental data showed a reduction not greater than 3% of ECM when 50% of TMR was replaced by pasture access. -The lower C footprint in scenarios with access to pasture, when local emission factors [37] were used for N 2 O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to *ad libitum* TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N 2 O-N (kg N) -1 for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N 2 O-N kg -1 [37]. +The lower C footprint in scenarios with access to pasture, when local emission factors [37] were used for N2O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to *ad libitum* TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N2O-N (kg N)-1 for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N2O-N kg-1 [37]. ### Methane emissions -The enteric CH 4 intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH 4 emissions on the whole C footprint was expected, because the impact of enteric CH 4 on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO 2 e [50,52,57,58]. However, emissions in feed production may be the most important source of GHG when emission factors for producing concentrate feeds are greater than 0.7 kg CO 2 e kg -1 [59], which did not happen in this study. +The enteric CH4 intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH4 emissions on the whole C footprint was expected, because the impact of enteric CH4 on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO2e [50,52,57,58]. However, emissions in feed production may be the most important source of GHG when emission factors for producing concentrate feeds are greater than 0.7 kg CO2e kg-1 [59], which did not happen in this study. Fig 3 Sensitivity of the C footprint. Sensitivity index = percentage change in C footprint for a 10% change in the given emission source divided by 10% of. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. -The lack of difference in enteric CH 4 emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM) -1 ) compared to corn silage (550 g (kg DM) -1 ). Hence, an expected, increase NDF content with decreased concentrate was partially offset by an increase in the pasture proportion relatively low in NDF. This is in agreement with studies conducted in southern Brazil, which have shown that the actual enteric CH 4 emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH 4 emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH 4 emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]. +The lack of difference in enteric CH4 emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)-1) compared to corn silage (550 g (kg DM)-1). Hence, an expected, increase NDF content with decreased concentrate was partially offset by an increase in the pasture proportion relatively low in NDF. This is in agreement with studies conducted in southern Brazil, which have shown that the actual enteric CH4 emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH4 emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH4 emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]. ### Emissions from excreta and feed production -Using IPCC emission factors for N 2 O emissions from urine and dung [38] and those from Table 3, CH 4 emissions from manure decreased 0.07 kg CO 2 e (kg ECM) -1 , but N 2 O emissions from manure increased 0.09 kg CO 2 e (kg ECM) -1 , as TMR intake was restricted to 50% *ad libitum* (Fig 4A). Emissions for pastures increased by 0.06 kg CO 2 e (kg ECM) -1 , whereas emissions for producing concentrate feeds and corn silage decreased by 0.09 kg CO 2 e (kg ECM) -1 , as TMR intake decreased (Fig 4B). In this situation, the lack of difference in calculated C footprints of different systems was also due to the greater emissions from manure, and offset by lower emissions from feed production with inclusion of pasture in lactating dairy cow diets. The greater N 2 O-N emissions from manure with pasture was a consequence of higher N 2 O-N emissions due to greater CP content and N urine excretion, as pasture intake increased. The effect of CP content on urine N excretion has been shown by several authors in lactating dairy cows [62–64]. For instance, by decreasing CP content from 185 to 152 g (kg DM) -1 , N intake decreased by 20% and urine N excretion by 60% [62]. In this study, the CP content for lactating dairy cows ranged from 150 g (kg DM) -1 on TMR system to 198 g (kg DM) -1 on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]. +Using IPCC emission factors for N2O emissions from urine and dung [38] and those from Table 3, CH4 emissions from manure decreased 0.07 kg CO2e (kg ECM)-1, but N2O emissions from manure increased 0.09 kg CO2e (kg ECM)-1, as TMR intake was restricted to 50% *ad libitum* (Fig 4A). Emissions for pastures increased by 0.06 kg CO2e (kg ECM)-1, whereas emissions for producing concentrate feeds and corn silage decreased by 0.09 kg CO2e (kg ECM)-1, as TMR intake decreased (Fig 4B). In this situation, the lack of difference in calculated C footprints of different systems was also due to the greater emissions from manure, and offset by lower emissions from feed production with inclusion of pasture in lactating dairy cow diets. The greater N2O-N emissions from manure with pasture was a consequence of higher N2O-N emissions due to greater CP content and N urine excretion, as pasture intake increased. The effect of CP content on urine N excretion has been shown by several authors in lactating dairy cows [62–64]. For instance, by decreasing CP content from 185 to 152 g (kg DM)-1, N intake decreased by 20% and urine N excretion by 60% [62]. In this study, the CP content for lactating dairy cows ranged from 150 g (kg DM)-1 on TMR system to 198 g (kg DM)-1 on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]. Fig 4 Greenhouse gas emissions (GHG) from manure and feed production in dairy cattle systems. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38]. (b) Feed production emission factors from Table 3. (c) N2O emission factors for urine and dung from local data [37]. (d) Feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture. -Using local emission factors for N 2 O emissions from urine and dung [37] and those from Table 4, reductions in CH 4 emissions from stocked manure, when pastures were included on diets, did not offset by increases in N 2 O emissions from excreta (Fig 4C). In this case, total emissions from manure (Fig 4C) and feed production (Fig 4D) decreased with the inclusion of pasture. The impact of greater CP content and N urine excretion with increased pasture intake was offset by the much lower emission factors used for N 2 O emissions from urine and dung. As suggested by other authors [66,67], these results show that IPCC default value may need to be revised for the subtropical region. +Using local emission factors for N2O emissions from urine and dung [37] and those from Table 4, reductions in CH4 emissions from stocked manure, when pastures were included on diets, did not offset by increases in N2O emissions from excreta (Fig 4C). In this case, total emissions from manure (Fig 4C) and feed production (Fig 4D) decreased with the inclusion of pasture. The impact of greater CP content and N urine excretion with increased pasture intake was offset by the much lower emission factors used for N2O emissions from urine and dung. As suggested by other authors [66,67], these results show that IPCC default value may need to be revised for the subtropical region. Emissions for feed production decreased when pasture was included due to the greater emission factor for corn grain production compared to pastures. Emissions from concentrate and silage had at least twice the sensitivity index compared to emissions from pastures. The amount of grain required per cow in a lifetime decreased from 7,300 kg to 4,000 kg when 50% of TMR was replaced by pasture access. These results are in agreement with other studies which found lower C footprint, as concentrate use is reduced and/or pasture is included [9,68,69]. Moreover, it has been demonstrated that in intensive dairy systems, after enteric fermentation, feed production is the second main contributor to C footprint [50]. There is potential to decrease the environmental impact of dairy systems by reducing the use of concentrate ingredients with high environmental impact, particularly in confinements [9]. @@ -237,21 +237,21 @@ Emissions for feed production decreased when pasture was included due to the gre The lower impact of emissions from farm management is in agreement with other studies conducted in Europe [9, 62] and USA [42, 55], where the authors found that most emissions in dairy production systems are from enteric fermentation, feed production and emissions from excreta. As emissions from fuel for on-farm feed production were accounted into the ‘emissions from crop and pasture production’, total emissions from farm management were not greater than 5% of total C footprint. -Emissions from farm management dropped when the emission factor for electricity generation was based on the Brazilian matrix. In this case, the emission factor for electricity generation (0.205 kg CO 2 e kWh -1 [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO 2 e kWh -1 [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO 2 e kWh -1 against 0.382 and 0.926 kg CO 2 e kWh -1 produced by natural gas and hard coal, respectively [46]. +Emissions from farm management dropped when the emission factor for electricity generation was based on the Brazilian matrix. In this case, the emission factor for electricity generation (0.205 kg CO2e kWh-1 [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO2e kWh-1 [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO2e kWh-1 against 0.382 and 0.926 kg CO2e kWh-1 produced by natural gas and hard coal, respectively [46]. ### Assumptions and limitations -The milk production and composition data are the average for a typical herd, which might have great animal-to-animal variability. Likewise, DM yield of crops and pastures were collected from experimental observations, and may change as a function of inter-annual variation, climatic conditions, soil type, fertilization level etc. The emission factors for direct and indirect N 2 O emissions from urine and dung were alternatively estimated using local data, but more experiments are necessary to reduce the uncertainty. The CO 2 emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management. +The milk production and composition data are the average for a typical herd, which might have great animal-to-animal variability. Likewise, DM yield of crops and pastures were collected from experimental observations, and may change as a function of inter-annual variation, climatic conditions, soil type, fertilization level etc. The emission factors for direct and indirect N2O emissions from urine and dung were alternatively estimated using local data, but more experiments are necessary to reduce the uncertainty. The CO2 emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management. ### Further considerations -The potential for using pasture can reduce the C footprint because milk production kept pace with animal confinement. However, if milk production is to decrease with lower TMR intake and inclusion of pasture [19], the C footprint would be expected to increase. Lorenz et al. [22] showed that an increase in milk yield from 5,000 to 6,000 kg ECM reduced the C footprint by 0.12 kg CO 2 e (kg ECM) -1 , whereas an increase from 10,000 to 11,000 kg ECM reduced the C footprint by only 0.06 kg CO 2 e (kg ECM) -1 . Hence, the impact of increasing milk production on decreasing C footprint is not linear, and mitigation measures, such as breeding for increased genetic yield potential and increasing concentrate ratio in the diet, are potentially harmful for animal’s health and welfare [70]. For instance, increasing concentrate ratio potentially increases the occurrence of subclinical ketosis and foot lesions, and C footprint may increase by 0.03 kg CO 2 e (kg ECM) -1 in subclinical ketosis [71] and by 0.02 kg CO 2 e (kg ECM) -1 in case of foot lesions [72]. +The potential for using pasture can reduce the C footprint because milk production kept pace with animal confinement. However, if milk production is to decrease with lower TMR intake and inclusion of pasture [19], the C footprint would be expected to increase. Lorenz et al. [22] showed that an increase in milk yield from 5,000 to 6,000 kg ECM reduced the C footprint by 0.12 kg CO2e (kg ECM)-1, whereas an increase from 10,000 to 11,000 kg ECM reduced the C footprint by only 0.06 kg CO2e (kg ECM)-1. Hence, the impact of increasing milk production on decreasing C footprint is not linear, and mitigation measures, such as breeding for increased genetic yield potential and increasing concentrate ratio in the diet, are potentially harmful for animal’s health and welfare [70]. For instance, increasing concentrate ratio potentially increases the occurrence of subclinical ketosis and foot lesions, and C footprint may increase by 0.03 kg CO2e (kg ECM)-1 in subclinical ketosis [71] and by 0.02 kg CO2e (kg ECM)-1 in case of foot lesions [72]. -Grazing lands may also improve biodiversity [73]. Strategies such as zero tillage may increase stocks of soil C [74]. This study did not consider C sequestration during the growth of annual pastures, because it was assumed these grasses were planted with tillage, having a balance between C sequestration and C emissions [38]. Considering the C sequestration from no-tillage perennial pasture, the amount of C sequestration will more than compensates for C emitted. These results are in agreement with other authors who have shown that a reduction or elimination of soil tillage increases annual soil C sequestration in subtropical areas by 0.5 to 1.5 t ha -1 [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha -1 would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO 2 e (kg ECM) -1 for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO 2 e (kg ECM) -1 for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO 2 would be negligible [76]. +Grazing lands may also improve biodiversity [73]. Strategies such as zero tillage may increase stocks of soil C [74]. This study did not consider C sequestration during the growth of annual pastures, because it was assumed these grasses were planted with tillage, having a balance between C sequestration and C emissions [38]. Considering the C sequestration from no-tillage perennial pasture, the amount of C sequestration will more than compensates for C emitted. These results are in agreement with other authors who have shown that a reduction or elimination of soil tillage increases annual soil C sequestration in subtropical areas by 0.5 to 1.5 t ha-1 [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha-1 would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO2e (kg ECM)-1 for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO2e (kg ECM)-1 for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO2 would be negligible [76]. ## Conclusions -This study assessed the C footprint of dairy cattle systems with or without access to pastures. Including pastures showed potential to maintain or decrease to a small extent the C footprint, which may be attributable to the evidence of low N 2 O emissions from urine and dung in dairy systems in subtropical areas. Even though the enteric CH 4 intensity was the largest source of CO 2 e emissions, it did not change between different scenarios due to the narrow range of NDF content in diets and maintaining the same milk production with or without access to pastures. +This study assessed the C footprint of dairy cattle systems with or without access to pastures. Including pastures showed potential to maintain or decrease to a small extent the C footprint, which may be attributable to the evidence of low N2O emissions from urine and dung in dairy systems in subtropical areas. Even though the enteric CH4 intensity was the largest source of CO2e emissions, it did not change between different scenarios due to the narrow range of NDF content in diets and maintaining the same milk production with or without access to pastures. ## Acknowledgments diff --git a/tests/data/jats/groundtruth/ptag100.xml.itxt b/tests/data/jats/groundtruth/ptag100.xml.itxt index 1ba0dbcbe2..69d0fb7e70 100644 --- a/tests/data/jats/groundtruth/ptag100.xml.itxt +++ b/tests/data/jats/groundtruth/ptag100.xml.itxt @@ -13,19 +13,19 @@ item-0 at level 0: unspecified: group _root_ item-12 at level 3: section_header: 2.1. item-13 at level 4: section_header: 2.1.1. item-14 at level 5: inline: group group - item-15 at level 6: text: We consider a quark–antiquark pa ... time-dependent effective reduced mass + item-15 at level 6: text: We consider a quark–antiquark pa ... time-dependent effective reduced mass item-16 at level 6: formula: \mu (t) - item-17 at level 6: text: in spherical coordinates, governed by a central potential + item-17 at level 6: text: in spherical coordinates, governed by a central potential  item-18 at level 6: formula: g(t)r^{2}-\frac{Z(t)}{r} - item-19 at level 6: text: where + item-19 at level 6: text: where item-20 at level 6: formula: g(t) - item-21 at level 6: text: and + item-21 at level 6: text: and item-22 at level 6: formula: Z(t) - item-23 at level 6: text: are coefficients that depend on time. While + item-23 at level 6: text: are coefficients that depend on time. While  item-24 at level 6: formula: g(t)r^{2} - item-25 at level 6: text: represents a confining trap potential with adjustable strength, + item-25 at level 6: text: represents a confining trap potential with adjustable strength, item-26 at level 6: formula: -\frac{Z(t)}{r} - item-27 at level 6: text: is a Coulomb perturbation with the constraint + item-27 at level 6: text: is a Coulomb perturbation with the constraint item-28 at level 6: formula: Z(t)\gt 0 item-29 at level 6: text: . As the distance between quarks ... force between the quark and antiquark. item-30 at level 5: text: Time-dependent Hamiltonians natu ... s within a quantum-mechanical setting. @@ -34,18 +34,18 @@ item-0 at level 0: unspecified: group _root_ H(t)=\frac{p^{2 ... )r^{2}-\frac{Z(t)}{r} . \end{eqnarray} item-33 at level 5: inline: group group - item-34 at level 6: text: This Hamiltonian enables the cal ... pherical coordinates is represented as + item-34 at level 6: text: This Hamiltonian enables the cal ... herical coordinates is represented as item-35 at level 6: formula: p^{2}=p_{r}^{2}+\frac{L^{2}}{r^{2}} - item-36 at level 6: text: , where + item-36 at level 6: text: , where item-37 at level 6: formula: p_{r}=-i\hbar (\frac{\partial }{\partial r}+\frac{1}{r}) - item-38 at level 6: text: and + item-38 at level 6: text: and item-39 at level 6: text: L - item-40 at level 6: text: is the total angular momentum, the formula for which is given by + item-40 at level 6: text: is the total angular momentum, the formula for which is given by item-41 at level 5: formula: \begin{eqnarray} L^{2}=-\hbar ^{ ... \theta }\bigg )\bigg ]. \end{eqnarray} item-42 at level 5: inline: group group - item-43 at level 6: text: To investigate the dynamical fea ... we denote the system’s state vector as + item-43 at level 6: text: To investigate the dynamical fea ... e denote the system’s state vector as  item-44 at level 6: formula: |\Psi (t)\rangle item-45 at level 6: text: , the corresponding Schrödinger equation is of the form item-46 at level 5: formula: \begin{eqnarray} @@ -54,57 +54,57 @@ i\hbar \frac{\p ... =H(t)|\Psi (t)\rangle . item-47 at level 5: text: The time dependence of the Hamil ... on, as will be presented subsequently. item-48 at level 4: section_header: 2.1.2. item-49 at level 5: inline: group group - item-50 at level 6: text: Because + item-50 at level 6: text: Because item-51 at level 6: formula: H(t) - item-52 at level 6: text: in Eq. (1) is represented in ter ... rms of a nontrivial invariant operator + item-52 at level 6: text: in Eq. (1) is represented in te ... ms of a nontrivial invariant operator item-53 at level 6: formula: I(t) - item-54 at level 6: text: rather than + item-54 at level 6: text: rather than item-55 at level 6: formula: H(t) - item-56 at level 6: text: in Eq. (1), where + item-56 at level 6: text: in Eq. (1), where item-57 at level 6: formula: I(t) - item-58 at level 6: text: does not involve time-derivative operators. Moreover, + item-58 at level 6: text: does not involve time-derivative operators. Moreover, item-59 at level 6: formula: I(t) - item-60 at level 6: text: is closely related to the concep ... the quantum–classical correspondence. + item-60 at level 6: text: is closely related to the conce ... the quantum–classical correspondence. item-61 at level 5: inline: group group - item-62 at level 6: text: By the definition of the invariant operator, + item-62 at level 6: text: By the definition of the invariant operator, item-63 at level 6: formula: I(t) - item-64 at level 6: text: satisfies the equation: + item-64 at level 6: text: satisfies the equation: item-65 at level 5: formula: \begin{eqnarray} \frac{dI}{dt}=\ ... rac{1}{i\hbar }[I,H]=0. \end{eqnarray} item-66 at level 5: inline: group group - item-67 at level 6: text: If such an invariant exists, it ... tion (3) in terms of its eigenfunction + item-67 at level 6: text: If such an invariant exists, it ... ion (3) in terms of its eigenfunction item-68 at level 6: formula: \Phi (\vec{r},t) item-69 at level 6: text: , such that item-70 at level 5: formula: \begin{eqnarray} \Psi (\vec{r},t ... a (t)}\Phi (\vec{r},t), \end{eqnarray} item-71 at level 5: inline: group group - item-72 at level 6: text: where + item-72 at level 6: text: where item-73 at level 6: formula: \alpha (t) - item-74 at level 6: text: is a phase function that can be obtained from + item-74 at level 6: text: is a phase function that can be obtained from item-75 at level 5: formula: \begin{eqnarray} \hbar \frac{d\a ... ht|\Phi \right\rangle . \end{eqnarray} item-76 at level 5: inline: group group - item-77 at level 6: text: To find the expression of the invariant + item-77 at level 6: text: To find the expression of the invariant item-78 at level 6: formula: I(t) - item-79 at level 6: text: utilizing Eq. (4), we set + item-79 at level 6: text: utilizing Eq. (4), we set item-80 at level 5: formula: \begin{eqnarray} I(t)=A(t)p^{2}+ ... t)r^{2}-\frac{D(t)}{r}, \end{eqnarray} item-81 at level 5: inline: group group - item-82 at level 6: text: where + item-82 at level 6: text: where item-83 at level 6: formula: A(t) - item-84 at level 6: text: , + item-84 at level 6: text: , item-85 at level 6: formula: B(t) - item-86 at level 6: text: , + item-86 at level 6: text: , item-87 at level 6: formula: C(t) - item-88 at level 6: text: , and + item-88 at level 6: text: , and item-89 at level 6: formula: D(t) - item-90 at level 6: text: are time-dependent functions to ... procedure with this assumed formula of + item-90 at level 6: text: are time-dependent functions to ... rocedure with this assumed formula of item-91 at level 6: formula: I(t) - item-92 at level 6: text: after substituting Eqs. (1) and (7) into Eq. (4) yields + item-92 at level 6: text: after substituting Eqs. (1) and (7) into Eq. (4) yields item-93 at level 5: formula: \begin{eqnarray} A(t) =A_{0}\rho ^{2}(t), \end{eqnarray} @@ -118,56 +118,56 @@ C(t) =A_{0}\big ... {4\rho ^{2}(t)}\bigg ), D(t) =2A_{0}\mu (t)Z(t)\rho ^{2}(t), \end{eqnarray} item-97 at level 5: inline: group group - item-98 at level 6: text: where + item-98 at level 6: text: where item-99 at level 6: formula: A_{0} - item-100 at level 6: text: is an arbitrary real constant and + item-100 at level 6: text: is an arbitrary real constant and item-101 at level 6: formula: \rho (t) - item-102 at level 6: text: is a solution of the following equation + item-102 at level 6: text: is a solution of the following equation item-103 at level 5: formula: \begin{eqnarray} \ddot{\rho }(t) ... u ^{2}(t)\rho ^{3}(t)}, \end{eqnarray} item-104 at level 5: inline: group group - item-105 at level 6: text: with + item-105 at level 6: text: with item-106 at level 6: formula: \Omega - item-107 at level 6: text: being a real constant. The above ... iant is valid under the condition that + item-107 at level 6: text: being a real constant. The abov ... ant is valid under the condition that item-108 at level 6: formula: Z(t) - item-109 at level 6: text: follows the relation + item-109 at level 6: text: follows the relation item-110 at level 5: formula: \begin{eqnarray} \dot{Z}(t)+\big ... \rho (t)}\bigg )Z(t)=0. \end{eqnarray} item-111 at level 5: text: Equation (7) with Eqs. (8)–(11) ... l methodology for obtaining solutions. item-112 at level 4: section_header: 2.1.3. item-113 at level 5: inline: group group - item-114 at level 6: text: Because the quantum wave functio ... nted in terms of the eigenfunctions of + item-114 at level 6: text: Because the quantum wave functio ... ted in terms of the eigenfunctions of item-115 at level 6: formula: I(t) - item-116 at level 6: text: , it is now necessary to evaluat ... e eigenvalue equation of the invariant + item-116 at level 6: text: , it is now necessary to evaluat ... eigenvalue equation of the invariant item-117 at level 6: formula: I(t) - item-118 at level 6: text: as + item-118 at level 6: text: as item-119 at level 5: formula: \begin{eqnarray} I(t)\Phi _{n}(\ ... n}\Phi _{n}(\vec{r},t), \end{eqnarray} item-120 at level 5: inline: group group - item-121 at level 6: text: where + item-121 at level 6: text: where item-122 at level 6: formula: \Lambda _{n} - item-123 at level 6: text: are the eigenvalues and + item-123 at level 6: text: are the eigenvalues and item-124 at level 6: formula: \Phi _{n}(\vec{r},t) - item-125 at level 6: text: are time-dependent eigenfunctions. Given that + item-125 at level 6: text: are time-dependent eigenfunctions. Given that item-126 at level 6: formula: I(t) item-127 at level 6: text: , as defined in Eq. (7) along wi ... r a unitary transformation of the form item-128 at level 5: formula: \begin{eqnarray} \Phi _{n}^{\pri ... t)\Phi _{n}(\vec{r},t), \end{eqnarray} item-129 at level 5: inline: group group - item-130 at level 6: text: where + item-130 at level 6: text: where item-131 at level 6: formula: U(t) - item-132 at level 6: text: is a time-dependent unitary operator given by + item-132 at level 6: text: is a time-dependent unitary operator given by item-133 at level 5: formula: \begin{eqnarray} U(t)=\exp \left ... \rho (t)}r^{2}\right] . \end{eqnarray} item-134 at level 5: inline: group group - item-135 at level 6: text: Then, if we write the transformed invariant operator as + item-135 at level 6: text: Then, if we write the transformed invariant operator as item-136 at level 6: formula: I_0 - item-137 at level 6: text: , the eigenvalue equation in the ... ormed frame is represented in terms of + item-137 at level 6: text: , the eigenvalue equation in the ... rmed frame is represented in terms of item-138 at level 6: formula: \Phi _{n}^{\prime }(\vec{r}) item-139 at level 6: text: , such that item-140 at level 5: formula: \begin{eqnarray} @@ -178,19 +178,19 @@ UIU^{-1}\Phi _{ ... {n}^{\prime }(\vec{r}). \left[ A_{0}p^{ ... }(r,\theta ,\varphi ), \end{eqnarray} item-143 at level 5: inline: group group - item-144 at level 6: text: where + item-144 at level 6: text: where item-145 at level 6: formula: D_{0} = 2A_{0}\mu (t)Z(t)\rho (t) - item-146 at level 6: text: while + item-146 at level 6: text: while item-147 at level 6: formula: n=0,1,2,\cdots - item-148 at level 6: text: . An infinite number of bound st ... the way, the direct differentiation of + item-148 at level 6: text: . An infinite number of bound st ... he way, the direct differentiation of item-149 at level 6: formula: D_0 - item-150 at level 6: text: with respect to + item-150 at level 6: text: with respect to item-151 at level 6: text: t - item-152 at level 6: text: , followed by the application of Eq. (13), yields + item-152 at level 6: text: , followed by the application of Eq. (13), yields item-153 at level 6: formula: d D_0/dt=0 - item-154 at level 6: text: . This means that + item-154 at level 6: text: . This means that item-155 at level 6: formula: D_0 - item-156 at level 6: text: is in fact a constant of motion, ... rmed version of the original invariant + item-156 at level 6: text: is in fact a constant of motion ... med version of the original invariant item-157 at level 6: formula: I(t) item-158 at level 6: text: . It is worth noting that Eq. (1 ... alue equation represented in Eq. (14). item-159 at level 5: text: The existence of a perturbation ... alue equation (18) can be rewritten as @@ -198,29 +198,29 @@ UIU^{-1}\Phi _{ ... {n}^{\prime }(\vec{r}). \begin{bmatrix} ... }(r,\theta ,\varphi ). \end{eqnarray} item-161 at level 5: inline: group group - item-162 at level 6: text: According to the invariant opera ... med system are represented in terms of + item-162 at level 6: text: According to the invariant opera ... ed system are represented in terms of item-163 at level 6: formula: \Phi _{nlm}^{\prime }(r,\theta ,\varphi ) item-164 at level 6: text: . Because this equation is indep ... to solve it. Considering this, we take item-165 at level 5: formula: \begin{eqnarray} \Phi _{nlm}^{\p ... (\theta ,\varphi )}{r}, \end{eqnarray} item-166 at level 5: inline: group group - item-167 at level 6: text: where we have introduced + item-167 at level 6: text: where we have introduced item-168 at level 6: formula: u_{nl}(r) = r R_{nl}(r) - item-169 at level 6: text: , whereas + item-169 at level 6: text: , whereas item-170 at level 6: formula: Y_{lm}(\theta ,\varphi ) - item-171 at level 6: text: are the spherical harmonics. The ... t of the eigenfunctions takes the form + item-171 at level 6: text: are the spherical harmonics. Th ... t of the eigenfunctions takes the form item-172 at level 5: formula: \begin{eqnarray} Y_{lm}(\theta , ... _{l}^{m}(\cos \theta ), \end{eqnarray} item-173 at level 5: inline: group group - item-174 at level 6: text: where + item-174 at level 6: text: where item-175 at level 6: formula: P_{l}^{m}(x) - item-176 at level 6: text: are the associated Legendre poly ... spherical normalization constants are + item-176 at level 6: text: are the associated Legendre pol ... spherical normalization constants are item-177 at level 6: formula: N_{lm}=(-1)^m \lbrace [(2l+1)/(4\pi )](l-m)!/(l+m)! \rbrace ^{1/2} - item-178 at level 6: text: . The allowed orbital and magnetic quantum numbers are + item-178 at level 6: text: . The allowed orbital and magnetic quantum numbers are item-179 at level 6: formula: l=0,1,2,\cdots - item-180 at level 6: text: and + item-180 at level 6: text: and item-181 at level 6: formula: m=-l,-l+1,\cdots ,l item-182 at level 6: text: , respectively. item-183 at level 5: text: Some algebraic manipulation, aft ... eads to the following radial equation: @@ -228,32 +228,32 @@ Y_{lm}(\theta , ... _{l}^{m}(\cos \theta ), \frac{d^{2}u_{n ... 2}}\right) u_{nl}(r)=0. \end{eqnarray} item-185 at level 5: inline: group group - item-186 at level 6: text: The equation is analytically intractable unless + item-186 at level 6: text: The equation is analytically intractable unless item-187 at level 6: formula: \Omega = 0 - item-188 at level 6: text: owing to the coexistence of + item-188 at level 6: text: owing to the coexistence of item-189 at level 6: formula: r^{2} - item-190 at level 6: text: and + item-190 at level 6: text: and item-191 at level 6: formula: -\frac{1}{r^{2}} - item-192 at level 6: text: terms. To resolve this difficult ... proximation scheme of the form [36–39] + item-192 at level 6: text: terms. To resolve this difficul ... proximation scheme of the form [36–39] item-193 at level 5: formula: \begin{eqnarray} \frac{1}{r^{2}} ... lta }{1-e^{-\delta r}}, \end{eqnarray} item-194 at level 5: inline: group group - item-195 at level 6: text: together with a coordinate transformation + item-195 at level 6: text: together with a coordinate transformation item-196 at level 6: formula: y=e^{-\delta r} - item-197 at level 6: text: . This type of approximation is ... creened potential, where the parameter + item-197 at level 6: text: . This type of approximation is ... reened potential, where the parameter  item-198 at level 6: formula: \delta - item-199 at level 6: text: is typically chosen to be equal ... n our system is not screened, choosing + item-199 at level 6: text: is typically chosen to be equal ... our system is not screened, choosing item-200 at level 6: formula: \delta - item-201 at level 6: text: to be similar to the typical scr ... istances comparable to or smaller than + item-201 at level 6: text: to be similar to the typical sc ... stances comparable to or smaller than item-202 at level 6: formula: 1/\delta - item-203 at level 6: text: . For example, in quarkonium models, + item-203 at level 6: text: . For example, in quarkonium models, item-204 at level 6: formula: \delta - item-205 at level 6: text: is usually taken to be in the ra ... 00 to 900 MeV [40,41]. Thus, selecting + item-205 at level 6: text: is usually taken to be in the r ... 0 to 900 MeV [40,41]. Thus, selecting item-206 at level 6: formula: \delta - item-207 at level 6: text: within this range is a reasonable choice. + item-207 at level 6: text: within this range is a reasonable choice. item-208 at level 5: inline: group group - item-209 at level 6: text: Then, by rewriting the notation as + item-209 at level 6: text: Then, by rewriting the notation as item-210 at level 6: formula: u_{nl}(r)\rightarrow U_{nl}(y) item-211 at level 6: text: , the differential equation (22) becomes item-212 at level 5: formula: \begin{eqnarray} @@ -264,9 +264,9 @@ Y_{lm}(\theta , ... _{l}^{m}(\cos \theta ), \varepsilon _{n ... ta },~~~\gamma =l(l+1). \end{eqnarray} item-215 at level 5: inline: group group - item-216 at level 6: text: In the representation of Eq. (24 ... ed higher-order terms corresponding to + item-216 at level 6: text: In the representation of Eq. (24 ... d higher-order terms corresponding to item-217 at level 6: formula: y^{3} - item-218 at level 6: text: and + item-218 at level 6: text: and item-219 at level 6: formula: y^{4} item-220 at level 6: text: . To solve this equation, we use ... [29] outlined in the next subsection. item-221 at level 3: section_header: 2.2. @@ -275,14 +275,14 @@ Y_{lm}(\theta , ... _{l}^{m}(\cos \theta ), \left[ \frac{d^ ... {2}}\right] \phi (s)=0, \end{eqnarray} item-224 at level 4: inline: group group - item-225 at level 5: text: where + item-225 at level 5: text: where item-226 at level 5: formula: \alpha _{i} item-227 at level 5: formula: (i=1,2,3) - item-228 at level 5: text: and + item-228 at level 5: text: and item-229 at level 5: formula: \zeta _{i} - item-230 at level 5: text: are parameters appropriately cho ... this equation has two singularities at + item-230 at level 5: text: are parameters appropriately ch ... his equation has two singularities at item-231 at level 5: formula: s\rightarrow 0 - item-232 at level 5: text: and + item-232 at level 5: text: and item-233 at level 5: formula: s\rightarrow 1/\alpha _{3} item-234 at level 5: text: , it is possible to take the solution in the form item-235 at level 4: formula: \begin{eqnarray} @@ -308,96 +308,96 @@ s(1-\alpha _{3} ... pa _+ \kappa _- f(s)=0, \end{eqnarray} item-244 at level 4: text: Thus, the equation is reduced to a tractable form. item-245 at level 4: inline: group group - item-246 at level 5: text: We now examine a simple case where + item-246 at level 5: text: We now examine a simple case where item-247 at level 5: formula: \alpha _3=1 item-248 at level 5: text: , which meets the equation assoc ... rincipal quantum number takes the form item-249 at level 4: formula: \begin{eqnarray} n=- \kappa _- , \end{eqnarray} item-250 at level 4: inline: group group - item-251 at level 5: text: the function + item-251 at level 5: text: the function item-252 at level 5: formula: f(s) - item-253 at level 5: text: is represented by the Gauss hypergeometric function as [29] + item-253 at level 5: text: is represented by the Gauss hypergeometric function as [29] item-254 at level 4: formula: \begin{eqnarray} f (s) = {_{2}F_{1}}(a,b;c;s), \end{eqnarray} item-255 at level 4: inline: group group - item-256 at level 5: text: where + item-256 at level 5: text: where item-257 at level 5: formula: a=\kappa _- - item-258 at level 5: text: , + item-258 at level 5: text: , item-259 at level 5: formula: b=\kappa _+ - item-260 at level 5: text: , and + item-260 at level 5: text: , and item-261 at level 5: formula: c=\alpha _{1}+2\lambda - item-262 at level 5: text: . The mathematical formula of this hypergeometric function is as follows: + item-262 at level 5: text: . The mathematical formula of this hypergeometric function is as follows: item-263 at level 5: formula: _{2}F_{1}(a,b;c;s)=\sum _{k=0}^{ ... ht) _{k}}{\left( c\right) _{k}k!}s^{k} - item-264 at level 5: text: , where + item-264 at level 5: text: , where item-265 at level 5: formula: \left( a\right) _{k}=a(a+1)(a+2)\cdots (a+k-1) - item-266 at level 5: text: for + item-266 at level 5: text: for item-267 at level 5: formula: k\ge 1 - item-268 at level 5: text: and + item-268 at level 5: text: and item-269 at level 5: formula: \left( a\right) _{0}=1 item-270 at level 5: text: . item-271 at level 4: inline: group group - item-272 at level 5: text: The Gauss hypergeometric function + item-272 at level 5: text: The Gauss hypergeometric function item-273 at level 5: formula: _{2}F_{1}(a,b;c;s) - item-274 at level 5: text: serves as a fundamental and unif ... n Eq. (34) with Eq. (33), the function + item-274 at level 5: text: serves as a fundamental and uni ... Eq. (34) with Eq. (33), the function item-275 at level 5: formula: _{2}F_{1}(a,b;c;s) - item-276 at level 5: text: terminates and reduces to a polynomial when + item-276 at level 5: text: terminates and reduces to a polynomial when item-277 at level 5: text: a - item-278 at level 5: text: is zero or a negative integer, a ... h Laguerre polynomials. In particular, + item-278 at level 5: text: is zero or a negative integer, ... Laguerre polynomials. In particular, item-279 at level 5: formula: _{2}F_{1}(a,b;c;s) - item-280 at level 5: text: is a generalization of Kummer’s confluent hypergeometric function + item-280 at level 5: text: is a generalization of Kummer’s confluent hypergeometric function item-281 at level 5: formula: _{1}F_{1}(a;c;s) - item-282 at level 5: text: . Hence, in the limiting case where + item-282 at level 5: text: . Hence, in the limiting case where item-283 at level 5: formula: b \rightarrow \infty - item-284 at level 5: text: , + item-284 at level 5: text: , item-285 at level 5: formula: _{2}F_{1}(a,b;c;s) - item-286 at level 5: text: converges to + item-286 at level 5: text: converges to item-287 at level 5: formula: _{1}F_{1}(a;c;s) - item-288 at level 5: text: . This convergence is rooted in the fact that, while + item-288 at level 5: text: . This convergence is rooted in the fact that, while item-289 at level 5: formula: {}_2F_1 - item-290 at level 5: text: has two regular singular points, ... rges the singularities, giving rise to + item-290 at level 5: text: has two regular singular points ... ges the singularities, giving rise to item-291 at level 5: formula: {}_1F_1 - item-292 at level 5: text: [44]. Additionally, the Jacobi p ... see formula 15.9.1 of Ref. [45]). The + item-292 at level 5: text: [44]. Additionally, the Jacobi ... see formula 15.9.1 of Ref. [45]). The item-293 at level 5: formula: {}_2F_1 - item-294 at level 5: text: function thus plays a major role ... turally leads to the appearance of the + item-294 at level 5: text: function thus plays a major rol ... urally leads to the appearance of the item-295 at level 5: formula: {}_2F_1 - item-296 at level 5: text: function as a solution, is appli ... rse, well suited to handling Eq. (24). + item-296 at level 5: text: function as a solution, is appl ... rse, well suited to handling Eq. (24). item-297 at level 3: section_header: 2.3. item-298 at level 4: section_header: 2.3.1. item-299 at level 5: inline: group group - item-300 at level 6: text: We now proceed to derive the wav ... are described by the eigenfunctions of + item-300 at level 6: text: We now proceed to derive the wav ... re described by the eigenfunctions of item-301 at level 6: formula: I(t) - item-302 at level 6: text: (instead of + item-302 at level 6: text: (instead of item-303 at level 6: formula: H(t) - item-304 at level 6: text: ), we need to determine the eigenfunctions + item-304 at level 6: text: ), we need to determine the eigenfunctions item-305 at level 6: formula: \Phi _n - item-306 at level 6: text: of Eq. (14). However, directly solving for + item-306 at level 6: text: of Eq. (14). However, directly solving for item-307 at level 6: formula: \Phi _n - item-308 at level 6: text: is likely to be a formidable tas ... mvent this difficulty, we first derive + item-308 at level 6: text: is likely to be a formidable ta ... vent this difficulty, we first derive item-309 at level 6: formula: \Phi _n^{\prime } - item-310 at level 6: text: from Eq. (17), and then reconstruct the desired eigenfunctions + item-310 at level 6: text: from Eq. (17), and then reconstruct the desired eigenfunctions item-311 at level 6: formula: \Phi _n - item-312 at level 6: text: by inversely transforming the obtained + item-312 at level 6: text: by inversely transforming the obtained item-313 at level 6: formula: \Phi _n^{\prime } - item-314 at level 6: text: , utilizing the inverse relation ... e Eq. (46), which appears later). Once + item-314 at level 6: text: , utilizing the inverse relation ... Eq. (46), which appears later). Once item-315 at level 6: formula: \Phi _n - item-316 at level 6: text: are obtained, the wave functions + item-316 at level 6: text: are obtained, the wave functions item-317 at level 6: formula: \Psi _n - item-318 at level 6: text: can be expressed in terms of them accordingly. + item-318 at level 6: text: can be expressed in terms of them accordingly. item-319 at level 5: inline: group group - item-320 at level 6: text: To obtain + item-320 at level 6: text: To obtain item-321 at level 6: formula: \Phi _n^{\prime } item-322 at level 6: text: , we need to solve Eq. (24) by s ... tions, in accordance with Eq. (27), as item-323 at level 5: formula: \begin{eqnarray} U_{nl}(y)=N_{nl ... )^{\upsilon }f_{nl}(y), \end{eqnarray} item-324 at level 5: inline: group group - item-325 at level 6: text: where + item-325 at level 6: text: where item-326 at level 6: formula: N_{nl} - item-327 at level 6: text: are normalization constants for the final wave functions. We applied + item-327 at level 6: text: are normalization constants for the final wave functions. We applied item-328 at level 6: formula: \alpha _{3}=1 - item-329 at level 6: text: in this equation. In addition, f ... ire the following parameter relations: + item-329 at level 6: text: in this equation. In addition, ... ire the following parameter relations: item-330 at level 5: formula: \begin{eqnarray} &&\alpha _{1}=\ ... {nl}-P+Q+\gamma .~~~~~~ \end{eqnarray} @@ -406,17 +406,17 @@ U_{nl}(y)=N_{nl ... )^{\upsilon }f_{nl}(y), \lambda =\sqrt{ ... \right) ^{2}-3P}.~~~~~~ \end{eqnarray} item-333 at level 5: inline: group group - item-334 at level 6: text: Although the original NUFA representations of + item-334 at level 6: text: Although the original NUFA representations of item-335 at level 6: formula: \lambda - item-336 at level 6: text: and + item-336 at level 6: text: and item-337 at level 6: formula: \upsilon item-338 at level 6: text: , given in Eqs. (28) and (29), include both positive and negative signs ( item-339 at level 6: formula: \pm - item-340 at level 6: text: ) from a purely mathematical per ... finite throughout the entire range of + item-340 at level 6: text: ) from a purely mathematical per ... finite throughout the entire range of item-341 at level 6: text: r - item-342 at level 6: text: and must vanish as + item-342 at level 6: text: and must vanish as item-343 at level 6: formula: r \rightarrow 0 - item-344 at level 6: text: and + item-344 at level 6: text: and item-345 at level 6: formula: r \rightarrow \infty item-346 at level 6: text: . item-347 at level 5: text: The expansion of Eq. (33) under the first condition in Eq. (36) yields @@ -424,26 +424,26 @@ U_{nl}(y)=N_{nl ... )^{\upsilon }f_{nl}(y), n+\lambda +\upsilon = \sqrt{\zeta _1}. \end{eqnarray} item-349 at level 5: inline: group group - item-350 at level 6: text: By squaring both sides of this e ... Eq. (36) together with the formula of + item-350 at level 6: text: By squaring both sides of this e ... Eq. (36) together with the formula of item-351 at level 6: formula: \lambda - item-352 at level 6: text: given in Eq. (37), the equation  ... ith the eigenvalues can be obtained as + item-352 at level 6: text: given in Eq. (37), the equation ... ith the eigenvalues can be obtained as item-353 at level 5: formula: \begin{eqnarray} 2[\varepsilon _ ... n )^{2}+5P+Q+\gamma =0. \end{eqnarray} item-354 at level 5: inline: group group - item-355 at level 6: text: It is possible to rearrange this equation into a formula for + item-355 at level 6: text: It is possible to rearrange this equation into a formula for item-356 at level 6: formula: \varepsilon _{nl} - item-357 at level 6: text: by first isolating the square ro ... sides. Substituting the expression for + item-357 at level 6: text: by first isolating the square r ... ides. Substituting the expression for item-358 at level 6: formula: \upsilon - item-359 at level 6: text: from Eq. (37) into the resulting ... 5), we finally obtain the eigenvalues: + item-359 at level 6: text: from Eq. (37) into the resultin ... 5), we finally obtain the eigenvalues: item-360 at level 5: formula: \begin{eqnarray} \Lambda _{nl} & ... \upsilon }\right] ^{2}. \end{eqnarray} item-361 at level 5: text: The eigenvalues obtained in Eq.  ... parameter-dependent quantum mechanics. item-362 at level 5: inline: group group - item-363 at level 6: text: In addition, by considering Eq.  ... e functions can be derived in terms of + item-363 at level 6: text: In addition, by considering Eq.  ... functions can be derived in terms of item-364 at level 6: formula: \Lambda _{nl} - item-365 at level 6: text: to be + item-365 at level 6: text: to be item-366 at level 5: formula: \begin{eqnarray} U_{nl}(y) &=& N ... {a},\bar{b};\bar{c};y), \end{eqnarray} @@ -458,28 +458,28 @@ U_{nl}(y) &=& N ... {a},\bar{b};\bar{c};y), \bar{c}=1+2\lambda . \end{eqnarray} item-371 at level 5: inline: group group - item-372 at level 6: text: From a mathematical standpoint, it is possible to define the parameter + item-372 at level 6: text: From a mathematical standpoint, it is possible to define the parameter item-373 at level 6: formula: \bar{a} - item-374 at level 6: text: interchangeably with + item-374 at level 6: text: interchangeably with item-375 at level 6: formula: \bar{b} - item-376 at level 6: text: . However, by choosing + item-376 at level 6: text: . However, by choosing item-377 at level 6: formula: \bar{a} - item-378 at level 6: text: as in Eq. (42), we allow the possibility for + item-378 at level 6: text: as in Eq. (42), we allow the possibility for item-379 at level 6: formula: \bar{a} - item-380 at level 6: text: to take on negative values. When + item-380 at level 6: text: to take on negative values. When item-381 at level 6: formula: \bar{a} - item-382 at level 6: text: is a nonpositive integer (i.e. a ... nction in Eq. (41) terminates at the ( + item-382 at level 6: text: is a nonpositive integer (i.e. ... nction in Eq. (41) terminates at the ( item-383 at level 6: formula: n+1 - item-384 at level 6: text: )th term and reduces to a polyno ... genfunctions of the invariant operator + item-384 at level 6: text: )th term and reduces to a polyno ... enfunctions of the invariant operator item-385 at level 6: formula: I_{0} - item-386 at level 6: text: are represented in the form + item-386 at level 6: text: are represented in the form item-387 at level 5: formula: \begin{eqnarray} \Phi _{nlm}^{\p ... {lm}(\theta ,\varphi ). \end{eqnarray} item-388 at level 5: inline: group group - item-389 at level 6: text: The complete eigenfunctions of the invariant + item-389 at level 6: text: The complete eigenfunctions of the invariant item-390 at level 6: text: I - item-391 at level 6: text: that belongs to the original sys ... rmed system, are given by the relation + item-391 at level 6: text: that belongs to the original sy ... rmed system, are given by the relation item-392 at level 5: formula: \begin{eqnarray} \Phi _{nlm}(\ve ... lm}^{\prime }(\vec{r}). \end{eqnarray} @@ -488,9 +488,9 @@ U_{nl}(y) &=& N ... {a},\bar{b};\bar{c};y), \Phi _{nlm}(r,\ ... {lm}(\theta ,\varphi ). \end{eqnarray} item-395 at level 5: inline: group group - item-396 at level 6: text: Meanwhile, + item-396 at level 6: text: Meanwhile, item-397 at level 6: formula: N_{nl} - item-398 at level 6: text: are derived by normalizing these ... Appendix A for a detailed evaluation) + item-398 at level 6: text: are derived by normalizing thes ... Appendix A for a detailed evaluation) item-399 at level 5: formula: \begin{eqnarray} N_{nl}=\sqrt{\d ... rime }) \Bigg ]^{-1/2}, \end{eqnarray} @@ -499,18 +499,18 @@ N_{nl}=\sqrt{\d ... rime }) \Bigg ]^{-1/2}, \mathcal {N}_{n ... \lambda ,2\upsilon +1), \end{eqnarray} item-402 at level 5: inline: group group - item-403 at level 6: text: whereas + item-403 at level 6: text: whereas item-404 at level 6: formula: {\mathrm{B}}(a_1,a_2) - item-405 at level 6: text: denotes the Beta function [48]. ... functions in the following subsection. + item-405 at level 6: text: denotes the Beta function [48]. ... functions in the following subsection. item-406 at level 4: section_header: 2.3.2. item-407 at level 5: inline: group group - item-408 at level 6: text: According to Lewis–Riesenfeld th ... esented in terms of the eigenfunctions + item-408 at level 6: text: According to Lewis–Riesenfeld th ... sented in terms of the eigenfunctions item-409 at level 6: formula: \Phi _{nlm}(\vec{r},t) - item-410 at level 6: text: of the invariant operator, which ... . Another required factor is the phase + item-410 at level 6: text: of the invariant operator, whic ... Another required factor is the phase item-411 at level 6: formula: \alpha (t) - item-412 at level 6: text: associated with each quantum sta ... in terms of the transformed eigenstate + item-412 at level 6: text: associated with each quantum st ... n terms of the transformed eigenstate item-413 at level 6: formula: \vert \Phi ^\prime \rangle - item-414 at level 6: text: instead of + item-414 at level 6: text: instead of item-415 at level 6: formula: \vert \Phi \rangle item-416 at level 6: text: , such that item-417 at level 5: formula: \begin{eqnarray} @@ -521,29 +521,29 @@ N_{nl}=\sqrt{\d ... rime }) \Bigg ]^{-1/2}, \alpha _{nl}(t) ... rime }+\alpha _{nl}(0), \end{eqnarray} item-420 at level 5: inline: group group - item-421 at level 6: text: where + item-421 at level 6: text: where item-422 at level 6: formula: \Lambda _{nl} - item-423 at level 6: text: are given by Eq. (40). These pha ... riptions to experimental observations. + item-423 at level 6: text: are given by Eq. (40). These ph ... riptions to experimental observations. item-424 at level 5: text: The solutions of the original Sc ... w be written in configuration space as item-425 at level 5: formula: \begin{eqnarray} \Psi _{nlm}(r,\ ... (r,\theta ,\varphi ,t), \end{eqnarray} item-426 at level 5: inline: group group - item-427 at level 6: text: where the explicit forms of + item-427 at level 6: text: where the explicit forms of item-428 at level 6: formula: \alpha _{nl}(t) - item-429 at level 6: text: and + item-429 at level 6: text: and item-430 at level 6: formula: \Phi _{nlm}(r,\theta ,\varphi ,t) - item-431 at level 6: text: are given in Eqs. (51) and (47), ... ing wave functions (52), together with + item-431 at level 6: text: are given in Eqs. (51) and (47) ... ng wave functions (52), together with item-432 at level 6: formula: \Lambda _{nl} - item-433 at level 6: text: in Eq. (40), serve as fundamenta ... roperties of the quark–antiquark pair. + item-433 at level 6: text: in Eq. (40), serve as fundament ... roperties of the quark–antiquark pair. item-434 at level 2: section_header: 3. item-435 at level 3: text: In this study, we investigated t ... tood special functions in mathematics. item-436 at level 3: inline: group group - item-437 at level 4: text: Our solutions are essential for ... strong CP problem and the role of the + item-437 at level 4: text: Our solutions are essential for ... strong CP problem and the role of the item-438 at level 4: formula: \theta - item-439 at level 4: text: -term, as well as the difficulty ... nd decay modes of heavy mesons such as + item-439 at level 4: text: -term, as well as the difficulty ... d decay modes of heavy mesons such as item-440 at level 4: formula: J/\psi - item-441 at level 4: text: [5,55]. The analytical solutions ... addressing these longstanding issues. + item-441 at level 4: text: [5,55]. The analytical solution ... addressing these longstanding issues. item-442 at level 2: section_header: Funding item-443 at level 3: inline: group group item-444 at level 4: text: Open Access funding: SCOAP @@ -554,7 +554,7 @@ N_{nl}=\sqrt{\d ... rime }) \Bigg ]^{-1/2}, \int _0^{2\pi } ... dr d\theta d\varphi =1. \end{eqnarray} item-449 at level 3: inline: group group - item-450 at level 4: text: Because the angular part + item-450 at level 4: text: Because the angular part item-451 at level 4: formula: Y_{lm} (\theta ,\varphi ) item-452 at level 4: text: , defined in Eq. (21), is alread ... q. (47), Eq. (A.1) can be rewritten as item-453 at level 3: formula: \begin{eqnarray} @@ -565,45 +565,45 @@ N_{nl}=\sqrt{\d ... rime }) \Bigg ]^{-1/2}, z=e^{-\delta \frac{r}{\rho (t)}}, \end{eqnarray} item-456 at level 3: inline: group group - item-457 at level 4: text: and consider the fact that + item-457 at level 4: text: and consider the fact that item-458 at level 4: formula: \bar{a} - item-459 at level 4: text: and + item-459 at level 4: text: and item-460 at level 4: formula: \bar{b} - item-461 at level 4: text: in this case can be expressed in terms of + item-461 at level 4: text: in this case can be expressed in terms of item-462 at level 4: text: n - item-463 at level 4: text: as + item-463 at level 4: text: as item-464 at level 3: formula: \begin{eqnarray} \bar{a}=-n,~~~~ ... (\upsilon +\lambda )+n, \end{eqnarray} item-465 at level 3: inline: group group - item-466 at level 4: text: along with Eq. (44) as the formula of + item-466 at level 4: text: along with Eq. (44) as the formula of item-467 at level 4: formula: \bar{c} item-468 at level 4: text: . Then, Eq. (A.2) becomes item-469 at level 3: formula: \begin{eqnarray} \frac{\left|N_{ ... {\delta }g_{\rm int}=1, \end{eqnarray} item-470 at level 3: inline: group group - item-471 at level 4: text: where + item-471 at level 4: text: where item-472 at level 4: formula: g_{\rm int} - item-473 at level 4: text: is the integral part: + item-473 at level 4: text: is the integral part: item-474 at level 3: formula: \begin{eqnarray} g_{\rm int}=\in ... a +1;z)\right] ^{2}dz . \end{eqnarray} item-475 at level 3: inline: group group - item-476 at level 4: text: To evaluate the integration + item-476 at level 4: text: To evaluate the integration item-477 at level 4: formula: g_{\rm int} item-478 at level 4: text: , we use the expansion formula f ... ion (see formula 15.2.4 of Ref. [45]): item-479 at level 3: formula: \begin{eqnarray} {_{2}F_{1}}(-n, ... \frac{(b)_k}{(c)_k}s^k, \end{eqnarray} item-480 at level 3: inline: group group - item-481 at level 4: text: which holds when + item-481 at level 4: text: which holds when item-482 at level 4: formula: n=0,1,2,\cdots - item-483 at level 4: text: and + item-483 at level 4: text: and item-484 at level 4: formula: c \ne 0,-1,-2,\cdots - item-485 at level 4: text: . This relation also holds when + item-485 at level 4: text: . This relation also holds when item-486 at level 4: formula: c=-n-j - item-487 at level 4: text: , where + item-487 at level 4: text: , where item-488 at level 4: formula: j=0,1,2,\cdots item-489 at level 4: text: . Substituting this series expansion into Eq. (A.6), we obtain item-490 at level 3: formula: \begin{eqnarray} @@ -614,19 +614,19 @@ g_{\rm int}&=&\ ... ight) ^{2\upsilon }dz . \mathrm{B}(a_1, ... _1-1} (1-s)^{a_2-1} ds, \end{eqnarray} item-493 at level 3: inline: group group - item-494 at level 4: text: under the conditions + item-494 at level 4: text: under the conditions item-495 at level 4: formula: {\rm Re}a_1\gt 0 - item-496 at level 4: text: and + item-496 at level 4: text: and item-497 at level 4: formula: {\rm Re}a_2\gt 0 - item-498 at level 4: text: . The two shape parameters of this function, in our case, are + item-498 at level 4: text: . The two shape parameters of this function, in our case, are item-499 at level 4: formula: a_1=k+k^{\prime }+2\lambda - item-500 at level 4: text: and + item-500 at level 4: text: and item-501 at level 4: formula: a_2=2\upsilon +1 - item-502 at level 4: text: . Thus, considering that the Pochhammer number is given by + item-502 at level 4: text: . Thus, considering that the Pochhammer number is given by item-503 at level 4: formula: (a)_k=\Gamma (a+k)/\Gamma (a) - item-504 at level 4: text: , where + item-504 at level 4: text: , where item-505 at level 4: formula: a \ne 0,-1,-2,\cdots - item-506 at level 4: text: , a rearrangement of Eq. (A.5) w ... ession for the normalization constants + item-506 at level 4: text: , a rearrangement of Eq. (A.5) w ... ssion for the normalization constants item-507 at level 4: formula: N_{nl} item-508 at level 4: text: , as presented in Eq. (48) of the text. item-509 at level 2: section_header: References diff --git a/tests/data/jats/groundtruth/ptag100.xml.json b/tests/data/jats/groundtruth/ptag100.xml.json index b4ab6afccc..78e2f900b7 100644 --- a/tests/data/jats/groundtruth/ptag100.xml.json +++ b/tests/data/jats/groundtruth/ptag100.xml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "ptag100", "origin": { "mimetype": "application/xml", @@ -2075,8 +2075,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We consider a quark–antiquark pair with a time-dependent effective reduced mass", - "text": "We consider a quark–antiquark pair with a time-dependent effective reduced mass" + "orig": "We consider a quark–antiquark pair with a time-dependent effective reduced mass ", + "text": "We consider a quark–antiquark pair with a time-dependent effective reduced mass " }, { "self_ref": "#/texts/14", @@ -2099,8 +2099,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in spherical coordinates, governed by a central potential", - "text": "in spherical coordinates, governed by a central potential" + "orig": " in spherical coordinates, governed by a central potential ", + "text": " in spherical coordinates, governed by a central potential " }, { "self_ref": "#/texts/16", @@ -2123,8 +2123,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": " where ", + "text": " where " }, { "self_ref": "#/texts/18", @@ -2147,8 +2147,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/20", @@ -2171,8 +2171,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are coefficients that depend on time. While", - "text": "are coefficients that depend on time. While" + "orig": " are coefficients that depend on time. While ", + "text": " are coefficients that depend on time. While " }, { "self_ref": "#/texts/22", @@ -2195,8 +2195,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "represents a confining trap potential with adjustable strength,", - "text": "represents a confining trap potential with adjustable strength," + "orig": " represents a confining trap potential with adjustable strength, ", + "text": " represents a confining trap potential with adjustable strength, " }, { "self_ref": "#/texts/24", @@ -2219,8 +2219,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a Coulomb perturbation with the constraint", - "text": "is a Coulomb perturbation with the constraint" + "orig": " is a Coulomb perturbation with the constraint ", + "text": " is a Coulomb perturbation with the constraint " }, { "self_ref": "#/texts/26", @@ -2291,8 +2291,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as", - "text": "This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as" + "orig": "This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as ", + "text": "This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as " }, { "self_ref": "#/texts/32", @@ -2315,8 +2315,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where", - "text": ", where" + "orig": ", where ", + "text": ", where " }, { "self_ref": "#/texts/34", @@ -2339,8 +2339,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/36", @@ -2370,8 +2370,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the total angular momentum, the formula for which is given by", - "text": "is the total angular momentum, the formula for which is given by" + "orig": " is the total angular momentum, the formula for which is given by", + "text": " is the total angular momentum, the formula for which is given by" }, { "self_ref": "#/texts/38", @@ -2394,8 +2394,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as", - "text": "To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as" + "orig": "To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as ", + "text": "To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as " }, { "self_ref": "#/texts/40", @@ -2525,8 +2525,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Because", - "text": "Because" + "orig": "Because ", + "text": "Because " }, { "self_ref": "#/texts/46", @@ -2549,8 +2549,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in Eq. (1) is represented in terms of time functions, directly solving Eq. (3) can be very challenging. To overcome this difficulty, we adopt the dynamical invariant method [24]. The core idea of this method is to treat the system in terms of a nontrivial invariant operator", - "text": "in Eq. (1) is represented in terms of time functions, directly solving Eq. (3) can be very challenging. To overcome this difficulty, we adopt the dynamical invariant method [24]. The core idea of this method is to treat the system in terms of a nontrivial invariant operator" + "orig": " in Eq. (1) is represented in terms of time functions, directly solving Eq. (3) can be very challenging. To overcome this difficulty, we adopt the dynamical invariant method [24]. The core idea of this method is to treat the system in terms of a nontrivial invariant operator ", + "text": " in Eq. (1) is represented in terms of time functions, directly solving Eq. (3) can be very challenging. To overcome this difficulty, we adopt the dynamical invariant method [24]. The core idea of this method is to treat the system in terms of a nontrivial invariant operator " }, { "self_ref": "#/texts/48", @@ -2573,8 +2573,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "rather than", - "text": "rather than" + "orig": " rather than ", + "text": " rather than " }, { "self_ref": "#/texts/50", @@ -2597,8 +2597,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in Eq. (1), where", - "text": "in Eq. (1), where" + "orig": " in Eq. (1), where ", + "text": " in Eq. (1), where " }, { "self_ref": "#/texts/52", @@ -2621,8 +2621,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "does not involve time-derivative operators. Moreover,", - "text": "does not involve time-derivative operators. Moreover," + "orig": " does not involve time-derivative operators. Moreover, ", + "text": " does not involve time-derivative operators. Moreover, " }, { "self_ref": "#/texts/54", @@ -2645,8 +2645,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is closely related to the concept of invariants in classical mechanics (e.g. constants of motion), thereby facilitating interpretation from the perspective of the quantum–classical correspondence.", - "text": "is closely related to the concept of invariants in classical mechanics (e.g. constants of motion), thereby facilitating interpretation from the perspective of the quantum–classical correspondence." + "orig": " is closely related to the concept of invariants in classical mechanics (e.g. constants of motion), thereby facilitating interpretation from the perspective of the quantum–classical correspondence.", + "text": " is closely related to the concept of invariants in classical mechanics (e.g. constants of motion), thereby facilitating interpretation from the perspective of the quantum–classical correspondence." }, { "self_ref": "#/texts/56", @@ -2657,8 +2657,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "By the definition of the invariant operator,", - "text": "By the definition of the invariant operator," + "orig": "By the definition of the invariant operator, ", + "text": "By the definition of the invariant operator, " }, { "self_ref": "#/texts/57", @@ -2681,8 +2681,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "satisfies the equation:", - "text": "satisfies the equation:" + "orig": " satisfies the equation:", + "text": " satisfies the equation:" }, { "self_ref": "#/texts/59", @@ -2705,8 +2705,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction", - "text": "If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction" + "orig": "If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction ", + "text": "If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction " }, { "self_ref": "#/texts/61", @@ -2753,8 +2753,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/65", @@ -2777,8 +2777,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a phase function that can be obtained from", - "text": "is a phase function that can be obtained from" + "orig": " is a phase function that can be obtained from", + "text": " is a phase function that can be obtained from" }, { "self_ref": "#/texts/67", @@ -2801,8 +2801,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To find the expression of the invariant", - "text": "To find the expression of the invariant" + "orig": "To find the expression of the invariant ", + "text": "To find the expression of the invariant " }, { "self_ref": "#/texts/69", @@ -2825,8 +2825,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "utilizing Eq. (4), we set", - "text": "utilizing Eq. (4), we set" + "orig": " utilizing Eq. (4), we set", + "text": " utilizing Eq. (4), we set" }, { "self_ref": "#/texts/71", @@ -2849,8 +2849,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/73", @@ -2873,8 +2873,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/75", @@ -2897,8 +2897,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/77", @@ -2921,8 +2921,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and", - "text": ", and" + "orig": ", and ", + "text": ", and " }, { "self_ref": "#/texts/79", @@ -2945,8 +2945,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of", - "text": "are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of" + "orig": " are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of ", + "text": " are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of " }, { "self_ref": "#/texts/81", @@ -2969,8 +2969,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "after substituting Eqs. (1) and (7) into Eq. (4) yields", - "text": "after substituting Eqs. (1) and (7) into Eq. (4) yields" + "orig": " after substituting Eqs. (1) and (7) into Eq. (4) yields", + "text": " after substituting Eqs. (1) and (7) into Eq. (4) yields" }, { "self_ref": "#/texts/83", @@ -3029,8 +3029,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/88", @@ -3053,8 +3053,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is an arbitrary real constant and", - "text": "is an arbitrary real constant and" + "orig": " is an arbitrary real constant and ", + "text": " is an arbitrary real constant and " }, { "self_ref": "#/texts/90", @@ -3077,8 +3077,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a solution of the following equation", - "text": "is a solution of the following equation" + "orig": " is a solution of the following equation", + "text": " is a solution of the following equation" }, { "self_ref": "#/texts/92", @@ -3101,8 +3101,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "with", - "text": "with" + "orig": "with ", + "text": "with " }, { "self_ref": "#/texts/94", @@ -3125,8 +3125,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "being a real constant. The above invariant is valid under the condition that", - "text": "being a real constant. The above invariant is valid under the condition that" + "orig": " being a real constant. The above invariant is valid under the condition that ", + "text": " being a real constant. The above invariant is valid under the condition that " }, { "self_ref": "#/texts/96", @@ -3149,8 +3149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "follows the relation", - "text": "follows the relation" + "orig": " follows the relation", + "text": " follows the relation" }, { "self_ref": "#/texts/98", @@ -3283,8 +3283,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Because the quantum wave functions of the system are represented in terms of the eigenfunctions of", - "text": "Because the quantum wave functions of the system are represented in terms of the eigenfunctions of" + "orig": "Because the quantum wave functions of the system are represented in terms of the eigenfunctions of ", + "text": "Because the quantum wave functions of the system are represented in terms of the eigenfunctions of " }, { "self_ref": "#/texts/102", @@ -3307,8 +3307,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant", - "text": ", it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant" + "orig": ", it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant ", + "text": ", it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant " }, { "self_ref": "#/texts/104", @@ -3331,8 +3331,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as", - "text": "as" + "orig": " as", + "text": " as" }, { "self_ref": "#/texts/106", @@ -3355,8 +3355,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/108", @@ -3379,8 +3379,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are the eigenvalues and", - "text": "are the eigenvalues and" + "orig": " are the eigenvalues and ", + "text": " are the eigenvalues and " }, { "self_ref": "#/texts/110", @@ -3403,8 +3403,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are time-dependent eigenfunctions. Given that", - "text": "are time-dependent eigenfunctions. Given that" + "orig": " are time-dependent eigenfunctions. Given that ", + "text": " are time-dependent eigenfunctions. Given that " }, { "self_ref": "#/texts/112", @@ -3451,8 +3451,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/116", @@ -3475,8 +3475,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a time-dependent unitary operator given by", - "text": "is a time-dependent unitary operator given by" + "orig": " is a time-dependent unitary operator given by", + "text": " is a time-dependent unitary operator given by" }, { "self_ref": "#/texts/118", @@ -3499,8 +3499,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Then, if we write the transformed invariant operator as", - "text": "Then, if we write the transformed invariant operator as" + "orig": "Then, if we write the transformed invariant operator as ", + "text": "Then, if we write the transformed invariant operator as " }, { "self_ref": "#/texts/120", @@ -3523,8 +3523,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", the eigenvalue equation in the transformed frame is represented in terms of", - "text": ", the eigenvalue equation in the transformed frame is represented in terms of" + "orig": ", the eigenvalue equation in the transformed frame is represented in terms of ", + "text": ", the eigenvalue equation in the transformed frame is represented in terms of " }, { "self_ref": "#/texts/122", @@ -3595,8 +3595,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/128", @@ -3619,8 +3619,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "while", - "text": "while" + "orig": " while ", + "text": " while " }, { "self_ref": "#/texts/130", @@ -3643,8 +3643,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of", - "text": ". An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of" + "orig": ". An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of ", + "text": ". An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of " }, { "self_ref": "#/texts/132", @@ -3667,8 +3667,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "with respect to", - "text": "with respect to" + "orig": " with respect to ", + "text": " with respect to " }, { "self_ref": "#/texts/134", @@ -3698,8 +3698,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", followed by the application of Eq. (13), yields", - "text": ", followed by the application of Eq. (13), yields" + "orig": ", followed by the application of Eq. (13), yields ", + "text": ", followed by the application of Eq. (13), yields " }, { "self_ref": "#/texts/136", @@ -3722,8 +3722,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". This means that", - "text": ". This means that" + "orig": ". This means that ", + "text": ". This means that " }, { "self_ref": "#/texts/138", @@ -3746,8 +3746,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant", - "text": "is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant" + "orig": " is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant ", + "text": " is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant " }, { "self_ref": "#/texts/140", @@ -3806,8 +3806,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "According to the invariant operator theory, the wave functions of the transformed system are represented in terms of", - "text": "According to the invariant operator theory, the wave functions of the transformed system are represented in terms of" + "orig": "According to the invariant operator theory, the wave functions of the transformed system are represented in terms of ", + "text": "According to the invariant operator theory, the wave functions of the transformed system are represented in terms of " }, { "self_ref": "#/texts/145", @@ -3854,8 +3854,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where we have introduced", - "text": "where we have introduced" + "orig": "where we have introduced ", + "text": "where we have introduced " }, { "self_ref": "#/texts/149", @@ -3878,8 +3878,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", whereas", - "text": ", whereas" + "orig": ", whereas ", + "text": ", whereas " }, { "self_ref": "#/texts/151", @@ -3902,8 +3902,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are the spherical harmonics. The angular part of the eigenfunctions takes the form", - "text": "are the spherical harmonics. The angular part of the eigenfunctions takes the form" + "orig": " are the spherical harmonics. The angular part of the eigenfunctions takes the form", + "text": " are the spherical harmonics. The angular part of the eigenfunctions takes the form" }, { "self_ref": "#/texts/153", @@ -3926,8 +3926,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/155", @@ -3950,8 +3950,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are the associated Legendre polynomials, while the spherical normalization constants are", - "text": "are the associated Legendre polynomials, while the spherical normalization constants are" + "orig": " are the associated Legendre polynomials, while the spherical normalization constants are ", + "text": " are the associated Legendre polynomials, while the spherical normalization constants are " }, { "self_ref": "#/texts/157", @@ -3974,8 +3974,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The allowed orbital and magnetic quantum numbers are", - "text": ". The allowed orbital and magnetic quantum numbers are" + "orig": ". The allowed orbital and magnetic quantum numbers are ", + "text": ". The allowed orbital and magnetic quantum numbers are " }, { "self_ref": "#/texts/159", @@ -3998,8 +3998,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/161", @@ -4058,8 +4058,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The equation is analytically intractable unless", - "text": "The equation is analytically intractable unless" + "orig": "The equation is analytically intractable unless ", + "text": "The equation is analytically intractable unless " }, { "self_ref": "#/texts/166", @@ -4082,8 +4082,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "owing to the coexistence of", - "text": "owing to the coexistence of" + "orig": " owing to the coexistence of ", + "text": " owing to the coexistence of " }, { "self_ref": "#/texts/168", @@ -4106,8 +4106,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/170", @@ -4130,8 +4130,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "terms. To resolve this difficulty, we employ the Greene–Aldrich approximation scheme of the form [36–39]", - "text": "terms. To resolve this difficulty, we employ the Greene–Aldrich approximation scheme of the form [36–39]" + "orig": " terms. To resolve this difficulty, we employ the Greene–Aldrich approximation scheme of the form [36–39]", + "text": " terms. To resolve this difficulty, we employ the Greene–Aldrich approximation scheme of the form [36–39]" }, { "self_ref": "#/texts/172", @@ -4154,8 +4154,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "together with a coordinate transformation", - "text": "together with a coordinate transformation" + "orig": "together with a coordinate transformation ", + "text": "together with a coordinate transformation " }, { "self_ref": "#/texts/174", @@ -4178,8 +4178,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter", - "text": ". This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter" + "orig": ". This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter ", + "text": ". This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter " }, { "self_ref": "#/texts/176", @@ -4202,8 +4202,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing", - "text": "is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing" + "orig": " is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing ", + "text": " is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing " }, { "self_ref": "#/texts/178", @@ -4226,8 +4226,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than", - "text": "to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than" + "orig": " to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than ", + "text": " to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than " }, { "self_ref": "#/texts/180", @@ -4250,8 +4250,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". For example, in quarkonium models,", - "text": ". For example, in quarkonium models," + "orig": ". For example, in quarkonium models, ", + "text": ". For example, in quarkonium models, " }, { "self_ref": "#/texts/182", @@ -4274,8 +4274,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting", - "text": "is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting" + "orig": " is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting ", + "text": " is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting " }, { "self_ref": "#/texts/184", @@ -4298,8 +4298,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "within this range is a reasonable choice.", - "text": "within this range is a reasonable choice." + "orig": " within this range is a reasonable choice.", + "text": " within this range is a reasonable choice." }, { "self_ref": "#/texts/186", @@ -4310,8 +4310,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Then, by rewriting the notation as", - "text": "Then, by rewriting the notation as" + "orig": "Then, by rewriting the notation as ", + "text": "Then, by rewriting the notation as " }, { "self_ref": "#/texts/187", @@ -4382,8 +4382,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In the representation of Eq. (24), we neglected higher-order terms corresponding to", - "text": "In the representation of Eq. (24), we neglected higher-order terms corresponding to" + "orig": "In the representation of Eq. (24), we neglected higher-order terms corresponding to ", + "text": "In the representation of Eq. (24), we neglected higher-order terms corresponding to " }, { "self_ref": "#/texts/193", @@ -4406,8 +4406,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/195", @@ -4537,8 +4537,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/201", @@ -4573,8 +4573,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/204", @@ -4597,8 +4597,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are parameters appropriately chosen depending on a given system. Because this equation has two singularities at", - "text": "are parameters appropriately chosen depending on a given system. Because this equation has two singularities at" + "orig": " are parameters appropriately chosen depending on a given system. Because this equation has two singularities at ", + "text": " are parameters appropriately chosen depending on a given system. Because this equation has two singularities at " }, { "self_ref": "#/texts/206", @@ -4621,8 +4621,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/208", @@ -4777,8 +4777,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We now examine a simple case where", - "text": "We now examine a simple case where" + "orig": "We now examine a simple case where ", + "text": "We now examine a simple case where " }, { "self_ref": "#/texts/221", @@ -4825,8 +4825,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "the function", - "text": "the function" + "orig": "the function ", + "text": "the function " }, { "self_ref": "#/texts/225", @@ -4849,8 +4849,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is represented by the Gauss hypergeometric function as [29]", - "text": "is represented by the Gauss hypergeometric function as [29]" + "orig": " is represented by the Gauss hypergeometric function as [29]", + "text": " is represented by the Gauss hypergeometric function as [29]" }, { "self_ref": "#/texts/227", @@ -4873,8 +4873,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/229", @@ -4897,8 +4897,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/231", @@ -4921,8 +4921,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and", - "text": ", and" + "orig": ", and ", + "text": ", and " }, { "self_ref": "#/texts/233", @@ -4945,8 +4945,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The mathematical formula of this hypergeometric function is as follows:", - "text": ". The mathematical formula of this hypergeometric function is as follows:" + "orig": ". The mathematical formula of this hypergeometric function is as follows: ", + "text": ". The mathematical formula of this hypergeometric function is as follows: " }, { "self_ref": "#/texts/235", @@ -4969,8 +4969,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where", - "text": ", where" + "orig": ", where ", + "text": ", where " }, { "self_ref": "#/texts/237", @@ -4993,8 +4993,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for", - "text": "for" + "orig": " for ", + "text": " for " }, { "self_ref": "#/texts/239", @@ -5017,8 +5017,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/241", @@ -5053,8 +5053,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Gauss hypergeometric function", - "text": "The Gauss hypergeometric function" + "orig": "The Gauss hypergeometric function ", + "text": "The Gauss hypergeometric function " }, { "self_ref": "#/texts/244", @@ -5077,8 +5077,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function", - "text": "serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function" + "orig": " serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function ", + "text": " serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function " }, { "self_ref": "#/texts/246", @@ -5101,8 +5101,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "terminates and reduces to a polynomial when", - "text": "terminates and reduces to a polynomial when" + "orig": " terminates and reduces to a polynomial when ", + "text": " terminates and reduces to a polynomial when " }, { "self_ref": "#/texts/248", @@ -5132,8 +5132,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular,", - "text": "is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular," + "orig": " is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular, ", + "text": " is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular, " }, { "self_ref": "#/texts/250", @@ -5156,8 +5156,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a generalization of Kummer’s confluent hypergeometric function", - "text": "is a generalization of Kummer’s confluent hypergeometric function" + "orig": " is a generalization of Kummer’s confluent hypergeometric function ", + "text": " is a generalization of Kummer’s confluent hypergeometric function " }, { "self_ref": "#/texts/252", @@ -5180,8 +5180,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Hence, in the limiting case where", - "text": ". Hence, in the limiting case where" + "orig": ". Hence, in the limiting case where ", + "text": ". Hence, in the limiting case where " }, { "self_ref": "#/texts/254", @@ -5204,8 +5204,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/256", @@ -5228,8 +5228,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "converges to", - "text": "converges to" + "orig": " converges to ", + "text": " converges to " }, { "self_ref": "#/texts/258", @@ -5252,8 +5252,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". This convergence is rooted in the fact that, while", - "text": ". This convergence is rooted in the fact that, while" + "orig": ". This convergence is rooted in the fact that, while ", + "text": ". This convergence is rooted in the fact that, while " }, { "self_ref": "#/texts/260", @@ -5276,8 +5276,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to", - "text": "has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to" + "orig": " has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to ", + "text": " has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to " }, { "self_ref": "#/texts/262", @@ -5300,8 +5300,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The", - "text": "[44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The" + "orig": " [44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The ", + "text": " [44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The " }, { "self_ref": "#/texts/264", @@ -5324,8 +5324,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the", - "text": "function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the" + "orig": " function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the ", + "text": " function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the " }, { "self_ref": "#/texts/266", @@ -5348,8 +5348,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24).", - "text": "function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24)." + "orig": " function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24).", + "text": " function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24)." }, { "self_ref": "#/texts/268", @@ -5490,8 +5490,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of", - "text": "We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of" + "orig": "We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of ", + "text": "We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of " }, { "self_ref": "#/texts/271", @@ -5514,8 +5514,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(instead of", - "text": "(instead of" + "orig": " (instead of ", + "text": " (instead of " }, { "self_ref": "#/texts/273", @@ -5538,8 +5538,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "), we need to determine the eigenfunctions", - "text": "), we need to determine the eigenfunctions" + "orig": "), we need to determine the eigenfunctions ", + "text": "), we need to determine the eigenfunctions " }, { "self_ref": "#/texts/275", @@ -5562,8 +5562,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of Eq. (14). However, directly solving for", - "text": "of Eq. (14). However, directly solving for" + "orig": " of Eq. (14). However, directly solving for ", + "text": " of Eq. (14). However, directly solving for " }, { "self_ref": "#/texts/277", @@ -5586,8 +5586,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is likely to be a formidable task. To circumvent this difficulty, we first derive", - "text": "is likely to be a formidable task. To circumvent this difficulty, we first derive" + "orig": " is likely to be a formidable task. To circumvent this difficulty, we first derive ", + "text": " is likely to be a formidable task. To circumvent this difficulty, we first derive " }, { "self_ref": "#/texts/279", @@ -5610,8 +5610,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "from Eq. (17), and then reconstruct the desired eigenfunctions", - "text": "from Eq. (17), and then reconstruct the desired eigenfunctions" + "orig": " from Eq. (17), and then reconstruct the desired eigenfunctions ", + "text": " from Eq. (17), and then reconstruct the desired eigenfunctions " }, { "self_ref": "#/texts/281", @@ -5634,8 +5634,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by inversely transforming the obtained", - "text": "by inversely transforming the obtained" + "orig": " by inversely transforming the obtained ", + "text": " by inversely transforming the obtained " }, { "self_ref": "#/texts/283", @@ -5658,8 +5658,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once", - "text": ", utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once" + "orig": ", utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once ", + "text": ", utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once " }, { "self_ref": "#/texts/285", @@ -5682,8 +5682,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are obtained, the wave functions", - "text": "are obtained, the wave functions" + "orig": " are obtained, the wave functions ", + "text": " are obtained, the wave functions " }, { "self_ref": "#/texts/287", @@ -5706,8 +5706,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "can be expressed in terms of them accordingly.", - "text": "can be expressed in terms of them accordingly." + "orig": " can be expressed in terms of them accordingly.", + "text": " can be expressed in terms of them accordingly." }, { "self_ref": "#/texts/289", @@ -5718,8 +5718,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To obtain", - "text": "To obtain" + "orig": "To obtain ", + "text": "To obtain " }, { "self_ref": "#/texts/290", @@ -5766,8 +5766,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/294", @@ -5790,8 +5790,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are normalization constants for the final wave functions. We applied", - "text": "are normalization constants for the final wave functions. We applied" + "orig": " are normalization constants for the final wave functions. We applied ", + "text": " are normalization constants for the final wave functions. We applied " }, { "self_ref": "#/texts/296", @@ -5814,8 +5814,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in this equation. In addition, from the comparison of Eq. (24) with the NUFA equation (26), we acquire the following parameter relations:", - "text": "in this equation. In addition, from the comparison of Eq. (24) with the NUFA equation (26), we acquire the following parameter relations:" + "orig": " in this equation. In addition, from the comparison of Eq. (24) with the NUFA equation (26), we acquire the following parameter relations:", + "text": " in this equation. In addition, from the comparison of Eq. (24) with the NUFA equation (26), we acquire the following parameter relations:" }, { "self_ref": "#/texts/298", @@ -5862,8 +5862,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Although the original NUFA representations of", - "text": "Although the original NUFA representations of" + "orig": "Although the original NUFA representations of ", + "text": "Although the original NUFA representations of " }, { "self_ref": "#/texts/302", @@ -5886,8 +5886,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/304", @@ -5934,8 +5934,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ") from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of", - "text": ") from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of" + "orig": ") from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of ", + "text": ") from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of " }, { "self_ref": "#/texts/308", @@ -5965,8 +5965,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and must vanish as", - "text": "and must vanish as" + "orig": " and must vanish as ", + "text": " and must vanish as " }, { "self_ref": "#/texts/310", @@ -5989,8 +5989,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/312", @@ -6049,8 +6049,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "By squaring both sides of this equation and using the second relation from Eq. (36) together with the formula of", - "text": "By squaring both sides of this equation and using the second relation from Eq. (36) together with the formula of" + "orig": "By squaring both sides of this equation and using the second relation from Eq. (36) together with the formula of ", + "text": "By squaring both sides of this equation and using the second relation from Eq. (36) together with the formula of " }, { "self_ref": "#/texts/317", @@ -6073,8 +6073,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "given in Eq. (37), the equation associated with the eigenvalues can be obtained as", - "text": "given in Eq. (37), the equation associated with the eigenvalues can be obtained as" + "orig": " given in Eq. (37), the equation associated with the eigenvalues can be obtained as", + "text": " given in Eq. (37), the equation associated with the eigenvalues can be obtained as" }, { "self_ref": "#/texts/319", @@ -6097,8 +6097,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "It is possible to rearrange this equation into a formula for", - "text": "It is possible to rearrange this equation into a formula for" + "orig": "It is possible to rearrange this equation into a formula for ", + "text": "It is possible to rearrange this equation into a formula for " }, { "self_ref": "#/texts/321", @@ -6121,8 +6121,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by first isolating the square root term on the left-hand side, shifting all other terms to the right-hand side, and then squaring both sides. Substituting the expression for", - "text": "by first isolating the square root term on the left-hand side, shifting all other terms to the right-hand side, and then squaring both sides. Substituting the expression for" + "orig": " by first isolating the square root term on the left-hand side, shifting all other terms to the right-hand side, and then squaring both sides. Substituting the expression for ", + "text": " by first isolating the square root term on the left-hand side, shifting all other terms to the right-hand side, and then squaring both sides. Substituting the expression for " }, { "self_ref": "#/texts/323", @@ -6145,8 +6145,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "from Eq. (37) into the resulting equation, and using Eq. (25), we finally obtain the eigenvalues:", - "text": "from Eq. (37) into the resulting equation, and using Eq. (25), we finally obtain the eigenvalues:" + "orig": " from Eq. (37) into the resulting equation, and using Eq. (25), we finally obtain the eigenvalues:", + "text": " from Eq. (37) into the resulting equation, and using Eq. (25), we finally obtain the eigenvalues:" }, { "self_ref": "#/texts/325", @@ -6181,8 +6181,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In addition, by considering Eq. (27) with Eqs. (28), (29), and (34), the corresponding radial wave functions can be derived in terms of", - "text": "In addition, by considering Eq. (27) with Eqs. (28), (29), and (34), the corresponding radial wave functions can be derived in terms of" + "orig": "In addition, by considering Eq. (27) with Eqs. (28), (29), and (34), the corresponding radial wave functions can be derived in terms of ", + "text": "In addition, by considering Eq. (27) with Eqs. (28), (29), and (34), the corresponding radial wave functions can be derived in terms of " }, { "self_ref": "#/texts/328", @@ -6205,8 +6205,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "to be", - "text": "to be" + "orig": " to be", + "text": " to be" }, { "self_ref": "#/texts/330", @@ -6277,8 +6277,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "From a mathematical standpoint, it is possible to define the parameter", - "text": "From a mathematical standpoint, it is possible to define the parameter" + "orig": "From a mathematical standpoint, it is possible to define the parameter ", + "text": "From a mathematical standpoint, it is possible to define the parameter " }, { "self_ref": "#/texts/336", @@ -6301,8 +6301,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "interchangeably with", - "text": "interchangeably with" + "orig": " interchangeably with ", + "text": " interchangeably with " }, { "self_ref": "#/texts/338", @@ -6325,8 +6325,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". However, by choosing", - "text": ". However, by choosing" + "orig": ". However, by choosing ", + "text": ". However, by choosing " }, { "self_ref": "#/texts/340", @@ -6349,8 +6349,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as in Eq. (42), we allow the possibility for", - "text": "as in Eq. (42), we allow the possibility for" + "orig": " as in Eq. (42), we allow the possibility for ", + "text": " as in Eq. (42), we allow the possibility for " }, { "self_ref": "#/texts/342", @@ -6373,8 +6373,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "to take on negative values. When", - "text": "to take on negative values. When" + "orig": " to take on negative values. When ", + "text": " to take on negative values. When " }, { "self_ref": "#/texts/344", @@ -6397,8 +6397,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the (", - "text": "is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the (" + "orig": " is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the (", + "text": " is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the (" }, { "self_ref": "#/texts/346", @@ -6421,8 +6421,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ")th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator", - "text": ")th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator" + "orig": ")th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator ", + "text": ")th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator " }, { "self_ref": "#/texts/348", @@ -6445,8 +6445,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are represented in the form", - "text": "are represented in the form" + "orig": " are represented in the form", + "text": " are represented in the form" }, { "self_ref": "#/texts/350", @@ -6469,8 +6469,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The complete eigenfunctions of the invariant", - "text": "The complete eigenfunctions of the invariant" + "orig": "The complete eigenfunctions of the invariant ", + "text": "The complete eigenfunctions of the invariant " }, { "self_ref": "#/texts/352", @@ -6500,8 +6500,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "that belongs to the original system, i.e., the untransformed system, are given by the relation", - "text": "that belongs to the original system, i.e., the untransformed system, are given by the relation" + "orig": " that belongs to the original system, i.e., the untransformed system, are given by the relation", + "text": " that belongs to the original system, i.e., the untransformed system, are given by the relation" }, { "self_ref": "#/texts/354", @@ -6548,8 +6548,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Meanwhile,", - "text": "Meanwhile," + "orig": "Meanwhile, ", + "text": "Meanwhile, " }, { "self_ref": "#/texts/358", @@ -6572,8 +6572,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are derived by normalizing these resultant eigenfunctions. The normalization procedure yields (see Appendix A for a detailed evaluation)", - "text": "are derived by normalizing these resultant eigenfunctions. The normalization procedure yields (see Appendix A for a detailed evaluation)" + "orig": " are derived by normalizing these resultant eigenfunctions. The normalization procedure yields (see Appendix A for a detailed evaluation)", + "text": " are derived by normalizing these resultant eigenfunctions. The normalization procedure yields (see Appendix A for a detailed evaluation)" }, { "self_ref": "#/texts/360", @@ -6620,8 +6620,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "whereas", - "text": "whereas" + "orig": "whereas ", + "text": "whereas " }, { "self_ref": "#/texts/364", @@ -6644,8 +6644,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "denotes the Beta function [48]. The eigenfunctions in Eq. (47) are essentially related to the Schrödinger solutions of the system. We demonstrate how to construct the full quantum solutions in terms of these eigenfunctions in the following subsection.", - "text": "denotes the Beta function [48]. The eigenfunctions in Eq. (47) are essentially related to the Schrödinger solutions of the system. We demonstrate how to construct the full quantum solutions in terms of these eigenfunctions in the following subsection." + "orig": " denotes the Beta function [48]. The eigenfunctions in Eq. (47) are essentially related to the Schrödinger solutions of the system. We demonstrate how to construct the full quantum solutions in terms of these eigenfunctions in the following subsection.", + "text": " denotes the Beta function [48]. The eigenfunctions in Eq. (47) are essentially related to the Schrödinger solutions of the system. We demonstrate how to construct the full quantum solutions in terms of these eigenfunctions in the following subsection." }, { "self_ref": "#/texts/366", @@ -6694,8 +6694,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions", - "text": "According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions" + "orig": "According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions ", + "text": "According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions " }, { "self_ref": "#/texts/368", @@ -6718,8 +6718,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase", - "text": "of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase" + "orig": " of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase ", + "text": " of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase " }, { "self_ref": "#/texts/370", @@ -6742,8 +6742,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate", - "text": "associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate" + "orig": " associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate ", + "text": " associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate " }, { "self_ref": "#/texts/372", @@ -6766,8 +6766,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "instead of", - "text": "instead of" + "orig": " instead of ", + "text": " instead of " }, { "self_ref": "#/texts/374", @@ -6838,8 +6838,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/380", @@ -6862,8 +6862,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are given by Eq. (40). These phases emerge as a result of the time evolution of the wave functions and can produce observable consequences, such as interference patterns, through relative phase differences between quantum states. Both the geometrical phase and the conventional dynamical phase contribute to the total phase. While the dynamical phase results from the cumulation of energy over time, the geometric phase originates from the intrinsic geometry of the path traced by the state vector during evolution, often under adiabatic conditions. The significance of the geometrical phase lies in the fact that it is not a mathematical artifact but a physically meaningful, gauge-invariant quantity that can influence the actual quantum state of the system. It not only takes place in this system, but appears ubiquitously across various physical systems as well, and can be measured via interference experiments. Unlike the dynamical phase, which depends on the eigenvalues of the Hamiltonian, the geometrical phase depends on the trajectory of the eigenvectors themselves. As such, it plays a critical role in associated phenomena such as energy level splitting and the orbital behavior of quasiparticles, making it a subject of continued theoretical and experimental interest. In particular, in systems with irregular and nonlinear interactions, such as quark–antiquark systems, it reflects the underlying symmetries, binding mechanisms, and topological features of the system [49,50]. Accordingly, the geometrical phase constitutes a fundamental component in the evolution of the system, linking theoretical descriptions to experimental observations.", - "text": "are given by Eq. (40). These phases emerge as a result of the time evolution of the wave functions and can produce observable consequences, such as interference patterns, through relative phase differences between quantum states. Both the geometrical phase and the conventional dynamical phase contribute to the total phase. While the dynamical phase results from the cumulation of energy over time, the geometric phase originates from the intrinsic geometry of the path traced by the state vector during evolution, often under adiabatic conditions. The significance of the geometrical phase lies in the fact that it is not a mathematical artifact but a physically meaningful, gauge-invariant quantity that can influence the actual quantum state of the system. It not only takes place in this system, but appears ubiquitously across various physical systems as well, and can be measured via interference experiments. Unlike the dynamical phase, which depends on the eigenvalues of the Hamiltonian, the geometrical phase depends on the trajectory of the eigenvectors themselves. As such, it plays a critical role in associated phenomena such as energy level splitting and the orbital behavior of quasiparticles, making it a subject of continued theoretical and experimental interest. In particular, in systems with irregular and nonlinear interactions, such as quark–antiquark systems, it reflects the underlying symmetries, binding mechanisms, and topological features of the system [49,50]. Accordingly, the geometrical phase constitutes a fundamental component in the evolution of the system, linking theoretical descriptions to experimental observations." + "orig": " are given by Eq. (40). These phases emerge as a result of the time evolution of the wave functions and can produce observable consequences, such as interference patterns, through relative phase differences between quantum states. Both the geometrical phase and the conventional dynamical phase contribute to the total phase. While the dynamical phase results from the cumulation of energy over time, the geometric phase originates from the intrinsic geometry of the path traced by the state vector during evolution, often under adiabatic conditions. The significance of the geometrical phase lies in the fact that it is not a mathematical artifact but a physically meaningful, gauge-invariant quantity that can influence the actual quantum state of the system. It not only takes place in this system, but appears ubiquitously across various physical systems as well, and can be measured via interference experiments. Unlike the dynamical phase, which depends on the eigenvalues of the Hamiltonian, the geometrical phase depends on the trajectory of the eigenvectors themselves. As such, it plays a critical role in associated phenomena such as energy level splitting and the orbital behavior of quasiparticles, making it a subject of continued theoretical and experimental interest. In particular, in systems with irregular and nonlinear interactions, such as quark–antiquark systems, it reflects the underlying symmetries, binding mechanisms, and topological features of the system [49,50]. Accordingly, the geometrical phase constitutes a fundamental component in the evolution of the system, linking theoretical descriptions to experimental observations.", + "text": " are given by Eq. (40). These phases emerge as a result of the time evolution of the wave functions and can produce observable consequences, such as interference patterns, through relative phase differences between quantum states. Both the geometrical phase and the conventional dynamical phase contribute to the total phase. While the dynamical phase results from the cumulation of energy over time, the geometric phase originates from the intrinsic geometry of the path traced by the state vector during evolution, often under adiabatic conditions. The significance of the geometrical phase lies in the fact that it is not a mathematical artifact but a physically meaningful, gauge-invariant quantity that can influence the actual quantum state of the system. It not only takes place in this system, but appears ubiquitously across various physical systems as well, and can be measured via interference experiments. Unlike the dynamical phase, which depends on the eigenvalues of the Hamiltonian, the geometrical phase depends on the trajectory of the eigenvectors themselves. As such, it plays a critical role in associated phenomena such as energy level splitting and the orbital behavior of quasiparticles, making it a subject of continued theoretical and experimental interest. In particular, in systems with irregular and nonlinear interactions, such as quark–antiquark systems, it reflects the underlying symmetries, binding mechanisms, and topological features of the system [49,50]. Accordingly, the geometrical phase constitutes a fundamental component in the evolution of the system, linking theoretical descriptions to experimental observations." }, { "self_ref": "#/texts/382", @@ -6898,8 +6898,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where the explicit forms of", - "text": "where the explicit forms of" + "orig": "where the explicit forms of ", + "text": "where the explicit forms of " }, { "self_ref": "#/texts/385", @@ -6922,8 +6922,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/387", @@ -6946,8 +6946,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are given in Eqs. (51) and (47), respectively. The resulting wave functions (52), together with", - "text": "are given in Eqs. (51) and (47), respectively. The resulting wave functions (52), together with" + "orig": " are given in Eqs. (51) and (47), respectively. The resulting wave functions (52), together with ", + "text": " are given in Eqs. (51) and (47), respectively. The resulting wave functions (52), together with " }, { "self_ref": "#/texts/389", @@ -6970,8 +6970,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in Eq. (40), serve as fundamental solutions for the quark–antiquark systems under consideration. The obtained wave functions enable us to compute spatial distributions (densities), transition probabilities, correlations, etc. Consequently, they provide a foundational framework for analyzing these systems, advancing our perspective on the interaction mechanisms between quarks and antiquarks, particularly in the context of quantum effects. The spatial structure of the wave functions enables estimation of key physical properties, such as the size of the particle (e.g. root-mean-square radius) and the binding strength of the bound state, which are critical for characterizing the complexity of strong interaction systems [51,52]. These wave functions thus serve as important tools for bridging theoretical predictions and experimental results, helping reveal the internal structure, confinement dynamics, and symmetry properties of the quark–antiquark pair.", - "text": "in Eq. (40), serve as fundamental solutions for the quark–antiquark systems under consideration. The obtained wave functions enable us to compute spatial distributions (densities), transition probabilities, correlations, etc. Consequently, they provide a foundational framework for analyzing these systems, advancing our perspective on the interaction mechanisms between quarks and antiquarks, particularly in the context of quantum effects. The spatial structure of the wave functions enables estimation of key physical properties, such as the size of the particle (e.g. root-mean-square radius) and the binding strength of the bound state, which are critical for characterizing the complexity of strong interaction systems [51,52]. These wave functions thus serve as important tools for bridging theoretical predictions and experimental results, helping reveal the internal structure, confinement dynamics, and symmetry properties of the quark–antiquark pair." + "orig": " in Eq. (40), serve as fundamental solutions for the quark–antiquark systems under consideration. The obtained wave functions enable us to compute spatial distributions (densities), transition probabilities, correlations, etc. Consequently, they provide a foundational framework for analyzing these systems, advancing our perspective on the interaction mechanisms between quarks and antiquarks, particularly in the context of quantum effects. The spatial structure of the wave functions enables estimation of key physical properties, such as the size of the particle (e.g. root-mean-square radius) and the binding strength of the bound state, which are critical for characterizing the complexity of strong interaction systems [51,52]. These wave functions thus serve as important tools for bridging theoretical predictions and experimental results, helping reveal the internal structure, confinement dynamics, and symmetry properties of the quark–antiquark pair.", + "text": " in Eq. (40), serve as fundamental solutions for the quark–antiquark systems under consideration. The obtained wave functions enable us to compute spatial distributions (densities), transition probabilities, correlations, etc. Consequently, they provide a foundational framework for analyzing these systems, advancing our perspective on the interaction mechanisms between quarks and antiquarks, particularly in the context of quantum effects. The spatial structure of the wave functions enables estimation of key physical properties, such as the size of the particle (e.g. root-mean-square radius) and the binding strength of the bound state, which are critical for characterizing the complexity of strong interaction systems [51,52]. These wave functions thus serve as important tools for bridging theoretical predictions and experimental results, helping reveal the internal structure, confinement dynamics, and symmetry properties of the quark–antiquark pair." }, { "self_ref": "#/texts/391", @@ -7014,8 +7014,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the", - "text": "Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the" + "orig": "Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the ", + "text": "Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the " }, { "self_ref": "#/texts/394", @@ -7038,8 +7038,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as", - "text": "-term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as" + "orig": "-term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as ", + "text": "-term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as " }, { "self_ref": "#/texts/396", @@ -7062,8 +7062,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues.", - "text": "[5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues." + "orig": " [5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues.", + "text": " [5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues." }, { "self_ref": "#/texts/398", @@ -7215,8 +7215,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Because the angular part", - "text": "Because the angular part" + "orig": "Because the angular part ", + "text": "Because the angular part " }, { "self_ref": "#/texts/405", @@ -7287,8 +7287,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and consider the fact that", - "text": "and consider the fact that" + "orig": "and consider the fact that ", + "text": "and consider the fact that " }, { "self_ref": "#/texts/411", @@ -7311,8 +7311,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/413", @@ -7335,8 +7335,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in this case can be expressed in terms of", - "text": "in this case can be expressed in terms of" + "orig": " in this case can be expressed in terms of ", + "text": " in this case can be expressed in terms of " }, { "self_ref": "#/texts/415", @@ -7366,8 +7366,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as", - "text": "as" + "orig": " as", + "text": " as" }, { "self_ref": "#/texts/417", @@ -7390,8 +7390,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "along with Eq. (44) as the formula of", - "text": "along with Eq. (44) as the formula of" + "orig": "along with Eq. (44) as the formula of ", + "text": "along with Eq. (44) as the formula of " }, { "self_ref": "#/texts/419", @@ -7438,8 +7438,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "where", - "text": "where" + "orig": "where ", + "text": "where " }, { "self_ref": "#/texts/423", @@ -7462,8 +7462,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the integral part:", - "text": "is the integral part:" + "orig": " is the integral part:", + "text": " is the integral part:" }, { "self_ref": "#/texts/425", @@ -7486,8 +7486,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To evaluate the integration", - "text": "To evaluate the integration" + "orig": "To evaluate the integration ", + "text": "To evaluate the integration " }, { "self_ref": "#/texts/427", @@ -7534,8 +7534,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "which holds when", - "text": "which holds when" + "orig": "which holds when ", + "text": "which holds when " }, { "self_ref": "#/texts/431", @@ -7558,8 +7558,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/433", @@ -7582,8 +7582,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". This relation also holds when", - "text": ". This relation also holds when" + "orig": ". This relation also holds when ", + "text": ". This relation also holds when " }, { "self_ref": "#/texts/435", @@ -7606,8 +7606,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where", - "text": ", where" + "orig": ", where ", + "text": ", where " }, { "self_ref": "#/texts/437", @@ -7678,8 +7678,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "under the conditions", - "text": "under the conditions" + "orig": "under the conditions ", + "text": "under the conditions " }, { "self_ref": "#/texts/443", @@ -7702,8 +7702,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/445", @@ -7726,8 +7726,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The two shape parameters of this function, in our case, are", - "text": ". The two shape parameters of this function, in our case, are" + "orig": ". The two shape parameters of this function, in our case, are ", + "text": ". The two shape parameters of this function, in our case, are " }, { "self_ref": "#/texts/447", @@ -7750,8 +7750,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/449", @@ -7774,8 +7774,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Thus, considering that the Pochhammer number is given by", - "text": ". Thus, considering that the Pochhammer number is given by" + "orig": ". Thus, considering that the Pochhammer number is given by ", + "text": ". Thus, considering that the Pochhammer number is given by " }, { "self_ref": "#/texts/451", @@ -7798,8 +7798,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where", - "text": ", where" + "orig": ", where ", + "text": ", where " }, { "self_ref": "#/texts/453", @@ -7822,8 +7822,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants", - "text": ", a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants" + "orig": ", a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants ", + "text": ", a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants " }, { "self_ref": "#/texts/455", diff --git a/tests/data/jats/groundtruth/ptag100.xml.md b/tests/data/jats/groundtruth/ptag100.xml.md index 20fb1092b7..90bd23142e 100644 --- a/tests/data/jats/groundtruth/ptag100.xml.md +++ b/tests/data/jats/groundtruth/ptag100.xml.md @@ -24,7 +24,7 @@ The main contributions of the present work can be summarized as follows. First, #### 2.1.1. -We consider a quark–antiquark pair with a time-dependent effective reduced mass $\mu (t)$ in spherical coordinates, governed by a central potential $g(t)r^{2}-\frac{Z(t)}{r}$ where $g(t)$ and $Z(t)$ are coefficients that depend on time. While $g(t)r^{2}$ represents a confining trap potential with adjustable strength, $-\frac{Z(t)}{r}$ is a Coulomb perturbation with the constraint $Z(t)\gt 0$ . As the distance between quarks increases, the harmonic potential rises sharply, effectively prohibiting their free separation within a bound state. This potential acts as a simplified representation of the QCD confinement mechanism and dominates at large separations. Meanwhile, the Coulomb term represents the electromagnetic or color interaction mediated by the color charge of one quark acting on the other, effectively serving as a short-range attractive force between the quark and antiquark. +We consider a quark–antiquark pair with a time-dependent effective reduced mass $\mu (t)$ in spherical coordinates, governed by a central potential $g(t)r^{2}-\frac{Z(t)}{r}$ where $g(t)$ and $Z(t)$ are coefficients that depend on time. While $g(t)r^{2}$ represents a confining trap potential with adjustable strength, $-\frac{Z(t)}{r}$ is a Coulomb perturbation with the constraint $Z(t)\gt 0$. As the distance between quarks increases, the harmonic potential rises sharply, effectively prohibiting their free separation within a bound state. This potential acts as a simplified representation of the QCD confinement mechanism and dominates at large separations. Meanwhile, the Coulomb term represents the electromagnetic or color interaction mediated by the color charge of one quark acting on the other, effectively serving as a short-range attractive force between the quark and antiquark. Time-dependent Hamiltonians naturally arise in hadron physics when quark–antiquark systems are embedded in dynamical environments, such as quark–gluon plasma or nonequilibrium hadronic media produced in high-energy collisions [20–22]. In such situations, the effective interaction between quarks may vary with time due to medium evolution, color-screening effects, confinement modifications, or changes in the effective quark mass. Consequently, the parameters appearing in phenomenological quarkonium potentials, including the confining strength and Coulomb-like coupling terms, can acquire explicit time dependence. The present model therefore provides an effective framework for investigating dynamical quark–antiquark systems within a quantum-mechanical setting. @@ -34,13 +34,13 @@ $$\begin{eqnarray} H(t)=\frac{p^{2}}{2\mu (t)}+g(t)r^{2}-\frac{Z(t)}{r} . \end{eqnarray}$$ -This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as $p^{2}=p_{r}^{2}+\frac{L^{2}}{r^{2}}$ , where $p_{r}=-i\hbar (\frac{\partial }{\partial r}+\frac{1}{r})$ and *L* is the total angular momentum, the formula for which is given by +This Hamiltonian enables the calculation of the quantum-mechanical spectrum including wave functions and excitation properties, which is then used to theoretically explain the mass and structure of mesons. The momentum operator in spherical coordinates is represented as $p^{2}=p_{r}^{2}+\frac{L^{2}}{r^{2}}$, where $p_{r}=-i\hbar (\frac{\partial }{\partial r}+\frac{1}{r})$ and *L* is the total angular momentum, the formula for which is given by $$\begin{eqnarray} L^{2}=-\hbar ^{2}\bigg [\frac{1}{\sin ^{2}\theta }\frac{\partial ^{2}}{\partial \varphi ^{2}}+\frac{1}{\sin \theta }\frac{\partial }{\partial \theta }\bigg (\sin \theta \frac{\partial }{\partial \theta }\bigg )\bigg ]. \end{eqnarray}$$ -To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as $|\Psi (t)\rangle$ , the corresponding Schrödinger equation is of the form +To investigate the dynamical features of the system, we must solve the Schrödinger equation for the Hamiltonian in Eq. (1). If we denote the system’s state vector as $|\Psi (t)\rangle$, the corresponding Schrödinger equation is of the form $$\begin{eqnarray} i\hbar \frac{\partial }{\partial t}|\Psi (t)\rangle =H(t)|\Psi (t)\rangle . @@ -58,7 +58,7 @@ $$\begin{eqnarray} \frac{dI}{dt}=\frac{\partial I}{\partial t}+\frac{1}{i\hbar }[I,H]=0. \end{eqnarray}$$ -If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction $\Phi (\vec{r},t)$ , such that +If such an invariant exists, it is possible to put the solution of the Schrödinger equation (3) in terms of its eigenfunction $\Phi (\vec{r},t)$, such that $$\begin{eqnarray} \Psi (\vec{r},t)=e^{i\alpha (t)}\Phi (\vec{r},t), @@ -76,7 +76,7 @@ $$\begin{eqnarray} I(t)=A(t)p^{2}+B(t)\left( rp_{r}+p_{r}r\right) +C(t)r^{2}-\frac{D(t)}{r}, \end{eqnarray}$$ -where $A(t)$ , $B(t)$ , $C(t)$ , and $D(t)$ are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of $I(t)$ after substituting Eqs. (1) and (7) into Eq. (4) yields +where $A(t)$, $B(t)$, $C(t)$, and $D(t)$ are time-dependent functions to be determined. Then, a mathematical procedure with this assumed formula of $I(t)$ after substituting Eqs. (1) and (7) into Eq. (4) yields $$\begin{eqnarray} A(t) =A_{0}\rho ^{2}(t), @@ -110,13 +110,13 @@ Equation (7) with Eqs. (8)–(11) constitutes the complete quadratic invariant #### 2.1.3. -Because the quantum wave functions of the system are represented in terms of the eigenfunctions of $I(t)$ , it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant $I(t)$ as +Because the quantum wave functions of the system are represented in terms of the eigenfunctions of $I(t)$, it is now necessary to evaluate its eigenvalue equation. We begin by writing the eigenvalue equation of the invariant $I(t)$ as $$\begin{eqnarray} I(t)\Phi _{n}(\vec{r},t)=\Lambda _{n}\Phi _{n}(\vec{r},t), \end{eqnarray}$$ -where $\Lambda _{n}$ are the eigenvalues and $\Phi _{n}(\vec{r},t)$ are time-dependent eigenfunctions. Given that $I(t)$ , as defined in Eq. (7) along with Eqs. (8)–(11), has a complicated form, it is favorable to solve Eq. (14) after we transform it mathematically into a simple form. To do this, we consider a unitary transformation of the form +where $\Lambda _{n}$ are the eigenvalues and $\Phi _{n}(\vec{r},t)$ are time-dependent eigenfunctions. Given that $I(t)$, as defined in Eq. (7) along with Eqs. (8)–(11), has a complicated form, it is favorable to solve Eq. (14) after we transform it mathematically into a simple form. To do this, we consider a unitary transformation of the form $$\begin{eqnarray} \Phi _{n}^{\prime }(\vec{r})=U(t)\Phi _{n}(\vec{r},t), @@ -128,7 +128,7 @@ $$\begin{eqnarray} U(t)=\exp \left[ \frac{i\ln \rho (t)}{2\hbar }\left( rp_{r}+p_{r}r\right) \right] \exp \left[ -i\frac{\mu (t)\dot{\rho }(t)}{2\hbar \rho (t)}r^{2}\right] . \end{eqnarray}$$ -Then, if we write the transformed invariant operator as $I_0$ , the eigenvalue equation in the transformed frame is represented in terms of $\Phi _{n}^{\prime }(\vec{r})$ , such that +Then, if we write the transformed invariant operator as $I_0$, the eigenvalue equation in the transformed frame is represented in terms of $\Phi _{n}^{\prime }(\vec{r})$, such that $$\begin{eqnarray} UIU^{-1}\Phi _{n}^{\prime }(\vec{r})=I_{0}\Phi _{n}^{\prime }(\vec{r})=\Lambda _{n}\Phi _{n}^{\prime }(\vec{r}). @@ -140,7 +140,7 @@ $$\begin{eqnarray} \left[ A_{0}p^{2}+A_{0}\frac{\Omega ^{2}}{4}r^{2}-D_{0}\frac{1}{r}\right] \Phi _{nlm}^{\prime }(r,\theta ,\varphi )=\Lambda _{nl}\Phi _{nlm}^{\prime }(r,\theta ,\varphi ), \end{eqnarray}$$ -where $D_{0} = 2A_{0}\mu (t)Z(t)\rho (t)$ while $n=0,1,2,\cdots$ . An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of $D_0$ with respect to *t* , followed by the application of Eq. (13), yields $d D_0/dt=0$ . This means that $D_0$ is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant $I(t)$ . It is worth noting that Eq. (18) is very simple compared to the original eigenvalue equation represented in Eq. (14). +where $D_{0} = 2A_{0}\mu (t)Z(t)\rho (t)$ while $n=0,1,2,\cdots$. An infinite number of bound states may arise from the strong confinement of quarkonium, which is primarily attributed to the harmonic term dominating at large distances. By the way, the direct differentiation of $D_0$ with respect to *t*, followed by the application of Eq. (13), yields $d D_0/dt=0$. This means that $D_0$ is in fact a constant of motion, as expected—since the operator on the left-hand side of Eq. (18) is the transformed version of the original invariant $I(t)$. It is worth noting that Eq. (18) is very simple compared to the original eigenvalue equation represented in Eq. (14). The existence of a perturbation of Coulomb potential may make the problem much more difficult. In what follows, the eigenvalue equation (18) can be rewritten as @@ -148,19 +148,19 @@ $$\begin{eqnarray} \begin{bmatrix}-\hbar ^{2}A_{0}\Big [\frac{1}{r^{2}}\frac{\partial }{\partial r}\left( r^{2}\frac{\partial }{\partial r}\right) +\frac{1}{r^{2}\sin ^{2}\theta }\frac{\partial ^{2}}{\partial \varphi ^{2}} \\+\frac{1}{r^{2}\sin \theta }\frac{\partial }{\partial \theta }(\sin \theta \frac{\partial }{\partial \theta })\Big ]+A_{0}\frac{\Omega ^{2}}{4}r^{2}-\frac{D_{0}}{r} \end{bmatrix} \Phi _{nlm}^{\prime }(r,\theta ,\varphi )=\Lambda _{nl}\Phi _{nlm}^{\prime }(r,\theta ,\varphi ). \end{eqnarray}$$ -According to the invariant operator theory, the wave functions of the transformed system are represented in terms of $\Phi _{nlm}^{\prime }(r,\theta ,\varphi )$ . Because this equation is independent of time, we can apply the method of separation of variables in order to solve it. Considering this, we take +According to the invariant operator theory, the wave functions of the transformed system are represented in terms of $\Phi _{nlm}^{\prime }(r,\theta ,\varphi )$. Because this equation is independent of time, we can apply the method of separation of variables in order to solve it. Considering this, we take $$\begin{eqnarray} \Phi _{nlm}^{\prime }(r,\theta ,\varphi )=R_{nl}(r)Y_{lm}(\theta ,\varphi )=\frac{u_{nl}(r)Y_{lm}(\theta ,\varphi )}{r}, \end{eqnarray}$$ -where we have introduced $u_{nl}(r) = r R_{nl}(r)$ , whereas $Y_{lm}(\theta ,\varphi )$ are the spherical harmonics. The angular part of the eigenfunctions takes the form +where we have introduced $u_{nl}(r) = r R_{nl}(r)$, whereas $Y_{lm}(\theta ,\varphi )$ are the spherical harmonics. The angular part of the eigenfunctions takes the form $$\begin{eqnarray} Y_{lm}(\theta ,\varphi )= N_{lm}e^{im\varphi }P_{l}^{m}(\cos \theta ), \end{eqnarray}$$ -where $P_{l}^{m}(x)$ are the associated Legendre polynomials, while the spherical normalization constants are $N_{lm}=(-1)^m \lbrace [(2l+1)/(4\pi )](l-m)!/(l+m)! \rbrace ^{1/2}$ . The allowed orbital and magnetic quantum numbers are $l=0,1,2,\cdots$ and $m=-l,-l+1,\cdots ,l$ , respectively. +where $P_{l}^{m}(x)$ are the associated Legendre polynomials, while the spherical normalization constants are $N_{lm}=(-1)^m \lbrace [(2l+1)/(4\pi )](l-m)!/(l+m)! \rbrace ^{1/2}$. The allowed orbital and magnetic quantum numbers are $l=0,1,2,\cdots$ and $m=-l,-l+1,\cdots ,l$, respectively. Some algebraic manipulation, after substituting Eq. (20) into Eq. (19), leads to the following radial equation: @@ -174,9 +174,9 @@ $$\begin{eqnarray} \frac{1}{r^{2}} \simeq \frac{\delta ^{2}}{\left( 1-e^{-\delta r}\right) ^{2}},~~~~~\frac{1}{r} \simeq \frac{\delta }{1-e^{-\delta r}}, \end{eqnarray}$$ -together with a coordinate transformation $y=e^{-\delta r}$ . This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter $\delta$ is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing $\delta$ to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than $1/\delta$ . For example, in quarkonium models, $\delta$ is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting $\delta$ within this range is a reasonable choice. +together with a coordinate transformation $y=e^{-\delta r}$. This type of approximation is commonly used to describe particles governed by a screened potential, where the parameter $\delta$ is typically chosen to be equal to the screening mass [29,36]. Though the potential in our system is not screened, choosing $\delta$ to be similar to the typical screening mass still provides a good approximation, particularly accurate for distances comparable to or smaller than $1/\delta$. For example, in quarkonium models, $\delta$ is usually taken to be in the range of approximately 200 to 900 MeV [40,41]. Thus, selecting $\delta$ within this range is a reasonable choice. -Then, by rewriting the notation as $u_{nl}(r)\rightarrow U_{nl}(y)$ , the differential equation (22) becomes +Then, by rewriting the notation as $u_{nl}(r)\rightarrow U_{nl}(y)$, the differential equation (22) becomes $$\begin{eqnarray} \frac{d^{2}U_{nl}(y)}{dy^{2}}+\frac{\left( 1-y\right) }{y(1-y)}\frac{dU_{nl}(y)}{dy}+\frac{1}{y^{2}(1-y)^{2}}\begin{bmatrix}-\left( \varepsilon _{nl}-6P\right) y^{2} \\+\left( 2\varepsilon _{nl}-4P+Q\right) y \\-\left( \varepsilon _{nl}-P+Q+\gamma \right) \end{bmatrix} U_{nl}(y)=0, @@ -188,7 +188,7 @@ $$\begin{eqnarray} \varepsilon _{nl}=\frac{-\Lambda _{nl}}{\hbar ^{2}A_{0}\delta ^{2}},~~~P=-\frac{\Omega ^{2}}{4\hbar ^{2}\delta ^{4}},~~~Q=-\frac{D_{0}}{\hbar ^{2}A_{0}\delta },~~~\gamma =l(l+1). \end{eqnarray}$$ -In the representation of Eq. (24), we neglected higher-order terms corresponding to $y^{3}$ and $y^{4}$ . To solve this equation, we use the NUFA method [29] outlined in the next subsection. +In the representation of Eq. (24), we neglected higher-order terms corresponding to $y^{3}$ and $y^{4}$. To solve this equation, we use the NUFA method [29] outlined in the next subsection. ### 2.2. @@ -198,7 +198,7 @@ $$\begin{eqnarray} \left[ \frac{d^{2}}{ds^{2}}+\frac{\alpha _{1}-\alpha _{2}s}{s(1-\alpha _{3}s)}\frac{d}{ds}+\frac{-\zeta _{1}s^{2}+\zeta _{2}s-\zeta _{3}}{s^{2}(1-\alpha _{3}s)^{2}}\right] \phi (s)=0, \end{eqnarray}$$ -where $\alpha _{i}$ $(i=1,2,3)$ and $\zeta _{i}$ are parameters appropriately chosen depending on a given system. Because this equation has two singularities at $s\rightarrow 0$ and $s\rightarrow 1/\alpha _{3}$ , it is possible to take the solution in the form +where $\alpha _{i}$$(i=1,2,3)$ and $\zeta _{i}$ are parameters appropriately chosen depending on a given system. Because this equation has two singularities at $s\rightarrow 0$ and $s\rightarrow 1/\alpha _{3}$, it is possible to take the solution in the form $$\begin{eqnarray} \phi (s)=s^{\lambda }(1-\alpha _{3}s)^{\upsilon }f(s). @@ -232,7 +232,7 @@ $$\begin{eqnarray} Thus, the equation is reduced to a tractable form. -We now examine a simple case where $\alpha _3=1$ , which meets the equation associated with our considered system. Under the condition that the principal quantum number takes the form +We now examine a simple case where $\alpha _3=1$, which meets the equation associated with our considered system. Under the condition that the principal quantum number takes the form $$\begin{eqnarray} n=- \kappa _- , @@ -244,17 +244,17 @@ $$\begin{eqnarray} f (s) = {_{2}F_{1}}(a,b;c;s), \end{eqnarray}$$ -where $a=\kappa _-$ , $b=\kappa _+$ , and $c=\alpha _{1}+2\lambda$ . The mathematical formula of this hypergeometric function is as follows: $_{2}F_{1}(a,b;c;s)=\sum _{k=0}^{\infty }\frac{\left( a\right) _{k}\left( b\right) _{k}}{\left( c\right) _{k}k!}s^{k}$ , where $\left( a\right) _{k}=a(a+1)(a+2)\cdots (a+k-1)$ for $k\ge 1$ and $\left( a\right) _{0}=1$ . +where $a=\kappa _-$, $b=\kappa _+$, and $c=\alpha _{1}+2\lambda$. The mathematical formula of this hypergeometric function is as follows: $_{2}F_{1}(a,b;c;s)=\sum _{k=0}^{\infty }\frac{\left( a\right) _{k}\left( b\right) _{k}}{\left( c\right) _{k}k!}s^{k}$, where $\left( a\right) _{k}=a(a+1)(a+2)\cdots (a+k-1)$ for $k\ge 1$ and $\left( a\right) _{0}=1$. -The Gauss hypergeometric function $_{2}F_{1}(a,b;c;s)$ serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function $_{2}F_{1}(a,b;c;s)$ terminates and reduces to a polynomial when *a* is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular, $_{2}F_{1}(a,b;c;s)$ is a generalization of Kummer’s confluent hypergeometric function $_{1}F_{1}(a;c;s)$ . Hence, in the limiting case where $b \rightarrow \infty$ , $_{2}F_{1}(a,b;c;s)$ converges to $_{1}F_{1}(a;c;s)$ . This convergence is rooted in the fact that, while ${}_2F_1$ has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to ${}_1F_1$ [44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The ${}_2F_1$ function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the ${}_2F_1$ function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24). +The Gauss hypergeometric function $_{2}F_{1}(a,b;c;s)$ serves as a fundamental and unifying special function that encompasses many other functions as special or limiting cases [42–45]. As defined in Eq. (34) with Eq. (33), the function $_{2}F_{1}(a,b;c;s)$ terminates and reduces to a polynomial when *a* is zero or a negative integer, a case that is often associated with Laguerre polynomials. In particular, $_{2}F_{1}(a,b;c;s)$ is a generalization of Kummer’s confluent hypergeometric function $_{1}F_{1}(a;c;s)$. Hence, in the limiting case where $b \rightarrow \infty$, $_{2}F_{1}(a,b;c;s)$ converges to $_{1}F_{1}(a;c;s)$. This convergence is rooted in the fact that, while ${}_2F_1$ has two regular singular points, sending one of them to infinity (a process known as confluence) effectively merges the singularities, giving rise to ${}_1F_1$ [44]. Additionally, the Jacobi polynomials can also be expressed in terms of the Gauss hypergeometric function (for a typical representation, see formula 15.9.1 of Ref. [45]). The ${}_2F_1$ function thus plays a major role in constructing analytical solutions and enables rigorous, systematic analysis across a broad spectrum of scientific disciplines beyond mathematics and physics. The method presented in this subsection, which naturally leads to the appearance of the ${}_2F_1$ function as a solution, is applicable to the analysis of a wide class of physical systems governed by one or more interaction potentials. It is, of course, well suited to handling Eq. (24). ### 2.3. #### 2.3.1. -We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of $I(t)$ (instead of $H(t)$ ), we need to determine the eigenfunctions $\Phi _n$ of Eq. (14). However, directly solving for $\Phi _n$ is likely to be a formidable task. To circumvent this difficulty, we first derive $\Phi _n^{\prime }$ from Eq. (17), and then reconstruct the desired eigenfunctions $\Phi _n$ by inversely transforming the obtained $\Phi _n^{\prime }$ , utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once $\Phi _n$ are obtained, the wave functions $\Psi _n$ can be expressed in terms of them accordingly. +We now proceed to derive the wave functions of the system. For clarity and better reader understanding, we briefly summarize our strategy at this point. Because, in our time-dependent case, the wave functions are described by the eigenfunctions of $I(t)$ (instead of $H(t)$), we need to determine the eigenfunctions $\Phi _n$ of Eq. (14). However, directly solving for $\Phi _n$ is likely to be a formidable task. To circumvent this difficulty, we first derive $\Phi _n^{\prime }$ from Eq. (17), and then reconstruct the desired eigenfunctions $\Phi _n$ by inversely transforming the obtained $\Phi _n^{\prime }$, utilizing the inverse relation of Eq. (15) (for the inverse relation, see Eq. (46), which appears later). Once $\Phi _n$ are obtained, the wave functions $\Psi _n$ can be expressed in terms of them accordingly. -To obtain $\Phi _n^{\prime }$ , we need to solve Eq. (24) by setting the associated functions, in accordance with Eq. (27), as +To obtain $\Phi _n^{\prime }$, we need to solve Eq. (24) by setting the associated functions, in accordance with Eq. (27), as $$\begin{eqnarray} U_{nl}(y)=N_{nl}y^{\lambda }(1-y)^{\upsilon }f_{nl}(y), @@ -272,7 +272,7 @@ $$\begin{eqnarray} \lambda =\sqrt{\varepsilon _{nl}-P+Q+\gamma },\quad\quad\upsilon =\frac{1}{2}+\sqrt{\left( l+\frac{1}{2}\right) ^{2}-3P}.~~~~~~ \end{eqnarray}$$ -Although the original NUFA representations of $\lambda$ and $\upsilon$ , given in Eqs. (28) and (29), include both positive and negative signs ( $\pm$ ) from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of *r* and must vanish as $r \rightarrow 0$ and $r \rightarrow \infty$ . +Although the original NUFA representations of $\lambda$ and $\upsilon$, given in Eqs. (28) and (29), include both positive and negative signs ($\pm$) from a purely mathematical perspective, we choose to retain only the positive sign in this case as can be seen from Eq. (37). This selection is due to the fundamental physical constraint, which is that the wave functions must remain finite throughout the entire range of *r* and must vanish as $r \rightarrow 0$ and $r \rightarrow \infty$. The expansion of Eq. (33) under the first condition in Eq. (36) yields @@ -314,7 +314,7 @@ $$\begin{eqnarray} \bar{c}=1+2\lambda . \end{eqnarray}$$ -From a mathematical standpoint, it is possible to define the parameter $\bar{a}$ interchangeably with $\bar{b}$ . However, by choosing $\bar{a}$ as in Eq. (42), we allow the possibility for $\bar{a}$ to take on negative values. When $\bar{a}$ is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the ( $n+1$ )th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator $I_{0}$ are represented in the form +From a mathematical standpoint, it is possible to define the parameter $\bar{a}$ interchangeably with $\bar{b}$. However, by choosing $\bar{a}$ as in Eq. (42), we allow the possibility for $\bar{a}$ to take on negative values. When $\bar{a}$ is a nonpositive integer (i.e. a negative integer or zero), the Gauss hypergeometric function in Eq. (41) terminates at the ($n+1$)th term and reduces to a polynomial. Through the use of Eq. (20) with Eq. (41), the full eigenfunctions of the invariant operator $I_{0}$ are represented in the form $$\begin{eqnarray} \Phi _{nlm}^{\prime }(r,\theta ,\varphi ) &=& N_{nl}\frac{1}{r}e^{-\left( \sqrt{-\frac{\Lambda _{nl}}{\hbar ^{2}A_{0}\delta ^{2}}+\frac{\Omega ^{2}}{4\hbar ^{2}\delta ^{4}}-\frac{D_{0}}{\hbar ^{2}A_{0}\delta }+l(l+1)}\right) \delta r} \\&&\times \left( 1-e^{-\delta r}\right) ^{\frac{1}{2}+\sqrt{\left( l+\frac{1}{2}\right) ^{2}+\frac{3\Omega ^{2}}{4\hbar ^{2}\delta ^{4}}}}{_{2}F_{1}}(\bar{a},\bar{b};\bar{c};e^{-\delta r})Y_{lm}(\theta ,\varphi ). @@ -348,7 +348,7 @@ whereas ${\mathrm{B}}(a_1,a_2)$ denotes the Beta function [48]. The eigenfunctio #### 2.3.2. -According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions $\Phi _{nlm}(\vec{r},t)$ of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase $\alpha (t)$ associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate $\vert \Phi ^\prime \rangle$ instead of $\vert \Phi \rangle$ , such that +According to Lewis–Riesenfeld theory [24], the wave functions of our time-dependent system are represented in terms of the eigenfunctions $\Phi _{nlm}(\vec{r},t)$ of the invariant operator, which are given in Eq. (47). However, these eigenfunctions alone do not fully define the time-dependent wave functions. Another required factor is the phase $\alpha (t)$ associated with each quantum state. We begin from Eq. (6) to derive this factor. Based on the unitary relation given in Eq. (46), Eq. (6) can be expressed in terms of the transformed eigenstate $\vert \Phi ^\prime \rangle$ instead of $\vert \Phi \rangle$, such that $$\begin{eqnarray} \hbar \frac{d\alpha (t)}{dt}=\left\langle \Phi ^{\prime }\left|\Bigg ( i \hbar \frac{\partial }{\partial t}-\frac{I_{0}}{2A_{0}\mu (t)\rho ^{2}(t)} \Bigg ) \right|\Phi ^{\prime }\right\rangle . @@ -374,11 +374,11 @@ where the explicit forms of $\alpha _{nl}(t)$ and $\Phi _{nlm}(r,\theta ,\varphi In this study, we investigated the interaction between a quark and an antiquark by modeling its mechanical behavior using a nonstationary 3D harmonic oscillator coupled with a Coulomb potential. To solve the associated Schrödinger equation, we employed the recently refined NUFA method, together with the invariant operator method and the unitary transformation approach. The NUFA method, based on a novel conceptual framework, allowed us to bypass the complex mathematical manipulations commonly encountered in other techniques. As a result, we obtained the wave functions of the system in closed form, expressed in terms of the Gauss hypergeometric function. These solutions offer advantages over previous ones that employed biconfluent Heun functions, as Gauss hypergeometric functions are among the most thoroughly characterized and best understood special functions in mathematics. -Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the $\theta$ -term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as $J/\psi$ [5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues. +Our solutions are essential for analyzing quark–antiquark pairs, which form the core of mesons and thus play a central role in the strong interaction. Although their dynamics are governed by QCD, the theory exhibits intricate behavior that significantly deviates from classical, nonrelativistic mechanics, encompassing numerous unresolved challenges. These include the incomplete theoretical understanding of quark confinement and hadronization mechanisms, the precise determination of quark masses and meson spectra, and the possible existence of exotic hadrons featuring internal structure beyond conventional quark–antiquark configurations [53,54]. Additional open questions involve the quantitative description of the quark condensate mechanism, the strong CP problem and the role of the $\theta$-term, as well as the difficulty in accurately predicting the spectral properties and decay modes of heavy mesons such as $J/\psi$ [5,55]. The analytical solutions developed in this study may provide insights toward addressing these longstanding issues. ## Funding -Open Access funding: SCOAP 3 . +Open Access funding: SCOAP3. Although normalization is formally defined for the full wave functions, the phase factors do not affect the outcome. Therefore, in the normalization process, it suffices to consider only Eq. (47), which corresponds to the eigenfunctions. The normalization condition associated with Eq. (47) is given by @@ -386,7 +386,7 @@ $$\begin{eqnarray} \int _0^{2\pi } \int _0^\pi \int _0^\infty \left|\Phi _{nlm} (r,\theta ,\varphi ,t) \right|^{2}r^{2} \sin \theta dr d\theta d\varphi =1. \end{eqnarray}$$ -Because the angular part $Y_{lm} (\theta ,\varphi )$ , defined in Eq. (21), is already normalized, we only need to consider the radial part in this evaluation. Thus, based on the radial part of Eq. (47), Eq. (A.1) can be rewritten as +Because the angular part $Y_{lm} (\theta ,\varphi )$, defined in Eq. (21), is already normalized, we only need to consider the radial part in this evaluation. Thus, based on the radial part of Eq. (47), Eq. (A.1) can be rewritten as $$\begin{eqnarray} \frac{\left|N_{nl}\right|^{2}}{\rho (t) }\int _{0}^{\infty }e^{-2\lambda \delta \frac{r}{\rho (t)}}\left( 1-e^{-\delta \frac{r}{\rho (t)}}\right) ^{2\upsilon }\left[ {_{2}F_{1}}(\bar{a},\bar{b};\bar{c};e^{-\delta \frac{r}{\rho (t)}})\right] ^{2}dr =1. @@ -404,7 +404,7 @@ $$\begin{eqnarray} \bar{a}=-n,~~~~~~~ \bar{b}=2(\upsilon +\lambda )+n, \end{eqnarray}$$ -along with Eq. (44) as the formula of $\bar{c}$ . Then, Eq. (A.2) becomes +along with Eq. (44) as the formula of $\bar{c}$. Then, Eq. (A.2) becomes $$\begin{eqnarray} \frac{\left|N_{nl}\right|^{2}}{\delta }g_{\rm int}=1, @@ -416,13 +416,13 @@ $$\begin{eqnarray} g_{\rm int}=\int _{0}^{1}z^{2\lambda -1} \left( 1-z\right) ^{2\upsilon }\left[ {_{2}F_{1}}(-n,2(\upsilon +\lambda )+n;2\lambda +1;z)\right] ^{2}dz . \end{eqnarray}$$ -To evaluate the integration $g_{\rm int}$ , we use the expansion formula for the hypergeometric function (see formula 15.2.4 of Ref. [45]): +To evaluate the integration $g_{\rm int}$, we use the expansion formula for the hypergeometric function (see formula 15.2.4 of Ref. [45]): $$\begin{eqnarray} {_{2}F_{1}}(-n,b;c;s)=\sum _{k=0}^n (-1)^k \binom{n}{k} \frac{(b)_k}{(c)_k}s^k, \end{eqnarray}$$ -which holds when $n=0,1,2,\cdots$ and $c \ne 0,-1,-2,\cdots$ . This relation also holds when $c=-n-j$ , where $j=0,1,2,\cdots$ . Substituting this series expansion into Eq. (A.6), we obtain +which holds when $n=0,1,2,\cdots$ and $c \ne 0,-1,-2,\cdots$. This relation also holds when $c=-n-j$, where $j=0,1,2,\cdots$. Substituting this series expansion into Eq. (A.6), we obtain $$\begin{eqnarray} g_{\rm int}&=&\sum _{k=0}^n\sum _{k^{\prime }=0}^n(-1)^{k+k^{\prime }}\binom{n}{k} \binom{n}{k^{\prime }} \frac{(2(\upsilon +\lambda )+n)_k (2(\upsilon +\lambda )+n)_{k^{\prime }}}{(2\lambda +1)_k(2\lambda +1)_{k^{\prime }}} \\&&\times \int _{0}^{1}z^{k+k^{\prime }+2\lambda -1} \left( 1-z\right) ^{2\upsilon }dz . @@ -434,7 +434,7 @@ $$\begin{eqnarray} \mathrm{B}(a_1,a_2)= \int _0^1 s^{a_1-1} (1-s)^{a_2-1} ds, \end{eqnarray}$$ -under the conditions ${\rm Re}a_1\gt 0$ and ${\rm Re}a_2\gt 0$ . The two shape parameters of this function, in our case, are $a_1=k+k^{\prime }+2\lambda$ and $a_2=2\upsilon +1$ . Thus, considering that the Pochhammer number is given by $(a)_k=\Gamma (a+k)/\Gamma (a)$ , where $a \ne 0,-1,-2,\cdots$ , a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants $N_{nl}$ , as presented in Eq. (48) of the text. +under the conditions ${\rm Re}a_1\gt 0$ and ${\rm Re}a_2\gt 0$. The two shape parameters of this function, in our case, are $a_1=k+k^{\prime }+2\lambda$ and $a_2=2\upsilon +1$. Thus, considering that the Pochhammer number is given by $(a)_k=\Gamma (a+k)/\Gamma (a)$, where $a \ne 0,-1,-2,\cdots$, a rearrangement of Eq. (A.5) with Eq. (A.8) leads directly to the expression for the normalization constants $N_{nl}$, as presented in Eq. (48) of the text. ## References diff --git a/tests/data/md/groundtruth/escaped_characters.md.json b/tests/data/md/groundtruth/escaped_characters.md.json index 973d375357..81ad0ee9de 100644 --- a/tests/data/md/groundtruth/escaped_characters.md.json +++ b/tests/data/md/groundtruth/escaped_characters.md.json @@ -1,10 +1,10 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "escaped_characters", "origin": { "mimetype": "text/html", - "binary_hash": 4129962407829858370, + "binary_hash": 9622616909157515894, "filename": "escaped_characters.md" }, "furniture": { @@ -275,8 +275,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The pipe symbol (| or", - "text": "The pipe symbol (| or" + "orig": "The pipe symbol (| or ", + "text": "The pipe symbol (| or " }, { "self_ref": "#/texts/12", diff --git a/tests/data/md/groundtruth/escaped_characters.md.md b/tests/data/md/groundtruth/escaped_characters.md.md index 84f40db5fe..fc44f7e450 100644 --- a/tests/data/md/groundtruth/escaped_characters.md.md +++ b/tests/data/md/groundtruth/escaped_characters.md.md @@ -33,7 +33,7 @@ Text: 00:16.000 ----> 00:18.000 & < > " ' | Apostrophes | ' | | Pipe | | | | | -The pipe symbol (| or `|` ) only needs to be escaped in tables. +The pipe symbol (| or `|`) only needs to be escaped in tables. # Raw HTML diff --git a/tests/data/md/groundtruth/inline_and_formatting.md.md b/tests/data/md/groundtruth/inline_and_formatting.md.md index 9051b9a45d..59eb305185 100644 --- a/tests/data/md/groundtruth/inline_and_formatting.md.md +++ b/tests/data/md/groundtruth/inline_and_formatting.md.md @@ -2,22 +2,22 @@ This is simple. -Foo *emphasis* **strong emphasis** ***both*** . +Foo *emphasis* **strong emphasis** ***both***. -Create your feature branch: `git checkout -b feature/AmazingFeature` . +Create your feature branch: `git checkout -b feature/AmazingFeature`. -1. Pull the [**repository**](https://github.com/docling-project/docling) . -2. Create your feature branch ( `git checkout -b feature/AmazingFeature` ) -3. Commit your changes ( `git commit -m 'Add some AmazingFeature'` ) -4. Push to the branch ( `git push origin feature/AmazingFeature` ) +1. Pull the [**repository**](https://github.com/docling-project/docling). +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request 6. **Whole list item has same formatting** 7. List item has *mixed or partial* formatting # *Whole heading is italic* -- **First** : Lorem ipsum. -- **Second** : Dolor `sit` amet. +- **First**: Lorem ipsum. +- **Second**: Dolor `sit` amet. Some *`formatted_code`* diff --git a/tests/data/md/groundtruth/inline_and_formatting.md.yaml b/tests/data/md/groundtruth/inline_and_formatting.md.yaml index e4856c962f..b82dc55e96 100644 --- a/tests/data/md/groundtruth/inline_and_formatting.md.yaml +++ b/tests/data/md/groundtruth/inline_and_formatting.md.yaml @@ -5,12 +5,12 @@ body: - $ref: '#/groups/0' - $ref: '#/groups/1' - $ref: '#/groups/2' - - $ref: '#/texts/32' + - $ref: '#/texts/34' - $ref: '#/groups/8' - $ref: '#/groups/11' - - $ref: '#/texts/43' - - $ref: '#/texts/47' - - $ref: '#/texts/48' + - $ref: '#/texts/45' + - $ref: '#/texts/49' + - $ref: '#/texts/50' - $ref: '#/groups/13' - $ref: '#/tables/0' content_layer: body @@ -31,6 +31,8 @@ groups: - $ref: '#/texts/4' - $ref: '#/texts/5' - $ref: '#/texts/6' + - $ref: '#/texts/7' + - $ref: '#/texts/8' content_layer: body label: inline name: group @@ -38,9 +40,9 @@ groups: $ref: '#/body' self_ref: '#/groups/0' - children: - - $ref: '#/texts/7' - - $ref: '#/texts/8' - $ref: '#/texts/9' + - $ref: '#/texts/10' + - $ref: '#/texts/11' content_layer: body label: inline name: group @@ -48,13 +50,13 @@ groups: $ref: '#/body' self_ref: '#/groups/1' - children: - - $ref: '#/texts/10' - - $ref: '#/texts/14' - - $ref: '#/texts/18' - - $ref: '#/texts/22' - - $ref: '#/texts/26' - - $ref: '#/texts/27' + - $ref: '#/texts/12' + - $ref: '#/texts/16' + - $ref: '#/texts/20' + - $ref: '#/texts/24' - $ref: '#/texts/28' + - $ref: '#/texts/29' + - $ref: '#/texts/30' content_layer: body label: list name: list @@ -62,58 +64,58 @@ groups: $ref: '#/body' self_ref: '#/groups/2' - children: - - $ref: '#/texts/11' - - $ref: '#/texts/12' - $ref: '#/texts/13' + - $ref: '#/texts/14' + - $ref: '#/texts/15' content_layer: body label: inline name: group parent: - $ref: '#/texts/10' + $ref: '#/texts/12' self_ref: '#/groups/3' - children: - - $ref: '#/texts/15' - - $ref: '#/texts/16' - $ref: '#/texts/17' + - $ref: '#/texts/18' + - $ref: '#/texts/19' content_layer: body label: inline name: group parent: - $ref: '#/texts/14' + $ref: '#/texts/16' self_ref: '#/groups/4' - children: - - $ref: '#/texts/19' - - $ref: '#/texts/20' - $ref: '#/texts/21' + - $ref: '#/texts/22' + - $ref: '#/texts/23' content_layer: body label: inline name: group parent: - $ref: '#/texts/18' + $ref: '#/texts/20' self_ref: '#/groups/5' - children: - - $ref: '#/texts/23' - - $ref: '#/texts/24' - $ref: '#/texts/25' + - $ref: '#/texts/26' + - $ref: '#/texts/27' content_layer: body label: inline name: group parent: - $ref: '#/texts/22' + $ref: '#/texts/24' self_ref: '#/groups/6' - children: - - $ref: '#/texts/29' - - $ref: '#/texts/30' - $ref: '#/texts/31' + - $ref: '#/texts/32' + - $ref: '#/texts/33' content_layer: body label: inline name: group parent: - $ref: '#/texts/28' + $ref: '#/texts/30' self_ref: '#/groups/7' - children: - - $ref: '#/texts/33' - - $ref: '#/texts/36' + - $ref: '#/texts/35' + - $ref: '#/texts/38' content_layer: body label: list name: list @@ -121,28 +123,28 @@ groups: $ref: '#/body' self_ref: '#/groups/8' - children: - - $ref: '#/texts/34' - - $ref: '#/texts/35' + - $ref: '#/texts/36' + - $ref: '#/texts/37' content_layer: body label: inline name: group parent: - $ref: '#/texts/33' + $ref: '#/texts/35' self_ref: '#/groups/9' - children: - - $ref: '#/texts/37' - - $ref: '#/texts/38' - $ref: '#/texts/39' - $ref: '#/texts/40' + - $ref: '#/texts/41' + - $ref: '#/texts/42' content_layer: body label: inline name: group parent: - $ref: '#/texts/36' + $ref: '#/texts/38' self_ref: '#/groups/10' - children: - - $ref: '#/texts/41' - - $ref: '#/texts/42' + - $ref: '#/texts/43' + - $ref: '#/texts/44' content_layer: body label: inline name: group @@ -150,14 +152,14 @@ groups: $ref: '#/body' self_ref: '#/groups/11' - children: - - $ref: '#/texts/44' - - $ref: '#/texts/45' - $ref: '#/texts/46' + - $ref: '#/texts/47' + - $ref: '#/texts/48' content_layer: body label: inline name: group parent: - $ref: '#/texts/43' + $ref: '#/texts/45' self_ref: '#/groups/12' - children: [] content_layer: body @@ -303,12 +305,12 @@ texts: - children: [] content_layer: body label: text - orig: Foo + orig: 'Foo ' parent: $ref: '#/groups/0' prov: [] self_ref: '#/texts/2' - text: Foo + text: 'Foo ' - children: [] content_layer: body formatting: @@ -324,6 +326,15 @@ texts: prov: [] self_ref: '#/texts/3' text: emphasis +- children: [] + content_layer: body + label: text + orig: ' ' + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/4' + text: ' ' - children: [] content_layer: body formatting: @@ -337,8 +348,17 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/4' + self_ref: '#/texts/5' text: strong emphasis +- children: [] + content_layer: body + label: text + orig: ' ' + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/6' + text: ' ' - children: [] content_layer: body formatting: @@ -352,7 +372,7 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/5' + self_ref: '#/texts/7' text: both - children: [] content_layer: body @@ -361,17 +381,17 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/6' + self_ref: '#/texts/8' text: . - children: [] content_layer: body label: text - orig: 'Create your feature branch:' + orig: 'Create your feature branch: ' parent: $ref: '#/groups/1' prov: [] - self_ref: '#/texts/7' - text: 'Create your feature branch:' + self_ref: '#/texts/9' + text: 'Create your feature branch: ' - captions: [] children: [] code_language: unknown @@ -383,7 +403,7 @@ texts: $ref: '#/groups/1' prov: [] references: [] - self_ref: '#/texts/8' + self_ref: '#/texts/10' text: git checkout -b feature/AmazingFeature - children: [] content_layer: body @@ -392,7 +412,7 @@ texts: parent: $ref: '#/groups/1' prov: [] - self_ref: '#/texts/9' + self_ref: '#/texts/11' text: . - children: - $ref: '#/groups/3' @@ -404,17 +424,17 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/10' + self_ref: '#/texts/12' text: '' - children: [] content_layer: body label: text - orig: Pull the + orig: 'Pull the ' parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/11' - text: Pull the + self_ref: '#/texts/13' + text: 'Pull the ' - children: [] content_layer: body formatting: @@ -429,7 +449,7 @@ texts: parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/12' + self_ref: '#/texts/14' text: repository - children: [] content_layer: body @@ -438,7 +458,7 @@ texts: parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/13' + self_ref: '#/texts/15' text: . - children: - $ref: '#/groups/4' @@ -450,7 +470,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/14' + self_ref: '#/texts/16' text: '' - children: [] content_layer: body @@ -459,7 +479,7 @@ texts: parent: $ref: '#/groups/4' prov: [] - self_ref: '#/texts/15' + self_ref: '#/texts/17' text: Create your feature branch ( - captions: [] children: [] @@ -472,7 +492,7 @@ texts: $ref: '#/groups/4' prov: [] references: [] - self_ref: '#/texts/16' + self_ref: '#/texts/18' text: git checkout -b feature/AmazingFeature - children: [] content_layer: body @@ -481,7 +501,7 @@ texts: parent: $ref: '#/groups/4' prov: [] - self_ref: '#/texts/17' + self_ref: '#/texts/19' text: ) - children: - $ref: '#/groups/5' @@ -493,7 +513,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/18' + self_ref: '#/texts/20' text: '' - children: [] content_layer: body @@ -502,7 +522,7 @@ texts: parent: $ref: '#/groups/5' prov: [] - self_ref: '#/texts/19' + self_ref: '#/texts/21' text: Commit your changes ( - captions: [] children: [] @@ -515,7 +535,7 @@ texts: $ref: '#/groups/5' prov: [] references: [] - self_ref: '#/texts/20' + self_ref: '#/texts/22' text: git commit -m 'Add some AmazingFeature' - children: [] content_layer: body @@ -524,7 +544,7 @@ texts: parent: $ref: '#/groups/5' prov: [] - self_ref: '#/texts/21' + self_ref: '#/texts/23' text: ) - children: - $ref: '#/groups/6' @@ -536,7 +556,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/22' + self_ref: '#/texts/24' text: '' - children: [] content_layer: body @@ -545,7 +565,7 @@ texts: parent: $ref: '#/groups/6' prov: [] - self_ref: '#/texts/23' + self_ref: '#/texts/25' text: Push to the branch ( - captions: [] children: [] @@ -558,7 +578,7 @@ texts: $ref: '#/groups/6' prov: [] references: [] - self_ref: '#/texts/24' + self_ref: '#/texts/26' text: git push origin feature/AmazingFeature - children: [] content_layer: body @@ -567,7 +587,7 @@ texts: parent: $ref: '#/groups/6' prov: [] - self_ref: '#/texts/25' + self_ref: '#/texts/27' text: ) - children: [] content_layer: body @@ -578,7 +598,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/26' + self_ref: '#/texts/28' text: Open a Pull Request - children: [] content_layer: body @@ -595,7 +615,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/27' + self_ref: '#/texts/29' text: Whole list item has same formatting - children: - $ref: '#/groups/7' @@ -607,17 +627,17 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/28' + self_ref: '#/texts/30' text: '' - children: [] content_layer: body label: text - orig: List item has + orig: 'List item has ' parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/29' - text: List item has + self_ref: '#/texts/31' + text: 'List item has ' - children: [] content_layer: body formatting: @@ -631,17 +651,17 @@ texts: parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/30' + self_ref: '#/texts/32' text: mixed or partial - children: [] content_layer: body label: text - orig: formatting + orig: ' formatting' parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/31' - text: formatting + self_ref: '#/texts/33' + text: ' formatting' - children: [] content_layer: body formatting: @@ -655,7 +675,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/32' + self_ref: '#/texts/34' text: Whole heading is italic - children: - $ref: '#/groups/9' @@ -667,7 +687,7 @@ texts: parent: $ref: '#/groups/8' prov: [] - self_ref: '#/texts/33' + self_ref: '#/texts/35' text: '' - children: [] content_layer: body @@ -682,7 +702,7 @@ texts: parent: $ref: '#/groups/9' prov: [] - self_ref: '#/texts/34' + self_ref: '#/texts/36' text: First - children: [] content_layer: body @@ -691,7 +711,7 @@ texts: parent: $ref: '#/groups/9' prov: [] - self_ref: '#/texts/35' + self_ref: '#/texts/37' text: ': Lorem ipsum.' - children: - $ref: '#/groups/10' @@ -703,7 +723,7 @@ texts: parent: $ref: '#/groups/8' prov: [] - self_ref: '#/texts/36' + self_ref: '#/texts/38' text: '' - children: [] content_layer: body @@ -718,17 +738,17 @@ texts: parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/37' + self_ref: '#/texts/39' text: Second - children: [] content_layer: body label: text - orig: ': Dolor' + orig: ': Dolor ' parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/38' - text: ': Dolor' + self_ref: '#/texts/40' + text: ': Dolor ' - captions: [] children: [] code_language: unknown @@ -740,26 +760,26 @@ texts: $ref: '#/groups/10' prov: [] references: [] - self_ref: '#/texts/39' + self_ref: '#/texts/41' text: sit - children: [] content_layer: body label: text - orig: amet. + orig: ' amet.' parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/40' - text: amet. + self_ref: '#/texts/42' + text: ' amet.' - children: [] content_layer: body label: text - orig: Some + orig: 'Some ' parent: $ref: '#/groups/11' prov: [] - self_ref: '#/texts/41' - text: Some + self_ref: '#/texts/43' + text: 'Some ' - captions: [] children: [] code_language: unknown @@ -777,7 +797,7 @@ texts: $ref: '#/groups/11' prov: [] references: [] - self_ref: '#/texts/42' + self_ref: '#/texts/44' text: formatted_code - children: - $ref: '#/groups/12' @@ -788,7 +808,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/43' + self_ref: '#/texts/45' text: '' - children: [] content_layer: body @@ -803,17 +823,17 @@ texts: parent: $ref: '#/groups/12' prov: [] - self_ref: '#/texts/44' + self_ref: '#/texts/46' text: Partially formatted - children: [] content_layer: body label: text - orig: heading to_escape + orig: ' heading to_escape ' parent: $ref: '#/groups/12' prov: [] - self_ref: '#/texts/45' - text: heading to_escape + self_ref: '#/texts/47' + text: ' heading to_escape ' - captions: [] children: [] code_language: unknown @@ -825,7 +845,7 @@ texts: $ref: '#/groups/12' prov: [] references: [] - self_ref: '#/texts/46' + self_ref: '#/texts/48' text: not_to_escape - children: [] content_layer: body @@ -835,7 +855,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/47' + self_ref: '#/texts/49' text: $$E=mc^2$$ - children: [] content_layer: body @@ -845,6 +865,6 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/48' + self_ref: '#/texts/50' text: Table Heading -version: 1.10.0 +version: 1.11.0 diff --git a/tests/data/md/groundtruth/mixed_without_h1.md.md b/tests/data/md/groundtruth/mixed_without_h1.md.md index 47232f4441..884981ef3b 100644 --- a/tests/data/md/groundtruth/mixed_without_h1.md.md +++ b/tests/data/md/groundtruth/mixed_without_h1.md.md @@ -5,6 +5,6 @@ Content before first heading - A. first - subitem - B. second -- 2 . strange +- 2. strange The end! diff --git a/tests/data/md/groundtruth/mixed_without_h1.md.yaml b/tests/data/md/groundtruth/mixed_without_h1.md.yaml index b3037f9d61..65d6fc2d5f 100644 --- a/tests/data/md/groundtruth/mixed_without_h1.md.yaml +++ b/tests/data/md/groundtruth/mixed_without_h1.md.yaml @@ -43,7 +43,7 @@ groups: key_value_items: [] name: mixed_without_h1 origin: - binary_hash: 11100987453172996924 + binary_hash: 1004175075401466085 filename: mixed_without_h1.md mimetype: text/html pages: {} @@ -111,12 +111,12 @@ texts: enumerated: false label: list_item marker: '' - orig: 2 . strange + orig: 2. strange parent: $ref: '#/groups/1' prov: [] self_ref: '#/texts/5' - text: 2 . strange + text: 2. strange - children: [] content_layer: body label: text @@ -126,4 +126,4 @@ texts: prov: [] self_ref: '#/texts/6' text: The end! -version: 1.10.0 +version: 1.11.0 diff --git a/tests/data/md/groundtruth/signature_stamp_01.md.json b/tests/data/md/groundtruth/signature_stamp_01.md.json index 513db072c3..a4c827c078 100644 --- a/tests/data/md/groundtruth/signature_stamp_01.md.json +++ b/tests/data/md/groundtruth/signature_stamp_01.md.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "signature_stamp_01", "origin": { "mimetype": "text/html", diff --git a/tests/data/webvtt/groundtruth/webvtt_example_01.vtt.json b/tests/data/webvtt/groundtruth/webvtt_example_01.vtt.json index ae7ccfcaae..62824d8359 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_01.vtt.json +++ b/tests/data/webvtt/groundtruth/webvtt_example_01.vtt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "webvtt_example_01", "origin": { "mimetype": "text/vtt", diff --git a/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.json b/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.json index e69229b29b..f16d288af6 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.json +++ b/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "webvtt_example_02", "origin": { "mimetype": "text/vtt", diff --git a/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.md b/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.md index 7f62407381..4883b144cf 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.md +++ b/tests/data/webvtt/groundtruth/webvtt_example_02.vtt.md @@ -2,8 +2,8 @@ It’s a blue apple tree! No way! -Hee! *laughter* +Hee! *laughter* That’s awesome! -Sur les *playground* , ici à Montpellier \ No newline at end of file +Sur les *playground*, ici à Montpellier \ No newline at end of file diff --git a/tests/data/webvtt/groundtruth/webvtt_example_03.vtt.json b/tests/data/webvtt/groundtruth/webvtt_example_03.vtt.json index 7bc87194f6..0f476d4895 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_03.vtt.json +++ b/tests/data/webvtt/groundtruth/webvtt_example_03.vtt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "webvtt_example_03", "origin": { "mimetype": "text/vtt", diff --git a/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.json b/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.json index b6c9fa4453..f3a021a79c 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.json +++ b/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "webvtt_example_04", "origin": { "mimetype": "text/vtt", diff --git a/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.md b/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.md index f2312a059c..92d8e26527 100644 --- a/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.md +++ b/tests/data/webvtt/groundtruth/webvtt_example_04.vtt.md @@ -1,5 +1,5 @@ Last night the chef surprised us with a culinary adventure. -The waiter offered a *steaming bowl of * *paella* that instantly transported the diners to a sunny Mediterranean coast. +The waiter offered a *steaming bowl of* *paella* that instantly transported the diners to a sunny Mediterranean coast. -The dessert’s ***unexpected*** * * *arcobaleno* * of flavors* left everyone in awe. \ No newline at end of file +The dessert’s ***unexpected*** *arcobaleno* *of flavors* left everyone in awe. \ No newline at end of file diff --git a/tests/data/xbrl/groundtruth/grve_10q_htm.xml.json b/tests/data/xbrl/groundtruth/grve_10q_htm.xml.json index 4ab651c1cd..ca4fe65932 100644 --- a/tests/data/xbrl/groundtruth/grve_10q_htm.xml.json +++ b/tests/data/xbrl/groundtruth/grve_10q_htm.xml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "grve_10q_htm", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/xbrl/groundtruth/grve_10q_htm.xml.md b/tests/data/xbrl/groundtruth/grve_10q_htm.xml.md index 037b06bcea..4cbf1b85d7 100644 --- a/tests/data/xbrl/groundtruth/grve_10q_htm.xml.md +++ b/tests/data/xbrl/groundtruth/grve_10q_htm.xml.md @@ -38,7 +38,7 @@ Income Taxes The Company is taxed as a C corporation for income tax purposes. The Company accounts for income taxes under the liability method, and deferred tax assets and liabilities are recognized for the future tax consequences attributable to differences between the financial statement carrying values of existing assets and liabilities and their respective tax bases. Deferred tax assets and liabilities are measured using enacted tax rates in effect for the year in which those temporary differences are expected to be recovered or settled. A valuation allowance is provided on deferred tax assets if it is determined that it is more likely than not that the deferred tax asset will not be realized. The Company records interest, net of any applicable related income tax benefit, on potential income tax contingencies as a component of income tax expense. The Company records tax positions taken or expected to be taken in a tax return based upon the amount that is more likely than not to be realized or paid, including in connection with the resolution of any related appeals or other legal processes. Accordingly, the Company recognizes liabilities for certain unrecognized tax benefits based on the amounts that are more likely than not to be settled with the relevant taxing authority. The Company recognizes interest and/or penalties related to unrecognized tax benefits as a component of income tax expense. -**Recent Accounting Standard Adopted** : +**Recent Accounting Standard Adopted**: In November 2023, the FASB issued Accounting Standards Update ("ASU") 2023-07 - Improvements to Reportable Segment Disclosures, which enhances the disclosures required for reportable segments in annual and interim financial statements, including additional, more detailed information about a reportable segment's expenses. The standard is effective for fiscal years beginning after December 15, 2023, and interim periods within fiscal years beginning after December 15, 2024. The Company adopted ASU 2023-07 for the year ended March 31, 2025, retrospectively to all periods presented in the financial statements. The adoption of this ASU had no impact on reportable segments identified and had no effect on the Company's financial position, results of operations, or cash flows. diff --git a/tests/data/xbrl/groundtruth/mlac-20251231.xml.itxt b/tests/data/xbrl/groundtruth/mlac-20251231.xml.itxt index 0c748d7d11..4b0fca36e8 100644 --- a/tests/data/xbrl/groundtruth/mlac-20251231.xml.itxt +++ b/tests/data/xbrl/groundtruth/mlac-20251231.xml.itxt @@ -259,16 +259,16 @@ Ordinary Shares item-216 at level 1: text: For further details on the Propo ... October 7, 2025 and January 13, 2026. item-217 at level 1: text: NOTE 7 - SHAREHOLDERS' DEFICIT item-218 at level 1: inline: group group - item-219 at level 2: text: Preference Shares - item-220 at level 2: text: - + item-219 at level 2: text: Preference Shares + item-220 at level 2: text: - item-221 at level 2: text: The Company is authorized to iss ... eference shares issued or outstanding. item-222 at level 1: inline: group group - item-223 at level 2: text: Class A Ordinary Shares - item-224 at level 2: text: - + item-223 at level 2: text: Class A Ordinary Shares + item-224 at level 2: text: - item-225 at level 2: text: The Company is authorized to iss ... shares subject to possible redemption. item-226 at level 1: inline: group group - item-227 at level 2: text: Class B Ordinary Shares - item-228 at level 2: text: - + item-227 at level 2: text: Class B Ordinary Shares + item-228 at level 2: text: - item-229 at level 2: text: The Company is authorized to iss ... rdinary shares issued and outstanding. item-230 at level 1: text: Only holders of Class B ordinary ... hareholders except as required by law. item-231 at level 1: text: The Class B ordinary shares will ... ccur on a less than one-for-one basis. diff --git a/tests/data/xbrl/groundtruth/mlac-20251231.xml.json b/tests/data/xbrl/groundtruth/mlac-20251231.xml.json index 3f68a63827..b08db906d7 100644 --- a/tests/data/xbrl/groundtruth/mlac-20251231.xml.json +++ b/tests/data/xbrl/groundtruth/mlac-20251231.xml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "mlac-20251231", "furniture": { "self_ref": "#/furniture", @@ -3499,8 +3499,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Preference Shares", - "text": "Preference Shares", + "orig": "Preference Shares ", + "text": "Preference Shares ", "formatting": { "bold": true, "italic": true, @@ -3518,8 +3518,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-", - "text": "-", + "orig": "- ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3549,8 +3549,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Class A Ordinary Shares", - "text": "Class A Ordinary Shares", + "orig": "Class A Ordinary Shares ", + "text": "Class A Ordinary Shares ", "formatting": { "bold": true, "italic": true, @@ -3568,8 +3568,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-", - "text": "-", + "orig": "- ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3599,8 +3599,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Class B Ordinary Shares", - "text": "Class B Ordinary Shares", + "orig": "Class B Ordinary Shares ", + "text": "Class B Ordinary Shares ", "formatting": { "bold": true, "italic": true, @@ -3618,8 +3618,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-", - "text": "-", + "orig": "- ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3943,8 +3943,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Company's CODM has been identified as the Chief Executive Officer , who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment.", - "text": "The Company's CODM has been identified as the Chief Executive Officer , who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment." + "orig": "The Company's CODM has been identified as the Chief Executive Officer, who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment.", + "text": "The Company's CODM has been identified as the Chief Executive Officer, who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment." }, { "self_ref": "#/texts/201", diff --git a/tests/data/xbrl/groundtruth/mlac-20251231.xml.md b/tests/data/xbrl/groundtruth/mlac-20251231.xml.md index 2f9563930c..ee18811af6 100644 --- a/tests/data/xbrl/groundtruth/mlac-20251231.xml.md +++ b/tests/data/xbrl/groundtruth/mlac-20251231.xml.md @@ -416,7 +416,7 @@ The Public Share Rights have been classified within shareholders' deficit and wi | - | - | - | - | - | | Trade price of Unit | | $ | 10.94 | | | Risk-free rate | | | 4.17 | % | -| Market adjustment (1) | | | 9.2 | % | +| Market adjustment(1) | | | 9.2 | % | | Fair value per share right | | $ | 0.09 | | | (1) | Market adjustment reflects additional factors not fully captured by low volatility selection, which may include likelihood of Business Combination occurring, market perception of lack of available or suitable targets, or possible post-acquisition decline of stock price prior to beginning of the exercise period. The adjustment is determined by comparing traded warrant prices to simulated model outputs. | @@ -444,7 +444,7 @@ The following table presents the quantitative information regarding market assum | - | - | - | - | - | | Trade price of Unit | | $ | 10.94 | | | Risk-free rate | | | 4.17 | % | -| Market adjustment (1) | | | 9.2 | % | +| Market adjustment(1) | | | 9.2 | % | | Fair value per share right | | $ | 0.09 | | | (1) | Market adjustment reflects additional factors not fully captured by low volatility selection, which may include likelihood of Business Combination occurring, market perception of lack of available or suitable targets, or possible post-acquisition decline of stock price prior to beginning of the exercise period. The adjustment is determined by comparing traded warrant prices to simulated model outputs. | @@ -454,7 +454,7 @@ NOTE 9 - SEGMENT INFORMATION ASC Topic 280, "Segment Reporting," establishes standards for companies to report in their financial statement information about operating segments, products, services, geographic areas, and major customers. Operating segments are defined as components of an enterprise for which separate financial information is available that is regularly evaluated by the Company's chief operating officer decision maker ("CODM"), or group, in deciding how to allocate resources and assess performance. -The Company's CODM has been identified as the Chief Executive Officer , who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment. +The Company's CODM has been identified as the Chief Executive Officer, who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment. The CODM assesses performance for the single segment and decides how to allocate resources based on net income that also is reported on the statements of operations as net income. The measure of segment assets is reported on the balance sheets as total assets. When evaluating the Company's performance and making key decisions regarding resource allocation, the CODM reviews several key metrics, which include the following: diff --git a/tests/test_backend_email.py b/tests/test_backend_email.py index ab01124b33..683c45af06 100644 --- a/tests/test_backend_email.py +++ b/tests/test_backend_email.py @@ -143,7 +143,8 @@ def test_email_backend_converts_html_body_to_text_paragraphs(): markdown = backend.convert().export_to_markdown() - assert "Hello **Bob** ," in markdown + # No invented separator between the bold run and the comma. + assert "Hello **Bob**," in markdown assert "This is HTML." in markdown assert "" not in markdown diff --git a/tests/test_backend_html.py b/tests/test_backend_html.py index ddf0ebc1cd..dd304bea4c 100644 --- a/tests/test_backend_html.py +++ b/tests/test_backend_html.py @@ -1448,3 +1448,55 @@ def test_html_newline_handling(): assert "sentinelcharacter" in markdown or "sentinel character" in markdown, ( "Text should still be present after sentinel cleanup" ) + + +@pytest.mark.parametrize( + ("body", "expected"), + [ + # An empty formatted element between two words is one boundary, not three spaces. + (b"

    a b

    ", "a b"), + # No whitespace at the boundary in the source: none in the output. + (b"

    Water is H2O here.

    ", "Water is H2O here."), + # Whitespace after the closing tag is significant and must survive. + (b"

    x2 + y3 ok

    ", "x2 + y3 ok"), + # Whitespace inside a formatted run belongs outside the emphasis markers. + (b"

    bold tail

    ", "**bold** tail"), + # Runs of whitespace collapse (HTML spec) but the boundary is kept. + (b"

    a \n b c

    ", "a *b* c"), + # The block edge is trimmed exactly once. + (b"

    padded

    ", "padded"), + ], +) +def test_inline_whitespace_boundaries(body, expected): + """Inline runs carry their own whitespace; nothing is invented or lost at a boundary.""" + html = b"" + body + b"" + in_doc = InputDocument( + path_or_stream=BytesIO(html), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="test", + ) + doc = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(html)).convert() + assert doc.export_to_markdown() == expected + + +def test_single_char_spans_do_not_compact_across_a_boundary(): + """The single-char compactor must not glue words that a space separates. + + Rendered span soup emits one span per character; compacting them is what turns + `Hi` into `Hi`. A span carrying edge whitespace is a word + boundary, so it must stop the run. + """ + html = ( + b"

    " + b"Hi to" + b"

    " + ) + in_doc = InputDocument( + path_or_stream=BytesIO(html), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="test", + ) + doc = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(html)).convert() + assert doc.export_to_markdown() == "Hi to" diff --git a/tests/test_backend_jats.py b/tests/test_backend_jats.py index 6f610bf4e3..80805d2a01 100644 --- a/tests/test_backend_jats.py +++ b/tests/test_backend_jats.py @@ -235,20 +235,20 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: pytest.param( "The mass energy relation $$E=mc^2$$ is famous.", [ - (DocItemLabel.TEXT, "The mass energy relation", None), + (DocItemLabel.TEXT, "The mass energy relation ", None), (DocItemLabel.FORMULA, "E=mc^2", None), - (DocItemLabel.TEXT, "is famous.", None), + (DocItemLabel.TEXT, " is famous.", None), ], id="text-formula-text", ), pytest.param( "Given $$a^2$$ and $$b^2$$ we sum.", [ - (DocItemLabel.TEXT, "Given", None), + (DocItemLabel.TEXT, "Given ", None), (DocItemLabel.FORMULA, "a^2", None), - (DocItemLabel.TEXT, "and", None), + (DocItemLabel.TEXT, " and ", None), (DocItemLabel.FORMULA, "b^2", None), - (DocItemLabel.TEXT, "we sum.", None), + (DocItemLabel.TEXT, " we sum.", None), ], id="multiple-formulas", ), @@ -257,9 +257,9 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: # (adjacent unstyled runs are coalesced into one segment) "The relation foo $$E=mc^2$$ bar holds.", [ - (DocItemLabel.TEXT, "The relation foo", None), + (DocItemLabel.TEXT, "The relation foo ", None), (DocItemLabel.FORMULA, "E=mc^2", None), - (DocItemLabel.TEXT, "bar holds.", None), + (DocItemLabel.TEXT, " bar holds.", None), ], id="text-inside-inline-formula", ), @@ -267,19 +267,20 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: # tex-math is not always wrapped in $$...$$ in real JATS files "The relation E=mc^2 holds.", [ - (DocItemLabel.TEXT, "The relation", None), + (DocItemLabel.TEXT, "The relation ", None), (DocItemLabel.FORMULA, "E=mc^2", None), - (DocItemLabel.TEXT, "holds.", None), + (DocItemLabel.TEXT, " holds.", None), ], id="bare-tex-math", ), pytest.param( "We use x $$a^2$$ here.", [ - (DocItemLabel.TEXT, "We use", None), + (DocItemLabel.TEXT, "We use ", None), (DocItemLabel.TEXT, "x", (False, True, False, False, Script.BASELINE)), + (DocItemLabel.TEXT, " ", None), (DocItemLabel.FORMULA, "a^2", None), - (DocItemLabel.TEXT, "here.", None), + (DocItemLabel.TEXT, " here.", None), ], id="italic-inside-formula", ), @@ -288,18 +289,20 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: [ (DocItemLabel.TEXT, "Index x", None), (DocItemLabel.TEXT, "i", (False, False, False, False, Script.SUB)), + (DocItemLabel.TEXT, " ", None), (DocItemLabel.FORMULA, "x_i", None), - (DocItemLabel.TEXT, "shown.", None), + (DocItemLabel.TEXT, " shown.", None), ], id="subscript-inside-formula", ), pytest.param( "Take v $$v$$ next.", [ - (DocItemLabel.TEXT, "Take", None), + (DocItemLabel.TEXT, "Take ", None), (DocItemLabel.TEXT, "v", (True, True, False, False, Script.BASELINE)), + (DocItemLabel.TEXT, " ", None), (DocItemLabel.FORMULA, "v", None), - (DocItemLabel.TEXT, "next.", None), + (DocItemLabel.TEXT, " next.", None), ], id="nested-emphasis-inside-formula", ), @@ -308,9 +311,9 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: # formula (not leaked as raw ``$$...$$`` text) "Val $$x^2$$ shown.", [ - (DocItemLabel.TEXT, "Val", None), + (DocItemLabel.TEXT, "Val ", None), (DocItemLabel.FORMULA, "x^2", None), - (DocItemLabel.TEXT, "shown.", None), + (DocItemLabel.TEXT, " shown.", None), ], id="tex-math-inside-emphasis", ), @@ -319,16 +322,17 @@ def _inline_group_items(doc: DoclingDocument) -> list[list]: # and adjacent unstyled runs are coalesced "Compare lhs $$a$$ rhs and $$b$$ now.", [ - (DocItemLabel.TEXT, "Compare", None), + (DocItemLabel.TEXT, "Compare ", None), ( DocItemLabel.TEXT, "lhs", (False, True, False, False, Script.BASELINE), ), + (DocItemLabel.TEXT, " ", None), (DocItemLabel.FORMULA, "a", None), - (DocItemLabel.TEXT, "rhs and", None), + (DocItemLabel.TEXT, " rhs and ", None), (DocItemLabel.FORMULA, "b", None), - (DocItemLabel.TEXT, "now.", None), + (DocItemLabel.TEXT, " now.", None), ], id="formula-with-surrounding-elements", ), @@ -383,13 +387,13 @@ def test_jats_paragraph_emphasis_is_preserved(): groups = _inline_group_items(doc) assert len(groups) == 1 assert [_formatting_tuple(item) for item in groups[0]] == [ - (DocItemLabel.TEXT, "The species", None), + (DocItemLabel.TEXT, "The species ", None), ( DocItemLabel.TEXT, "Homo sapiens", (False, True, False, False, Script.BASELINE), ), - (DocItemLabel.TEXT, "is", None), + (DocItemLabel.TEXT, " is ", None), (DocItemLabel.TEXT, "common", (True, False, False, False, Script.BASELINE)), (DocItemLabel.TEXT, ".", None), ] @@ -574,3 +578,24 @@ def test_e2e_jats_conversions_stream(): def test_e2e_jats_conversions_no_stream(): test_e2e_jats_conversions(use_stream=False) + + +def test_jats_inline_runs_rejoin_to_the_source_text(): + """Runs concatenate back to the paragraph text: no invented and no lost separator.""" + cases = { + "The species Homo sapiens is common.": ( + "The species Homo sapiens is common." + ), + # no whitespace at the boundary in the source, so none in the runs + "Water is H2O here.": "Water is H2O here.", + "Note1 follows.": "Note1 follows.", + # block edges are trimmed exactly once; interior whitespace is verbatim, since + # XML content is not whitespace-collapsed the way HTML normal flow is + " padded x ": "padded x", + } + for paragraph, expected in cases.items(): + doc = convert_jats_body(f"T

    {paragraph}

    ") + runs = [ + t.text for t in doc.texts if t.label == DocItemLabel.TEXT and t.text != "T" + ] + assert "".join(runs) == expected, paragraph diff --git a/tests/test_backend_markdown.py b/tests/test_backend_markdown.py index 7230bd5b18..586307497d 100644 --- a/tests/test_backend_markdown.py +++ b/tests/test_backend_markdown.py @@ -479,3 +479,34 @@ def test_convert_table_rows_match_header_cell_count(): table_data = conv_result.document.tables[0].data assert [cell.text for cell in table_data.table_cells] == expected assert len(table_data.table_cells) == table_data.num_rows * table_data.num_cols + + +@pytest.mark.parametrize( + ("source", "expected"), + [ + # A soft-wrapped paragraph renders as one line with a space at the wrap point. + ( + "After the swim,\nit is time to eat\nsomething nice\n", + "After the swim, it is time to eat something nice", + ), + # Emphasis boundaries keep the source spacing, and none is invented. + ("Foo *emph* bar\n", "Foo *emph* bar"), + ( + "The pipe (| or `|`) only in tables.\n", + "The pipe (| or `|`) only in tables.", + ), + # No space at the boundary in the source, so none in the output. + ("a*b*c\n", "a*b*c"), + ], +) +def test_inline_whitespace_round_trips_through_markdown(source, expected): + """Marko run boundaries survive: the export reproduces the source line.""" + stream = BytesIO(source.encode()) + in_doc = InputDocument( + path_or_stream=stream, + format=InputFormat.MD, + backend=MarkdownDocumentBackend, + filename="test.md", + ) + doc = MarkdownDocumentBackend(in_doc=in_doc, path_or_stream=stream).convert() + assert doc.export_to_markdown() == expected diff --git a/tests/test_backend_msword.py b/tests/test_backend_msword.py index ef558d0874..04fa19602f 100644 --- a/tests/test_backend_msword.py +++ b/tests/test_backend_msword.py @@ -180,10 +180,12 @@ def test_text_after_image_anchors(documents): name = "word_image_anchors.docx" doc = next(item[1] for item in documents if item[0].name == name) texts = {item.text for item, _ in doc.iterate_items() if isinstance(item, TextItem)} + # Runs keep their own whitespace, so the spaces the source puts between the two runs of a + # paragraph stay on the left run rather than being stripped and re-invented by the serializer. for expected in ( - "This is test 1", + "This is test 1 ", "0:08\nCorrect, he is not.", - "This is test 2", + "This is test 2 ", "0:16\nYeah, exactly.", ): assert expected in texts diff --git a/tests/test_inline_whitespace_contract.py b/tests/test_inline_whitespace_contract.py new file mode 100644 index 0000000000..aefdc6b80e --- /dev/null +++ b/tests/test_inline_whitespace_contract.py @@ -0,0 +1,151 @@ +"""Backend-side checks for the InlineGroup whitespace contract. + +Inline runs carry their own significant whitespace and the docling-core serializers +concatenate them faithfully, with no separator of their own. The per-format boundary cases +live next to each backend's own tests; this module holds the cases that need to build a +source document on the fly. +""" + +import re +from pathlib import Path + +import pytest +from docx import Document + +from docling.backend.html_backend import HTMLDocumentBackend +from docling.backend.msword_backend import MsWordDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import InputDocument, TextItem + + +def test_docx_paragraph_runs_keep_their_own_whitespace(tmp_path): + """A DOCX run's boundary whitespace stays in the run, not invented by the serializer. + + In DOCX the space at a formatting boundary very often sits *inside* the formatted run. + Stripping each run forced the serializers to re-insert a separator, which produced + ``**bold** .`` and ``H 2 O``. Runs are now emitted verbatim, with only the paragraph + edges trimmed, and the serializer hoists edge whitespace out of the emphasis markers. + """ + docx_path = tmp_path / "runs.docx" + document = Document() + paragraph = document.add_paragraph() + paragraph.add_run(" Normal ") # leading paragraph padding is trimmed + bold = paragraph.add_run("bold ") # the boundary space lives inside the bold run + bold.bold = True + paragraph.add_run("tail. ") # trailing paragraph padding is trimmed + + no_space = document.add_paragraph() + no_space.add_run("H") + sub = no_space.add_run("2") + sub.font.subscript = True + no_space.add_run("O") + + document.save(docx_path) + + in_doc = InputDocument( + path_or_stream=docx_path, + format=InputFormat.DOCX, + backend=MsWordDocumentBackend, + ) + doc = MsWordDocumentBackend(in_doc=in_doc, path_or_stream=docx_path).convert() + + runs = [item.text for item, _ in doc.iterate_items() if isinstance(item, TextItem)] + assert runs == ["Normal ", "bold ", "tail.", "H", "2", "O"] + + md = doc.export_to_markdown() + assert "Normal **bold** tail." in md + assert "H2O" in md + + +def test_docx_inline_equations_keep_the_boundary_space(): + """Text after an inline equation keeps its leading space. + + ``_add_inline_equations_to_parent`` builds its own InlineGroup, outside the corrected + paragraph path, and used to strip the fragment following the last equation. With a + faithful join that merged the formula into the next word + (``$A= \\pi r^{2}$is the area formula``). + """ + source = Path("tests/data/docx/sources/equations.docx") + in_doc = InputDocument( + path_or_stream=source, + format=InputFormat.DOCX, + backend=MsWordDocumentBackend, + ) + doc = MsWordDocumentBackend(in_doc=in_doc, path_or_stream=source).convert() + md = doc.export_to_markdown() + + # list items (the helper's own InlineGroup) ... + assert ( + "- First item with inline equation: $A= \\pi r^{2}$ is the area formula." in md + ) + assert ( + "- Second item with equations: $E=mc^{2}$ and $F=ma$ are physics formulas." + in md + ) + assert "- The formula $a^{2}+b^{2}=c^{2}$ is the Pythagorean theorem." in md + # ... and a normal paragraph through the same helper, where the boundary is a period. + assert ( + "This is a word document and this is an inline equation: $A= \\pi r^{2}$." in md + ) + + # No equation is glued to the following word anywhere in the document. + assert not re.search(r"\}\$[A-Za-z]", md), md + + +def _convert_html(tmp_path, body: str): + source = tmp_path / "t.html" + source.write_text(f"{body}", encoding="utf-8") + in_doc = InputDocument( + path_or_stream=source, + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + ) + return HTMLDocumentBackend(in_doc=in_doc, path_or_stream=source).convert() + + +@pytest.mark.parametrize( + ("body", "expected_md", "expected_txt"), + [ + # Adjacent code spans: the boundary belongs between the two `` ` `` delimiters, not + # inside either of them. It used to land inside the second span (``a`` b``). + ("

    a b

    ", "`a` `b`", "a b"), + ("

    a b c

    ", "`a` `b` `c`", "a b c"), + # No source whitespace means no boundary to preserve. + ("

    xaby

    ", "x`ab`y", "xaby"), + # One side plain: the space goes on the plain run. + ("

    a b

    ", "`a` **b**", "a b"), + ("

    a b

    ", "**a** `b`", "a b"), + ("

    see a then

    ", "see `a` then", "see a then"), + # The original contract cases stay correct. + ( + "

    Water is H2O here

    ", + "Water is H2O here", + "Water is H2O here", + ), + ( + "

    x2 + y3 uses sup

    ", + "x2 + y3 uses sup", + "x2 + y3 uses sup", + ), + ], +) +def test_html_boundary_stays_outside_code_delimiters( + tmp_path, body, expected_md, expected_txt +): + doc = _convert_html(tmp_path, body) + assert doc.export_to_markdown() == expected_md + assert doc.export_to_text() == expected_txt + + +def test_html_pre_keeps_interior_whitespace(tmp_path): + """`
    ` is preformatted: only the block edges are trimmed, never each fragment.
    +
    +    Stripping every fragment merged mixed content into one word once the serializer stopped
    +    inserting a separator. The one-code-item-per-fragment shape of `
    ` with inline markup
    +    is a separate pre-existing issue and is not addressed here.
    +    """
    +    doc = _convert_html(tmp_path, '
    See link first
    ') + assert doc.export_to_text() == "See link first" + + plain = _convert_html(tmp_path, "
    \ndef f():\n    return 1\n
    ") + assert "def f():\n return 1" in plain.export_to_markdown() From 8a44fd21e9390cd600c19563d52e3f79b6c030a6 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Sun, 26 Jul 2026 22:21:35 +0200 Subject: [PATCH 02/16] build: source docling-core from the contract branch until it ships These backends emit inline runs that own their boundary whitespace, which only a faithful-join docling-core renders correctly. Point `tool.uv.sources` at the branch carrying that change so the lock-step pair is installable and CI resolves the same core the goldens were baselined against. `uv.lock` pins the exact commit (66040cb7). Temporary: drop the source and raise the `docling-core` floor in `dependencies` once the release carrying the faithful join exists on PyPI. The lock diff is larger than the one entry because moving docling-core from a registry wheel to a git checkout re-narrows environment markers across the graph. The resolved package set is unchanged at 382, and no dependency is added or removed. --- pyproject.toml | 6 +- uv.lock | 819 +++++++++++++++++++++++-------------------------- 2 files changed, 391 insertions(+), 434 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index cb67bf2cb0..be2fe3e1eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -376,7 +376,11 @@ members = ["packages/docling", "packages/docling-client"] [tool.uv.sources] docling = { workspace = true } # docling-parse = { git = "https://github.com/docling-project/docling-parse", rev = "main" } -# docling-core = { git = "https://github.com/docling-project/docling-core/", rev = "main" } +# The InlineGroup whitespace contract lands in lock-step with docling-core: these backends emit +# runs that own their boundary whitespace, and only a faithful-join core renders them correctly. +# Drop this source once docling-core ships the release carrying it, and raise the floor in +# `dependencies` to that version. +docling-core = { git = "https://github.com/docling-project/docling-core", branch = "cau/serializer-whitespace-fixes" } [tool.uv] package = true diff --git a/uv.lock b/uv.lock index fe8354bb16..0ec6d6ddaf 100644 --- a/uv.lock +++ b/uv.lock @@ -3,30 +3,29 @@ revision = 3 requires-python = ">=3.10, <4.0" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform != 'darwin'", ] [manifest] members = [ "docling", - "docling-client", "docling-slim", ] overrides = [{ name = "grpcio", specifier = ">=1.75.1" }] @@ -441,21 +440,21 @@ version = "18.0.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/ae/a4/570a5a35c8638aba01e739925846c35fdd6b0756a15526766d0a4dd3b7df/av-18.0.0.tar.gz", hash = "sha256:4ef7e72c3d3a872584a1215173b16e0226811037f40dcdbf75992631098df1ba", size = 4340222, upload-time = "2026-07-02T06:37:58.907Z" } @@ -807,7 +806,7 @@ name = "coloredlogs" version = "15.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "humanfriendly" }, + { name = "humanfriendly", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520, upload-time = "2021-06-11T10:22:45.202Z" } wheels = [ @@ -844,7 +843,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -912,25 +911,25 @@ version = "1.3.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -1115,8 +1114,8 @@ name = "cryptography" version = "49.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "cffi", marker = "(python_full_version < '3.11' and platform_python_implementation != 'PyPy' and sys_platform == 'emscripten') or (python_full_version < '3.11' and platform_python_implementation != 'PyPy' and sys_platform == 'win32') or (platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform != 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } wheels = [ @@ -1207,7 +1206,7 @@ name = "cuda-bindings" version = "13.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder" }, + { name = "cuda-pathfinder", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a9/21/8464d133752951c154feafb3b65c297e7d80f301183d220bec4c830f1441/cuda_bindings-13.3.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:120fcc53d57903df529c3486962c56528cba5b7d6c57c99537320ed9922c8b86", size = 6073403, upload-time = "2026-05-29T23:11:36.22Z" }, @@ -1242,37 +1241,37 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas" }, + { name = "nvidia-cublas", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] cudart = [ - { name = "nvidia-cuda-runtime" }, + { name = "nvidia-cuda-runtime", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] cufft = [ - { name = "nvidia-cufft" }, + { name = "nvidia-cufft", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] cufile = [ - { name = "nvidia-cufile" }, + { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, ] cupti = [ - { name = "nvidia-cuda-cupti" }, + { name = "nvidia-cuda-cupti", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] curand = [ - { name = "nvidia-curand" }, + { name = "nvidia-curand", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] cusolver = [ - { name = "nvidia-cusolver" }, + { name = "nvidia-cusolver", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] cusparse = [ - { name = "nvidia-cusparse" }, + { name = "nvidia-cusparse", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-nvrtc", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] nvtx = [ - { name = "nvidia-nvtx" }, + { name = "nvidia-nvtx", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or sys_platform == 'linux'" }, ] [[package]] @@ -1290,10 +1289,10 @@ version = "1.12.5" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform != 'darwin'", ] sdist = { url = "https://files.pythonhosted.org/packages/ba/be/3dd297fb25113abf40dd5de66088ce6883b62c417caa6b5fc2a84b9d48bf/cysignals-1.12.5.tar.gz", hash = "sha256:8f8ed409043d028b59d063dc4c069cbf12a750534757ce06f38eeac5ff368700", size = 86022, upload-time = "2025-09-24T02:47:35.065Z" } @@ -1338,17 +1337,17 @@ version = "1.12.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", ] sdist = { url = "https://files.pythonhosted.org/packages/b9/5a/d258fd8d6ee1538b8472f39051a87d3d6aa2ab26ffa2da4ac809fb851b88/cysignals-1.12.6.tar.gz", hash = "sha256:3ef3a37bdb244821b85475a08e2762ca1019570b369e321504995fa9a54675ce", size = 79583, upload-time = "2025-10-30T04:28:44.463Z" } @@ -1492,7 +1491,7 @@ wheels = [ [[package]] name = "docling" -version = "2.120.3" +version = "2.115.0" source = { editable = "packages/docling" } dependencies = [ { name = "docling-slim", extra = ["standard"] }, @@ -1546,21 +1545,10 @@ requires-dist = [ ] provides-extras = ["easyocr", "tesserocr", "ocrmac", "vlm", "rapidocr", "asr", "htmlrender", "remote-serving", "onnxruntime", "xbrl"] -[[package]] -name = "docling-client" -version = "2.120.3" -source = { editable = "packages/docling-client" } -dependencies = [ - { name = "docling-slim", extra = ["service-client"] }, -] - -[package.metadata] -requires-dist = [{ name = "docling-slim", extras = ["service-client"], editable = "." }] - [[package]] name = "docling-core" -version = "2.91.0" -source = { registry = "https://pypi.org/simple" } +version = "2.87.1" +source = { git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes#66040cb7b96f77699c9d74051500d645e7e758ed" } dependencies = [ { name = "defusedxml" }, { name = "doclang" }, @@ -1577,10 +1565,6 @@ dependencies = [ { name = "typer" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/5aaf6f1221242a4dd598b515786ffca796352a8d960a9c6a0deb614301f4/docling_core-2.91.0.tar.gz", hash = "sha256:dc40fe76524a2700f869265015a9ef86027888e73b5652f324b3b5c52a2df240", size = 344852, upload-time = "2026-08-06T14:23:07.919Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/68/de7c0ba404d035afe78ae4e602290bb6c330b34cc53fd5f92c9950be4ac0/docling_core-2.91.0-py3-none-any.whl", hash = "sha256:4949a5dd77ae1daf4153c095897d3bdde1c870f2bbe401bf94d8834bef867998", size = 286832, upload-time = "2026-08-06T14:23:05.908Z" }, -] [package.optional-dependencies] chunking = [ @@ -1661,7 +1645,7 @@ wheels = [ [[package]] name = "docling-slim" -version = "2.120.3" +version = "2.115.0" source = { editable = "." } dependencies = [ { name = "certifi" }, @@ -1710,7 +1694,6 @@ all = [ { name = "pypdfium2" }, { name = "python-docx" }, { name = "python-dotenv" }, - { name = "python-oxmsg" }, { name = "python-pptx" }, { name = "qwen-vl-utils" }, { name = "rapidocr" }, @@ -1794,7 +1777,6 @@ format-docx = [ format-email = [ { name = "beautifulsoup4" }, { name = "mail-parser" }, - { name = "python-oxmsg" }, ] format-html = [ { name = "beautifulsoup4" }, @@ -1802,9 +1784,6 @@ format-html = [ format-html-render = [ { name = "playwright" }, ] -format-iwork = [ - { name = "defusedxml" }, -] format-latex = [ { name = "pylatexenc" }, ] @@ -1914,7 +1893,6 @@ standard = [ { name = "pypdfium2" }, { name = "python-docx" }, { name = "python-dotenv" }, - { name = "python-oxmsg" }, { name = "python-pptx" }, { name = "rapidocr" }, { name = "rich" }, @@ -2015,11 +1993,10 @@ requires-dist = [ { name = "arelle-release", marker = "extra == 'format-xml-xbrl'", specifier = ">=2.38.17,<3.0.0" }, { name = "beautifulsoup4", marker = "extra == 'format-html'", specifier = ">=4.12.3,<5.0.0" }, { name = "certifi", specifier = ">=2024.7.4" }, - { name = "defusedxml", marker = "extra == 'format-iwork'", specifier = ">=0.7.1,<0.8.0" }, { name = "defusedxml", marker = "extra == 'format-xml-uspto'", specifier = ">=0.7.1,<0.8.0" }, { name = "defusedxml", marker = "extra == 'models-local'", specifier = ">=0.7.1,<0.8.0" }, - { name = "docling-core", specifier = ">=2.91.0,<3.0.0" }, - { name = "docling-core", extras = ["chunking"], marker = "extra == 'feat-chunking'", specifier = ">=2.73.0,<3.0.0" }, + { name = "docling-core", git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes" }, + { name = "docling-core", extras = ["chunking"], marker = "extra == 'feat-chunking'", git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes" }, { name = "docling-ibm-models", marker = "extra == 'models-local'", specifier = ">=3.13.0,<4" }, { name = "docling-parse", marker = "extra == 'format-pdf-docling'", specifier = ">=7.0.0,<8.0.0" }, { name = "docling-slim", extras = ["convert-core"], marker = "extra == 'extract-core'" }, @@ -2029,7 +2006,7 @@ requires-dist = [ { name = "docling-slim", extras = ["format-html"], marker = "extra == 'format-xml-jats'" }, { name = "docling-slim", extras = ["format-html"], marker = "extra == 'format-xml-uspto'" }, { name = "docling-slim", extras = ["format-html", "format-markdown"], marker = "extra == 'format-web'" }, - { name = "docling-slim", extras = ["format-pdf", "models-local", "feat-ocr-rapidocr", "format-office", "format-web", "format-latex", "format-email", "format-iwork", "feat-chunking", "extract-core", "service-client", "cli"], marker = "extra == 'standard'" }, + { name = "docling-slim", extras = ["format-pdf", "models-local", "feat-ocr-rapidocr", "format-office", "format-web", "format-latex", "format-email", "feat-chunking", "extract-core", "service-client", "cli"], marker = "extra == 'standard'" }, { name = "docling-slim", extras = ["format-pdf-pypdfium2", "format-pdf-docling"], marker = "extra == 'format-pdf'" }, { name = "docling-slim", extras = ["standard", "models-vlm-inline", "format-audio", "format-html-render", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "models-remote", "models-onnxruntime", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac"], marker = "extra == 'all'" }, { name = "easyocr", marker = "extra == 'feat-ocr-easyocr'", specifier = ">=1.7,<2.0" }, @@ -2066,7 +2043,6 @@ requires-dist = [ { name = "python-docx", marker = "extra == 'format-docx'", specifier = ">=1.2.0,<2.0.0" }, { name = "python-dotenv", marker = "extra == 'cli'", specifier = "~=1.0" }, { name = "python-dotenv", marker = "extra == 'service-client'", specifier = "~=1.0" }, - { name = "python-oxmsg", marker = "extra == 'format-email'", specifier = ">=0.0.2,<0.1.0" }, { name = "python-pptx", marker = "extra == 'format-pptx'", specifier = ">=1.0.2,<2.0.0" }, { name = "qwen-vl-utils", marker = "extra == 'models-vlm-inline'", specifier = ">=0.0.11" }, { name = "rapidocr", marker = "extra == 'feat-ocr-rapidocr'", specifier = ">=3.9.1,<4.0.0" }, @@ -2090,9 +2066,9 @@ requires-dist = [ { name = "typer", marker = "extra == 'cli'", specifier = ">=0.12.5,<0.27.0" }, { name = "typer", marker = "extra == 'service-client'", specifier = ">=0.12.5,<0.27.0" }, { name = "websockets", marker = "extra == 'service-client'", specifier = ">=14.0,<17.0" }, - { name = "whisper-s2t-reborn", marker = "(platform_machine != 'arm64' and extra == 'format-audio') or (sys_platform != 'darwin' and extra == 'format-audio')", specifier = ">=1.7.1,<2.0.0" }, + { name = "whisper-s2t-reborn", marker = "(platform_machine != 'arm64' and extra == 'format-audio') or (sys_platform != 'darwin' and extra == 'format-audio')", specifier = ">=1.6.3,<2" }, ] -provides-extras = ["convert-core", "extract-core", "format-pdf-pypdfium2", "format-pdf-docling", "format-pdf", "format-docx", "format-pptx", "format-xlsx", "format-office", "format-opendocument", "format-html", "format-markdown", "format-web", "format-latex", "format-email", "format-iwork", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "format-html-render", "format-audio", "format-video", "feat-ocr-rapidocr", "feat-ocr-rapidocr-onnx", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac", "feat-ocr-nemotron", "models-local", "models-remote", "models-onnxruntime", "models-vlm-inline", "feat-chunking", "service-client", "cli", "standard", "all"] +provides-extras = ["convert-core", "extract-core", "format-pdf-pypdfium2", "format-pdf-docling", "format-pdf", "format-docx", "format-pptx", "format-xlsx", "format-office", "format-opendocument", "format-html", "format-markdown", "format-web", "format-latex", "format-email", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "format-html-render", "format-audio", "format-video", "feat-ocr-rapidocr", "feat-ocr-rapidocr-onnx", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac", "feat-ocr-nemotron", "models-local", "models-remote", "models-onnxruntime", "models-vlm-inline", "feat-chunking", "service-client", "cli", "standard", "all"] [package.metadata.requires-dev] constraints = [ @@ -2146,7 +2122,7 @@ examples = [ ] pr-fast-checks = [ { name = "boto3-stubs", specifier = "~=1.37" }, - { name = "docling-core", extras = ["chunking"], specifier = ">=2.73.0,<3.0.0" }, + { name = "docling-core", extras = ["chunking"], git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes" }, { name = "pandas-stubs", specifier = "~=2.1" }, { name = "pydantic", specifier = ">=2.0.0,<3.0.0" }, { name = "pydantic-settings", specifier = ">=2.3.0,<3.0.0" }, @@ -2243,7 +2219,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -2285,11 +2261,11 @@ name = "fastapi" version = "0.139.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc" }, - { name = "pydantic" }, - { name = "starlette" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-doc", marker = "sys_platform == 'darwin'" }, + { name = "pydantic", marker = "sys_platform == 'darwin'" }, + { name = "starlette", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d3/af/a5f50ccfa659ec1802cb4ca842c23f06d906a8cc9aef6016a2caeea3d4ed/fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145", size = 423016, upload-time = "2026-07-01T16:35:33.436Z" } wheels = [ @@ -2564,13 +2540,13 @@ name = "gliner" version = "0.2.24" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "onnxruntime" }, - { name = "sentencepiece" }, + { name = "huggingface-hub", marker = "python_full_version < '3.14'" }, + { name = "onnxruntime", marker = "python_full_version < '3.14'" }, + { name = "sentencepiece", marker = "python_full_version < '3.14'" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and platform_machine != 'x86_64') or (python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.13.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version < '3.14' and sys_platform != 'linux')" }, + { name = "tqdm", marker = "python_full_version < '3.14'" }, + { name = "transformers", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2b/6d/677d50855311e4a1286204c5ef2ef5672d01688246a303bde5326311bdad/gliner-0.2.24.tar.gz", hash = "sha256:191a37d1b3d297927c37ae890ce904e9d4e9d3f4c8e19715e77a9876e5f8a575", size = 160568, upload-time = "2025-11-26T18:20:32.867Z" } wheels = [ @@ -2839,7 +2815,7 @@ name = "humanfriendly" version = "10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyreadline3", marker = "sys_platform == 'win32'" }, + { name = "pyreadline3", marker = "python_full_version < '3.14' and sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702, upload-time = "2021-09-17T21:40:43.31Z" } wheels = [ @@ -2933,17 +2909,17 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "exceptiongroup" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } wheels = [ @@ -2956,36 +2932,36 @@ version = "9.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "ipython-pygments-lexers" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "psutil", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580, upload-time = "2026-06-26T11:03:35.913Z" } wheels = [ @@ -2997,7 +2973,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ @@ -3634,21 +3610,21 @@ version = "6.1.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/05/3b/aab6728cae887456f409b4d75e8a01856e4f04bd510de38052a47768b680/lxml-6.1.1.tar.gz", hash = "sha256:ba96ae44888e0185281e937633a743ea90d5a196c6000f82565ebb0580012d40", size = 4197430, upload-time = "2026-05-18T19:19:06.424Z" } @@ -3898,15 +3874,15 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" } }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "cycler", marker = "python_full_version < '3.11'" }, + { name = "fonttools", marker = "python_full_version < '3.11'" }, + { name = "kiwisolver", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pillow", marker = "python_full_version < '3.11'" }, + { name = "pyparsing", marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } wheels = [ @@ -3972,33 +3948,33 @@ version = "3.11.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" } }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "cycler", marker = "python_full_version >= '3.11'" }, + { name = "fonttools", marker = "python_full_version >= '3.11'" }, + { name = "kiwisolver", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pillow", marker = "python_full_version >= '3.11'" }, + { name = "pyparsing", marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } wheels = [ @@ -4096,7 +4072,7 @@ name = "miniaudio" version = "1.71" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi" }, + { name = "cffi", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d8/d5/e5439dc08561f73656bfeb3340fc64ab63163e101426593d8fb9a025ff1e/miniaudio-1.71.tar.gz", hash = "sha256:ff51e2887bb673e2e757752b586b3dc924d59aa5fbcae9bbc45f4a111bd3262b", size = 1116480, upload-time = "2026-04-29T21:20:38.182Z" } wheels = [ @@ -4272,7 +4248,7 @@ name = "mlx" version = "0.32.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mlx-metal" }, + { name = "mlx-metal", marker = "sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/df/38/a034159df4d21ef7b5721225a2c46092e20a2c627724f57be3e89fa7dbce/mlx-0.32.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:c6feb17e32160b70c7634aab925cf3f8c5c7bebbf99f227c48450478e1008af2", size = 562899, upload-time = "2026-07-07T17:55:25.157Z" }, @@ -4297,18 +4273,18 @@ name = "mlx-audio" version = "0.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "miniaudio" }, - { name = "mlx" }, - { name = "mlx-lm" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "sounddevice" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "miniaudio", marker = "sys_platform == 'darwin'" }, + { name = "mlx", marker = "sys_platform == 'darwin'" }, + { name = "mlx-lm", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "sounddevice", marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "transformers", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/af/1e/f712c9f7997e5051c4da3b658f38162203bb703c750741984c8358c8b897/mlx_audio-0.4.4.tar.gz", hash = "sha256:d751e5f477517e4e7f04de5567318e2fe91b4606af5d7e4b2973603c4777814a", size = 1386491, upload-time = "2026-06-06T15:32:03.504Z" } wheels = [ @@ -4320,14 +4296,14 @@ name = "mlx-lm" version = "0.31.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinja2" }, - { name = "mlx" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "protobuf" }, - { name = "pyyaml" }, - { name = "sentencepiece" }, - { name = "transformers" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "mlx", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "protobuf", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "sys_platform == 'darwin'" }, + { name = "transformers", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/94/9a38d6b0c6fcca995b9136c94eb7da1e9c5165652edf228b96b29960fa7a/mlx_lm-0.31.3.tar.gz", hash = "sha256:61eb0e3ba09444f77f874aff295401d7ccd20b39495cbbce0c782a15474ce733", size = 304318, upload-time = "2026-04-22T07:37:27.922Z" } wheels = [ @@ -4349,23 +4325,23 @@ name = "mlx-vlm" version = "0.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "datasets" }, - { name = "fastapi" }, - { name = "llguidance" }, - { name = "miniaudio" }, - { name = "mlx" }, - { name = "mlx-audio" }, - { name = "mlx-lm" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "opencv-python" }, - { name = "pillow" }, - { name = "python-multipart" }, - { name = "requests" }, - { name = "starlette" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "uvicorn" }, + { name = "datasets", marker = "sys_platform == 'darwin'" }, + { name = "fastapi", marker = "sys_platform == 'darwin'" }, + { name = "llguidance", marker = "sys_platform == 'darwin'" }, + { name = "miniaudio", marker = "sys_platform == 'darwin'" }, + { name = "mlx", marker = "sys_platform == 'darwin'" }, + { name = "mlx-audio", marker = "sys_platform == 'darwin'" }, + { name = "mlx-lm", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "opencv-python", marker = "sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "python-multipart", marker = "sys_platform == 'darwin'" }, + { name = "requests", marker = "sys_platform == 'darwin'" }, + { name = "starlette", marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, + { name = "transformers", marker = "sys_platform == 'darwin'" }, + { name = "uvicorn", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/de/03810d375be44e04a0889a7709aa72d8f187ec94a5172dea3d91051032e4/mlx_vlm-0.6.4.tar.gz", hash = "sha256:2a911692aedc3861ae26f4057b1c05dcb9abfb954d50123df3ef63eab0c58e29", size = 1453442, upload-time = "2026-07-06T21:11:12.567Z" } wheels = [ @@ -4377,18 +4353,18 @@ name = "mlx-whisper" version = "0.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "mlx" }, - { name = "more-itertools" }, - { name = "numba" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "tiktoken" }, - { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" } }, - { name = "tqdm" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin'" }, + { name = "mlx", marker = "sys_platform == 'darwin'" }, + { name = "more-itertools", marker = "sys_platform == 'darwin'" }, + { name = "numba", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and sys_platform == 'darwin'" }, + { name = "tiktoken", marker = "sys_platform == 'darwin'" }, + { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "tqdm", marker = "sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/22/b7/a35232812a2ccfffcb7614ba96a91338551a660a0e9815cee668bf5743f0/mlx_whisper-0.4.3-py3-none-any.whl", hash = "sha256:6b82b6597a994643a3e5496c7bc229a672e5ca308458455bfe276e76ae024489", size = 890544, upload-time = "2025-08-29T14:56:13.815Z" }, @@ -4778,12 +4754,12 @@ name = "nemotron-ocr" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "pillow" }, - { name = "shapely" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" } }, - { name = "torchvision", version = "0.26.0", source = { registry = "https://pypi.org/simple" } }, + { name = "huggingface-hub", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "shapely", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torchvision", version = "0.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b7/ef/9dbba22f5de348a5f9c3af0488bf61258872926c40b7d513d71ef465b418/nemotron_ocr-2.0.0.tar.gz", hash = "sha256:84eb64f8af2ae12fbd83e38e482348ecce6a932b30946c873f8b8a95afae7355", size = 155817, upload-time = "2026-05-21T00:06:36.975Z" } wheels = [ @@ -4818,21 +4794,21 @@ version = "3.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } @@ -5009,21 +4985,21 @@ version = "2.4.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } @@ -5145,7 +5121,7 @@ resolution-markers = [ "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", ] dependencies = [ - { name = "nvidia-cublas" }, + { name = "nvidia-cublas", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, @@ -5163,7 +5139,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "nvidia-cublas" }, + { name = "nvidia-cublas", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -5175,7 +5151,7 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -5205,9 +5181,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, - { name = "nvidia-cusparse" }, - { name = "nvidia-nvjitlink" }, + { name = "nvidia-cublas", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "nvidia-cusparse", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -5219,7 +5195,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -5312,9 +5288,9 @@ name = "ocrmac" version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "pillow" }, - { name = "pyobjc-framework-vision" }, + { name = "click", marker = "sys_platform == 'darwin'" }, + { name = "pillow", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-vision", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/07/3e15ab404f75875c5e48c47163300eb90b7409044d8711fc3aaf52503f2e/ocrmac-1.0.1.tar.gz", hash = "sha256:507fe5e4cbd67b2d03f6729a52bbc11f9d0b58241134eb958a5daafd4b9d93d9", size = 1454317, upload-time = "2026-01-08T16:44:26.412Z" } wheels = [ @@ -5334,15 +5310,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/92/e5/2d213680e4e69aa5faebc6b3809a9846ac9f2ffeabb0009042409f8b9f1f/odfdo-3.22.10-py3-none-any.whl", hash = "sha256:235777e3ca7646d72bc18c9705863db138e25f9cf9dd51092450ca620c98786c", size = 401510, upload-time = "2026-07-05T15:14:43.369Z" }, ] -[[package]] -name = "olefile" -version = "0.47" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240, upload-time = "2023-12-01T16:22:53.025Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565, upload-time = "2023-12-01T16:22:51.518Z" }, -] - [[package]] name = "omegaconf" version = "2.3.1" @@ -5361,13 +5328,13 @@ name = "onnxruntime" version = "1.23.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coloredlogs" }, - { name = "flatbuffers" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "coloredlogs", marker = "python_full_version < '3.14'" }, + { name = "flatbuffers", marker = "python_full_version < '3.14'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, + { name = "packaging", marker = "python_full_version < '3.14'" }, + { name = "protobuf", marker = "python_full_version < '3.14'" }, + { name = "sympy", marker = "python_full_version < '3.14'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/35/d6/311b1afea060015b56c742f3531168c1644650767f27ef40062569960587/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a7730122afe186a784660f6ec5807138bf9d792fa1df76556b27307ea9ebcbe3", size = 17195934, upload-time = "2025-10-27T23:06:14.143Z" }, @@ -5399,13 +5366,13 @@ name = "onnxruntime-gpu" version = "1.23.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coloredlogs" }, - { name = "flatbuffers" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, + { name = "coloredlogs", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten')" }, + { name = "flatbuffers", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten'" }, + { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten')" }, + { name = "protobuf", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten')" }, + { name = "sympy", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/cb/ae/39283748c68a96be4f5f8a9561e0e3ca92af1eae6c2b1c07fb1da5f65cd1/onnxruntime_gpu-1.23.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18de50c6c8eea50acc405ea13d299aec593e46478d7a22cd32cdbbdf7c42899d", size = 300525411, upload-time = "2025-10-22T16:56:08.415Z" }, @@ -5588,10 +5555,10 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } wheels = [ @@ -5650,27 +5617,27 @@ version = "3.0.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } wheels = [ @@ -5792,7 +5759,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess" }, + { name = "ptyprocess", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ @@ -6570,7 +6537,7 @@ name = "pyobjc-framework-cocoa" version = "12.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyobjc-core" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/34/fbe38a204643aa4e1b91391cdce07a34da565a69171ebcad08de7438a556/pyobjc_framework_cocoa-12.2.1.tar.gz", hash = "sha256:b94b37fe5730e5ae1fb0052912cd174e6ec329b0bfba4a012ae5db1014b5864b", size = 3125751, upload-time = "2026-06-19T16:20:05.159Z" } wheels = [ @@ -6590,8 +6557,8 @@ name = "pyobjc-framework-coreml" version = "12.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-cocoa", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/1e/7d2db3e4468eb04cc92264be83113d86eea4f96302742437de695a445d6d/pyobjc_framework_coreml-12.2.1.tar.gz", hash = "sha256:ef3c2b6a160891b44173235603d10174929656b9c206d6f2f443fe2aa903c2cb", size = 49272, upload-time = "2026-06-19T16:20:18.459Z" } wheels = [ @@ -6611,8 +6578,8 @@ name = "pyobjc-framework-quartz" version = "12.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-cocoa", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3b/f6/2a8b84dbf1fe7c04dd96ea73d991678d4e09a909f51971ecc51629bb2ab4/pyobjc_framework_quartz-12.2.1.tar.gz", hash = "sha256:b3b8b6f71e66147f8ff9e6213864cc8527e3a0b1ee90835b93ce221f4802d9b0", size = 3215521, upload-time = "2026-06-19T16:21:30.199Z" } wheels = [ @@ -6632,10 +6599,10 @@ name = "pyobjc-framework-vision" version = "12.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, - { name = "pyobjc-framework-coreml" }, - { name = "pyobjc-framework-quartz" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-cocoa", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-coreml", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-quartz", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/7a/1fdffff1b6bf124b260a2169869f4b71a08b9f6603698f7dec990d5ae5f3/pyobjc_framework_vision-12.2.1.tar.gz", hash = "sha256:debfd59dd7d962a6053bf733370148c11a9ec44091b517a0966f48d81c305879", size = 72683, upload-time = "2026-06-19T16:22:01.102Z" } wheels = [ @@ -6925,20 +6892,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, ] -[[package]] -name = "python-oxmsg" -version = "0.0.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "olefile" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a2/4e/869f34faedbc968796d2c7e9837dede079c9cb9750917356b1f1eda926e9/python_oxmsg-0.0.2.tar.gz", hash = "sha256:a6aff4deb1b5975d44d49dab1d9384089ffeec819e19c6940bc7ffbc84775fad", size = 34713, upload-time = "2025-02-03T17:13:47.415Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/67/f56c69a98c7eb244025845506387d0f961681657c9fcd8b2d2edd148f9d2/python_oxmsg-0.0.2-py3-none-any.whl", hash = "sha256:22be29b14c46016bcd05e34abddfd8e05ee82082f53b82753d115da3fc7d0355", size = 31455, upload-time = "2025-02-03T17:13:46.061Z" }, -] - [[package]] name = "python-pptx" version = "1.0.2" @@ -7628,21 +7581,21 @@ version = "2026.6.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } @@ -7846,14 +7799,14 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "imageio" }, - { name = "lazy-loader" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" } }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, - { name = "packaging" }, - { name = "pillow" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" } }, - { name = "tifffile", version = "2025.5.10", source = { registry = "https://pypi.org/simple" } }, + { name = "imageio", marker = "python_full_version < '3.11'" }, + { name = "lazy-loader", marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pillow", marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "tifffile", version = "2025.5.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c7/a8/3c0f256012b93dd2cb6fda9245e9f4bff7dc0486880b248005f15ea2255e/scikit_image-0.25.2.tar.gz", hash = "sha256:e5a37e6cd4d0c018a7a55b9d601357e3382826d3888c10d0213fc63bff977dde", size = 22693594, upload-time = "2025-02-18T18:05:24.538Z" } wheels = [ @@ -7886,33 +7839,33 @@ version = "0.26.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "imageio" }, - { name = "lazy-loader" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" } }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "packaging" }, - { name = "pillow" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "imageio", marker = "python_full_version >= '3.11'" }, + { name = "lazy-loader", marker = "python_full_version >= '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pillow", marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "tifffile", version = "2026.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "tifffile", version = "2026.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "tifffile", version = "2026.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a1/b4/2528bb43c67d48053a7a649a9666432dc307d66ba02e3a6d5c40f46655df/scikit_image-0.26.0.tar.gz", hash = "sha256:f5f970ab04efad85c24714321fcc91613fcb64ef2a892a13167df2f3e59199fa", size = 22729739, upload-time = "2025-12-20T17:12:21.824Z" } @@ -7976,10 +7929,10 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "joblib" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" } }, - { name = "threadpoolctl" }, + { name = "joblib", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "threadpoolctl", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } wheels = [ @@ -8021,30 +7974,30 @@ version = "1.9.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "joblib" }, - { name = "narwhals" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "joblib", marker = "python_full_version >= '3.11'" }, + { name = "narwhals", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "threadpoolctl" }, + { name = "threadpoolctl", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } wheels = [ @@ -8089,7 +8042,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } wheels = [ @@ -8151,7 +8104,7 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } wheels = [ @@ -8223,21 +8176,21 @@ version = "1.18.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } wheels = [ @@ -8288,8 +8241,8 @@ name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography" }, - { name = "jeepney" }, + { name = "cryptography", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "jeepney", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -8500,7 +8453,7 @@ name = "sounddevice" version = "0.5.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi" }, + { name = "cffi", marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/f9/2592608737553638fca98e21e54bfec40bf577bb98a61b2770c912aab25e/sounddevice-0.5.5.tar.gz", hash = "sha256:22487b65198cb5bf2208755105b524f78ad173e5ab6b445bdab1c989f6698df3", size = 143191, upload-time = "2026-01-23T18:36:43.529Z" } wheels = [ @@ -8590,8 +8543,8 @@ name = "standard-aifc" version = "3.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "audioop-lts" }, - { name = "standard-chunk" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "standard-chunk", marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/53/6050dc3dde1671eb3db592c13b55a8005e5040131f7509cef0215212cb84/standard_aifc-3.13.0.tar.gz", hash = "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43", size = 15240, upload-time = "2024-10-30T16:01:31.772Z" } wheels = [ @@ -8612,7 +8565,7 @@ name = "standard-sunau" version = "3.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "audioop-lts" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/e3/ce8d38cb2d70e05ffeddc28bb09bad77cfef979eb0a299c9117f7ed4e6a9/standard_sunau-3.13.0.tar.gz", hash = "sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908", size = 9368, upload-time = "2024-10-30T16:01:41.626Z" } wheels = [ @@ -8624,8 +8577,8 @@ name = "starlette" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "anyio", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } wheels = [ @@ -8756,7 +8709,7 @@ resolution-markers = [ "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/44/d0/18fed0fc0916578a4463f775b0fbd9c5fed2392152d039df2fb533bfdd5d/tifffile-2025.5.10.tar.gz", hash = "sha256:018335d34283aa3fd8c263bae5c3c2b661ebc45548fde31504016fcae7bf1103", size = 365290, upload-time = "2025-05-10T19:22:34.386Z" } wheels = [ @@ -8774,7 +8727,7 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c5/cb/2f6d79c7576e22c116352a801f4c3c8ace5957e9aced862012430b62e14f/tifffile-2026.3.3.tar.gz", hash = "sha256:d9a1266bed6f2ee1dd0abde2018a38b4f8b2935cb843df381d70ac4eac5458b7", size = 388745, upload-time = "2026-03-03T19:14:38.134Z" } wheels = [ @@ -8787,21 +8740,21 @@ version = "2026.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b7/38/5e2ecef5af2f4fd4a89bb8d6240de9458bab4d51a4cbd97aeb3a0cd618e2/tifffile-2026.6.1.tar.gz", hash = "sha256:626c892c0e899d959b9438e7c0e1491dc154a7fead1f1f37a991724a50eceba9", size = 429694, upload-time = "2026-05-31T23:57:12.165Z" } wheels = [ @@ -9000,20 +8953,20 @@ resolution-markers = [ "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", ] dependencies = [ - { name = "cuda-bindings" }, - { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"] }, - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" } }, - { name = "nvidia-cudnn-cu13", version = "9.19.0.56", source = { registry = "https://pypi.org/simple" } }, - { name = "nvidia-cusparselt-cu13", version = "0.8.0", source = { registry = "https://pypi.org/simple" } }, - { name = "nvidia-nccl-cu13", version = "2.28.9", source = { registry = "https://pypi.org/simple" } }, - { name = "nvidia-nvshmem-cu13" }, - { name = "setuptools" }, - { name = "sympy" }, - { name = "triton", version = "3.6.0", source = { registry = "https://pypi.org/simple" } }, - { name = "typing-extensions" }, + { name = "cuda-bindings", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fsspec", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jinja2", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu13", version = "9.19.0.56", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", version = "0.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", version = "2.28.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sympy", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "triton", version = "3.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f9/1e/18a9b10b4bd34f12d4e561c52b0ae7158707b8193c6cfc0aad2b48167090/torch-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1b32ceda909818a03b112006709b02be1877240c31750a8d9c6b7bf5f2d8a6e5", size = 530589207, upload-time = "2026-03-23T18:11:23.756Z" }, @@ -9031,41 +8984,41 @@ version = "2.12.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ - { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, - { name = "cuda-toolkit", extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, + { name = "cuda-bindings", marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "cuda-toolkit", extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "filelock", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, + { name = "fsspec", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, + { name = "jinja2", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, - { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu13", version = "9.20.0.48", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu13", version = "0.8.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu13", version = "2.29.7", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux'" }, - { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, - { name = "setuptools" }, - { name = "sympy" }, - { name = "triton", version = "3.7.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux'" }, - { name = "typing-extensions" }, + { name = "nvidia-cublas", marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-cudnn-cu13", version = "9.20.0.48", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-cusparselt-cu13", version = "0.8.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-nccl-cu13", version = "2.29.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-nvshmem-cu13", marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "setuptools", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, + { name = "sympy", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, + { name = "triton", version = "3.7.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and sys_platform == 'linux') or (platform_machine != 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/db/ed/ff0c4f8cef63977a646dc80e40c05cae873f4097b12dc87e1cd7e1cecf42/torch-2.12.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ec56e82be6a8b0c036771a77f7d32ad3c299770571af9815b3dafe61434389d5", size = 87967927, upload-time = "2026-06-17T21:08:43.16Z" }, @@ -9102,9 +9055,9 @@ resolution-markers = [ "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, - { name = "pillow" }, - { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/5e/00/24d8c7845c3f270153fb81395a5135b2778e2538e81d14c6aea5106c689c/torchvision-0.26.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b6f9ad1ecc0eab52647298b379ee9426845f8903703e6127973f8f3d049a798b", size = 7518249, upload-time = "2026-03-23T18:12:51.743Z" }, @@ -9122,29 +9075,29 @@ version = "0.27.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform == 'win32'", - "python_full_version == '3.12.*' and sys_platform == 'emscripten'", - "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'x86_64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32')", "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform != 'darwin'", ] dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, - { name = "pillow" }, - { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" } }, + { name = "pillow", marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, + { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c9/10/8e3e5a70dded1f86368bc987d93fa0436e73a79060aead75a8783b040ebd/torchvision-0.27.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:68ba63b48af92f06db995adb23d8411993dba1dee705a4e92411b83a00930b7f", size = 1852109, upload-time = "2026-06-17T21:09:34.966Z" }, @@ -9720,9 +9673,9 @@ name = "uvicorn" version = "0.50.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "click", marker = "sys_platform == 'darwin'" }, + { name = "h11", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9f/f6/cc9aadc0e481344a42095d222bfa764122fb8cfba708d1922917bd8bfb01/uvicorn-0.50.2.tar.gz", hash = "sha256:b92bf03509b82bcb9d49e7335b4fd364518ad021c2dc18b4e6a2fec8c955a0bb", size = 93716, upload-time = "2026-07-06T10:38:31.984Z" } wheels = [ @@ -9867,7 +9820,7 @@ wheels = [ [[package]] name = "whisper-s2t-reborn" -version = "1.7.1" +version = "1.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "av", version = "17.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -9883,9 +9836,9 @@ dependencies = [ { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/b4/1585cee8154c35cef2b8c714dfef1094e33e4e4e1d303a13e5386fcb9e23/whisper_s2t_reborn-1.7.1.tar.gz", hash = "sha256:d2d36693a6a9df5957d2055eb538ce8ef0bd46aa732ef566bc4f6bf63ef362d1", size = 1436892, upload-time = "2026-08-05T01:10:16.869Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/57/6aa04b85b05247ac0617176caa1fb2887ee39a4ea5a8346353caa04b3490/whisper_s2t_reborn-1.6.3.tar.gz", hash = "sha256:1fd58b2b7218923775548a5a12fc3d0988435c146301a7aaf5acf02cc3693a71", size = 1436041, upload-time = "2026-06-25T13:32:36.756Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/20/bd6ef2d24f3da33b347d97ca3751af13fed3e07510db4cb5e27bd6e7ed7d/whisper_s2t_reborn-1.7.1-py3-none-any.whl", hash = "sha256:8a2cc44301091020740f973fd5c7b2804b73a1101bc6271dd27675e028f8d1a3", size = 1437964, upload-time = "2026-08-05T01:10:14.958Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8f/a73573109961f108ecd87338a6a439894912abb9ac642168f85023a1e41b/whisper_s2t_reborn-1.6.3-py3-none-any.whl", hash = "sha256:b8c8562d82851f6125455fa51edd2e6cab3836e3decb15216e40dcd515b4912a", size = 1437499, upload-time = "2026-06-25T13:32:35.3Z" }, ] [[package]] From bd3092f549a075760e855cb061ff1fed1e591f19 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Mon, 27 Jul 2026 12:48:47 +0200 Subject: [PATCH 03/16] DCO Remediation Commit for Christoph Auer I, Christoph Auer , hereby add my Signed-off-by to this commit: ec6163c71c19b82de0e6670afe9e8c30cc54faf4 I, Christoph Auer , hereby add my Signed-off-by to this commit: 8a7b4fe510b807aa6466f8f4b545a8176d791df8 I, Christoph Auer , hereby add my Signed-off-by to this commit: 31a4a731d4982a05752361ceb60d0a3ee79d5253 Signed-off-by: Christoph Auer From efbc2c07ae01150919a0416f17504ff081580972 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Tue, 18 Aug 2026 15:11:16 +0200 Subject: [PATCH 04/16] fix(odf): keep hyperlink-boundary whitespace under the faithful join Rebase integration. Upstream #3949 (ODF anchor hyperlinks) stripped whitespace at hyperlink boundaries in _normalize_odf_text_runs, correct under the old '' join which re-inserted a separator, but a word-merge under the faithful join (Watch[the talk]for context). The boundary space now stays in the plain run and the serializer places it outside the link markup, per the contract. - drop the hyperlink-boundary strip; update #3949's two tests to the contract-correct whitespace-bearing item texts (markdown was already right) - regenerate ODF goldens (double-space / space-before-punct artifacts gone, upstream #3850 inter-span text renders tight) - bump three upstream-added docx goldens to schema 1.11.0 Signed-off-by: Christoph Auer --- docling/backend/opendocument_backend.py | 14 ++++++-------- .../groundtruth/docx_list_blank_spacer.docx.json | 2 +- .../docx_list_resumed_numbering.docx.json | 2 +- .../docx_page_header_footer_first_page.docx.json | 2 +- .../odf/groundtruth/odf_presentation_01.odp.json | 2 +- .../odf/groundtruth/odf_presentation_02.odp.json | 2 +- .../groundtruth/odf_table_with_title_01.ods.json | 2 +- .../data/odf/groundtruth/text_document_01.odt.html | 4 ++-- .../data/odf/groundtruth/text_document_01.odt.json | 2 +- tests/data/odf/groundtruth/text_document_01.odt.md | 4 ++-- .../data/odf/groundtruth/text_document_02.odt.json | 2 +- .../data/odf/groundtruth/text_document_03.odt.html | 8 ++++---- .../data/odf/groundtruth/text_document_03.odt.json | 2 +- tests/data/odf/groundtruth/text_document_03.odt.md | 4 ++-- tests/test_backend_opendocument.py | 6 +++--- 15 files changed, 28 insertions(+), 30 deletions(-) diff --git a/docling/backend/opendocument_backend.py b/docling/backend/opendocument_backend.py index 938636dcd0..83644f4bec 100644 --- a/docling/backend/opendocument_backend.py +++ b/docling/backend/opendocument_backend.py @@ -388,15 +388,13 @@ def _normalize_odf_text_runs(runs: list[_OdfTextRun]) -> list[_OdfTextRun]: merged_runs[-1].text += run.text continue - text = run.text - if merged_runs and merged_runs[-1].hyperlink != run.hyperlink: - # A hyperlink boundary is a hard edge: strip the whitespace right - # at the boundary so it doesn't double up with the separator the - # markdown/inline serializer already inserts between runs. - merged_runs[-1].text = merged_runs[-1].text.rstrip() - text = text.lstrip() + # A hyperlink boundary is not special under the whitespace contract: the + # boundary space stays in whichever plain run owns it, and the serializer + # places it outside the link markup. No stripping here. merged_runs.append( - _OdfTextRun(text=text, formatting=run.formatting, hyperlink=run.hyperlink) + _OdfTextRun( + text=run.text, formatting=run.formatting, hyperlink=run.hyperlink + ) ) while merged_runs and merged_runs[0].text.strip() == "": diff --git a/tests/data/docx/groundtruth/docx_list_blank_spacer.docx.json b/tests/data/docx/groundtruth/docx_list_blank_spacer.docx.json index 31369bfd08..e191244409 100644 --- a/tests/data/docx/groundtruth/docx_list_blank_spacer.docx.json +++ b/tests/data/docx/groundtruth/docx_list_blank_spacer.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_list_blank_spacer", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_list_resumed_numbering.docx.json b/tests/data/docx/groundtruth/docx_list_resumed_numbering.docx.json index 50292cae9b..ded5d7c5ce 100644 --- a/tests/data/docx/groundtruth/docx_list_resumed_numbering.docx.json +++ b/tests/data/docx/groundtruth/docx_list_resumed_numbering.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_list_resumed_numbering", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/docx/groundtruth/docx_page_header_footer_first_page.docx.json b/tests/data/docx/groundtruth/docx_page_header_footer_first_page.docx.json index 7980028428..47584cc1e8 100644 --- a/tests/data/docx/groundtruth/docx_page_header_footer_first_page.docx.json +++ b/tests/data/docx/groundtruth/docx_page_header_footer_first_page.docx.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "docx_page_header_footer_first_page", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", diff --git a/tests/data/odf/groundtruth/odf_presentation_01.odp.json b/tests/data/odf/groundtruth/odf_presentation_01.odp.json index 96559cb204..c90fd5f1c2 100644 --- a/tests/data/odf/groundtruth/odf_presentation_01.odp.json +++ b/tests/data/odf/groundtruth/odf_presentation_01.odp.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "odf_presentation_01", "origin": { "mimetype": "application/vnd.oasis.opendocument.presentation", diff --git a/tests/data/odf/groundtruth/odf_presentation_02.odp.json b/tests/data/odf/groundtruth/odf_presentation_02.odp.json index 7a244a7746..3a43db17c2 100644 --- a/tests/data/odf/groundtruth/odf_presentation_02.odp.json +++ b/tests/data/odf/groundtruth/odf_presentation_02.odp.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "odf_presentation_02", "origin": { "mimetype": "application/vnd.oasis.opendocument.presentation", diff --git a/tests/data/odf/groundtruth/odf_table_with_title_01.ods.json b/tests/data/odf/groundtruth/odf_table_with_title_01.ods.json index eaf90cc5ee..8222e35c4d 100644 --- a/tests/data/odf/groundtruth/odf_table_with_title_01.ods.json +++ b/tests/data/odf/groundtruth/odf_table_with_title_01.ods.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "odf_table_with_title_01", "origin": { "mimetype": "application/vnd.oasis.opendocument.spreadsheet", diff --git a/tests/data/odf/groundtruth/text_document_01.odt.html b/tests/data/odf/groundtruth/text_document_01.odt.html index dd46f975d7..3522452f23 100644 --- a/tests/data/odf/groundtruth/text_document_01.odt.html +++ b/tests/data/odf/groundtruth/text_document_01.odt.html @@ -202,8 +202,8 @@

    Heading level 2: A

    Heading level 2: B

    -Contrary to popular belief, Lorem Ipsum is not simply random text . Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia , looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature , discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" ( The Extremes of Good and Evil ) by Cicero, written in 45 BC. -X 2 + Y 2 = Z +Contrary to popular belief, Lorem Ipsum is not simply random text. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. +X2 + Y2 = Z \ No newline at end of file diff --git a/tests/data/odf/groundtruth/text_document_01.odt.json b/tests/data/odf/groundtruth/text_document_01.odt.json index 16a4a89e1d..117cfa7c3e 100644 --- a/tests/data/odf/groundtruth/text_document_01.odt.json +++ b/tests/data/odf/groundtruth/text_document_01.odt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "text_document_01", "origin": { "mimetype": "application/vnd.oasis.opendocument.text", diff --git a/tests/data/odf/groundtruth/text_document_01.odt.md b/tests/data/odf/groundtruth/text_document_01.odt.md index 41fb18b293..976e18c983 100644 --- a/tests/data/odf/groundtruth/text_document_01.odt.md +++ b/tests/data/odf/groundtruth/text_document_01.odt.md @@ -21,6 +21,6 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots ### Heading level 2: B -Contrary to popular belief, **Lorem Ipsum is not simply random text** . Richard McClintock, *a Latin professor at Hampden-Sydney College in Virginia* , looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature , discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" ( ~~The Extremes of Good and Evil~~ ) by Cicero, written in 45 BC. +Contrary to popular belief, **Lorem Ipsum is not simply random text**. Richard McClintock, *a Latin professor at Hampden-Sydney College in Virginia*, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (~~The Extremes of Good and Evil~~) by Cicero, written in 45 BC. -X 2 + Y 2 = Z \ No newline at end of file +X2 + Y2 = Z \ No newline at end of file diff --git a/tests/data/odf/groundtruth/text_document_02.odt.json b/tests/data/odf/groundtruth/text_document_02.odt.json index 51f98b1924..f184ef7395 100644 --- a/tests/data/odf/groundtruth/text_document_02.odt.json +++ b/tests/data/odf/groundtruth/text_document_02.odt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "text_document_02", "origin": { "mimetype": "application/vnd.oasis.opendocument.text", diff --git a/tests/data/odf/groundtruth/text_document_03.odt.html b/tests/data/odf/groundtruth/text_document_03.odt.html index e7973a727e..db60365cdf 100644 --- a/tests/data/odf/groundtruth/text_document_03.odt.html +++ b/tests/data/odf/groundtruth/text_document_03.odt.html @@ -182,13 +182,13 @@

    Table with rich cells

    This is a formatted list:

    • -B First +B First
    • -B Second +B Second
    • -B Third +B Third

    First Paragraph

    Second Paragraph

    Third paragraph before a numbered list

    @@ -202,7 +202,7 @@

    Table with nested table

    Before table

    Column AColumn B
    Simple cell upper leftSimple cell with bold and italic text
    ABC
    Cell 1Cell 2Cell 3

    Rich cell
    A nested table

    ABC
    Cell 1Cell 2Cell 3
    -After table with bold , underline , strikethrough , and italic formatting +After table with bold, underline, strikethrough, and italic formatting

    Table with pictures

    Column AColumn B
    Only text

    Owner avatar

    Text and picture

    diff --git a/tests/data/odf/groundtruth/text_document_03.odt.json b/tests/data/odf/groundtruth/text_document_03.odt.json index 06adc08f82..b9aa0702a4 100644 --- a/tests/data/odf/groundtruth/text_document_03.odt.json +++ b/tests/data/odf/groundtruth/text_document_03.odt.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "text_document_03", "origin": { "mimetype": "application/vnd.oasis.opendocument.text", diff --git a/tests/data/odf/groundtruth/text_document_03.odt.md b/tests/data/odf/groundtruth/text_document_03.odt.md index fc2e9769d8..c71547aee3 100644 --- a/tests/data/odf/groundtruth/text_document_03.odt.md +++ b/tests/data/odf/groundtruth/text_document_03.odt.md @@ -2,7 +2,7 @@ | Column A | Column B | | - | - | -| This is a list: - A First - A Second - A Third | This is a formatted list: - B **First** - B *Second* - B Third | +| This is a list: - A First - A Second - A Third | This is a formatted list: - B **First** - B *Second* - B Third | | First Paragraph Second Paragraph Third paragraph before a numbered list 1. Number one 2. Number two 3. Number three | This is simple text with bold, strikethrough and italic formatting with x2 and H2O | | This is a paragraph This is another paragraph | | @@ -15,7 +15,7 @@ Before table | Simple cell upper left | Simple cell with bold and italic text | | A B C Cell 1 Cell 2 Cell 3 | Rich cell A nested table A B C Cell 1 Cell 2 Cell 3 | -After table with **bold** , underline , ~~strikethrough~~ , and *italic* formatting +After table with **bold**, underline, ~~strikethrough~~, and *italic* formatting ### Table with pictures diff --git a/tests/test_backend_opendocument.py b/tests/test_backend_opendocument.py index 688b541eb2..3e6a4a1562 100644 --- a/tests/test_backend_opendocument.py +++ b/tests/test_backend_opendocument.py @@ -582,9 +582,9 @@ def test_odt_hyperlink_preserved(tmp_path: Path): ) for item in res.document.texts ] == [ - ("Watch", None), + ("Watch ", None), ("the example talk", "https://example.com/talk"), - ("for context.", None), + (" for context.", None), ] assert res.document.export_to_markdown().strip() == ( "Watch [the example talk](https://example.com/talk) for context." @@ -637,7 +637,7 @@ def test_odt_preserves_hyperlinks_in_block_text( str(item.hyperlink) if item.hyperlink is not None else None, ) for item in inline_items - ] == [("Read", None), ("details", "#details"), ("now", None)] + ] == [("Read ", None), ("details", "#details"), (" now", None)] assert result.document.export_to_markdown().strip() == ( f"{expected_markdown} Read [details](#details) now" ) From 93e30495cc0209794c830e1fd03717d751f16934 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Tue, 18 Aug 2026 15:25:56 +0200 Subject: [PATCH 05/16] build: relock docling-core to the rebased contract branch Re-resolve the docling-core git source to the rebased branch tip (e4e745a, v2.91.0) after both PRs were rebased onto main; the lock previously pinned the pre-rebase commit 66040cb7. Signed-off-by: Christoph Auer --- uv.lock | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/uv.lock b/uv.lock index 0ec6d6ddaf..d914106621 100644 --- a/uv.lock +++ b/uv.lock @@ -26,6 +26,7 @@ resolution-markers = [ [manifest] members = [ "docling", + "docling-client", "docling-slim", ] overrides = [{ name = "grpcio", specifier = ">=1.75.1" }] @@ -1491,7 +1492,7 @@ wheels = [ [[package]] name = "docling" -version = "2.115.0" +version = "2.120.3" source = { editable = "packages/docling" } dependencies = [ { name = "docling-slim", extra = ["standard"] }, @@ -1545,10 +1546,21 @@ requires-dist = [ ] provides-extras = ["easyocr", "tesserocr", "ocrmac", "vlm", "rapidocr", "asr", "htmlrender", "remote-serving", "onnxruntime", "xbrl"] +[[package]] +name = "docling-client" +version = "2.120.3" +source = { editable = "packages/docling-client" } +dependencies = [ + { name = "docling-slim", extra = ["service-client"] }, +] + +[package.metadata] +requires-dist = [{ name = "docling-slim", extras = ["service-client"], editable = "." }] + [[package]] name = "docling-core" -version = "2.87.1" -source = { git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes#66040cb7b96f77699c9d74051500d645e7e758ed" } +version = "2.91.0" +source = { git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes#e4e745a3769f0ee172eb66d11ae1f5c0d4ac5892" } dependencies = [ { name = "defusedxml" }, { name = "doclang" }, @@ -1645,7 +1657,7 @@ wheels = [ [[package]] name = "docling-slim" -version = "2.115.0" +version = "2.120.3" source = { editable = "." } dependencies = [ { name = "certifi" }, @@ -1694,6 +1706,7 @@ all = [ { name = "pypdfium2" }, { name = "python-docx" }, { name = "python-dotenv" }, + { name = "python-oxmsg" }, { name = "python-pptx" }, { name = "qwen-vl-utils" }, { name = "rapidocr" }, @@ -1777,6 +1790,7 @@ format-docx = [ format-email = [ { name = "beautifulsoup4" }, { name = "mail-parser" }, + { name = "python-oxmsg" }, ] format-html = [ { name = "beautifulsoup4" }, @@ -1784,6 +1798,9 @@ format-html = [ format-html-render = [ { name = "playwright" }, ] +format-iwork = [ + { name = "defusedxml" }, +] format-latex = [ { name = "pylatexenc" }, ] @@ -1893,6 +1910,7 @@ standard = [ { name = "pypdfium2" }, { name = "python-docx" }, { name = "python-dotenv" }, + { name = "python-oxmsg" }, { name = "python-pptx" }, { name = "rapidocr" }, { name = "rich" }, @@ -1993,6 +2011,7 @@ requires-dist = [ { name = "arelle-release", marker = "extra == 'format-xml-xbrl'", specifier = ">=2.38.17,<3.0.0" }, { name = "beautifulsoup4", marker = "extra == 'format-html'", specifier = ">=4.12.3,<5.0.0" }, { name = "certifi", specifier = ">=2024.7.4" }, + { name = "defusedxml", marker = "extra == 'format-iwork'", specifier = ">=0.7.1,<0.8.0" }, { name = "defusedxml", marker = "extra == 'format-xml-uspto'", specifier = ">=0.7.1,<0.8.0" }, { name = "defusedxml", marker = "extra == 'models-local'", specifier = ">=0.7.1,<0.8.0" }, { name = "docling-core", git = "https://github.com/docling-project/docling-core?branch=cau%2Fserializer-whitespace-fixes" }, @@ -2006,7 +2025,7 @@ requires-dist = [ { name = "docling-slim", extras = ["format-html"], marker = "extra == 'format-xml-jats'" }, { name = "docling-slim", extras = ["format-html"], marker = "extra == 'format-xml-uspto'" }, { name = "docling-slim", extras = ["format-html", "format-markdown"], marker = "extra == 'format-web'" }, - { name = "docling-slim", extras = ["format-pdf", "models-local", "feat-ocr-rapidocr", "format-office", "format-web", "format-latex", "format-email", "feat-chunking", "extract-core", "service-client", "cli"], marker = "extra == 'standard'" }, + { name = "docling-slim", extras = ["format-pdf", "models-local", "feat-ocr-rapidocr", "format-office", "format-web", "format-latex", "format-email", "format-iwork", "feat-chunking", "extract-core", "service-client", "cli"], marker = "extra == 'standard'" }, { name = "docling-slim", extras = ["format-pdf-pypdfium2", "format-pdf-docling"], marker = "extra == 'format-pdf'" }, { name = "docling-slim", extras = ["standard", "models-vlm-inline", "format-audio", "format-html-render", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "models-remote", "models-onnxruntime", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac"], marker = "extra == 'all'" }, { name = "easyocr", marker = "extra == 'feat-ocr-easyocr'", specifier = ">=1.7,<2.0" }, @@ -2043,6 +2062,7 @@ requires-dist = [ { name = "python-docx", marker = "extra == 'format-docx'", specifier = ">=1.2.0,<2.0.0" }, { name = "python-dotenv", marker = "extra == 'cli'", specifier = "~=1.0" }, { name = "python-dotenv", marker = "extra == 'service-client'", specifier = "~=1.0" }, + { name = "python-oxmsg", marker = "extra == 'format-email'", specifier = ">=0.0.2,<0.1.0" }, { name = "python-pptx", marker = "extra == 'format-pptx'", specifier = ">=1.0.2,<2.0.0" }, { name = "qwen-vl-utils", marker = "extra == 'models-vlm-inline'", specifier = ">=0.0.11" }, { name = "rapidocr", marker = "extra == 'feat-ocr-rapidocr'", specifier = ">=3.9.1,<4.0.0" }, @@ -2066,9 +2086,9 @@ requires-dist = [ { name = "typer", marker = "extra == 'cli'", specifier = ">=0.12.5,<0.27.0" }, { name = "typer", marker = "extra == 'service-client'", specifier = ">=0.12.5,<0.27.0" }, { name = "websockets", marker = "extra == 'service-client'", specifier = ">=14.0,<17.0" }, - { name = "whisper-s2t-reborn", marker = "(platform_machine != 'arm64' and extra == 'format-audio') or (sys_platform != 'darwin' and extra == 'format-audio')", specifier = ">=1.6.3,<2" }, + { name = "whisper-s2t-reborn", marker = "(platform_machine != 'arm64' and extra == 'format-audio') or (sys_platform != 'darwin' and extra == 'format-audio')", specifier = ">=1.7.1,<2.0.0" }, ] -provides-extras = ["convert-core", "extract-core", "format-pdf-pypdfium2", "format-pdf-docling", "format-pdf", "format-docx", "format-pptx", "format-xlsx", "format-office", "format-opendocument", "format-html", "format-markdown", "format-web", "format-latex", "format-email", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "format-html-render", "format-audio", "format-video", "feat-ocr-rapidocr", "feat-ocr-rapidocr-onnx", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac", "feat-ocr-nemotron", "models-local", "models-remote", "models-onnxruntime", "models-vlm-inline", "feat-chunking", "service-client", "cli", "standard", "all"] +provides-extras = ["convert-core", "extract-core", "format-pdf-pypdfium2", "format-pdf-docling", "format-pdf", "format-docx", "format-pptx", "format-xlsx", "format-office", "format-opendocument", "format-html", "format-markdown", "format-web", "format-latex", "format-email", "format-iwork", "format-xml-jats", "format-xml-uspto", "format-xml-xbrl", "format-html-render", "format-audio", "format-video", "feat-ocr-rapidocr", "feat-ocr-rapidocr-onnx", "feat-ocr-easyocr", "feat-ocr-tesserocr", "feat-ocr-mac", "feat-ocr-nemotron", "models-local", "models-remote", "models-onnxruntime", "models-vlm-inline", "feat-chunking", "service-client", "cli", "standard", "all"] [package.metadata.requires-dev] constraints = [ @@ -5310,6 +5330,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/92/e5/2d213680e4e69aa5faebc6b3809a9846ac9f2ffeabb0009042409f8b9f1f/odfdo-3.22.10-py3-none-any.whl", hash = "sha256:235777e3ca7646d72bc18c9705863db138e25f9cf9dd51092450ca620c98786c", size = 401510, upload-time = "2026-07-05T15:14:43.369Z" }, ] +[[package]] +name = "olefile" +version = "0.47" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240, upload-time = "2023-12-01T16:22:53.025Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565, upload-time = "2023-12-01T16:22:51.518Z" }, +] + [[package]] name = "omegaconf" version = "2.3.1" @@ -6892,6 +6921,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, ] +[[package]] +name = "python-oxmsg" +version = "0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "olefile" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/4e/869f34faedbc968796d2c7e9837dede079c9cb9750917356b1f1eda926e9/python_oxmsg-0.0.2.tar.gz", hash = "sha256:a6aff4deb1b5975d44d49dab1d9384089ffeec819e19c6940bc7ffbc84775fad", size = 34713, upload-time = "2025-02-03T17:13:47.415Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/67/f56c69a98c7eb244025845506387d0f961681657c9fcd8b2d2edd148f9d2/python_oxmsg-0.0.2-py3-none-any.whl", hash = "sha256:22be29b14c46016bcd05e34abddfd8e05ee82082f53b82753d115da3fc7d0355", size = 31455, upload-time = "2025-02-03T17:13:46.061Z" }, +] + [[package]] name = "python-pptx" version = "1.0.2" @@ -9820,7 +9863,7 @@ wheels = [ [[package]] name = "whisper-s2t-reborn" -version = "1.6.3" +version = "1.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "av", version = "17.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -9836,9 +9879,9 @@ dependencies = [ { name = "torch", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version != '3.12.*' or platform_machine != 'x86_64' or sys_platform != 'linux'" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/57/6aa04b85b05247ac0617176caa1fb2887ee39a4ea5a8346353caa04b3490/whisper_s2t_reborn-1.6.3.tar.gz", hash = "sha256:1fd58b2b7218923775548a5a12fc3d0988435c146301a7aaf5acf02cc3693a71", size = 1436041, upload-time = "2026-06-25T13:32:36.756Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/b4/1585cee8154c35cef2b8c714dfef1094e33e4e4e1d303a13e5386fcb9e23/whisper_s2t_reborn-1.7.1.tar.gz", hash = "sha256:d2d36693a6a9df5957d2055eb538ce8ef0bd46aa732ef566bc4f6bf63ef362d1", size = 1436892, upload-time = "2026-08-05T01:10:16.869Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/8f/a73573109961f108ecd87338a6a439894912abb9ac642168f85023a1e41b/whisper_s2t_reborn-1.6.3-py3-none-any.whl", hash = "sha256:b8c8562d82851f6125455fa51edd2e6cab3836e3decb15216e40dcd515b4912a", size = 1437499, upload-time = "2026-06-25T13:32:35.3Z" }, + { url = "https://files.pythonhosted.org/packages/7d/20/bd6ef2d24f3da33b347d97ca3751af13fed3e07510db4cb5e27bd6e7ed7d/whisper_s2t_reborn-1.7.1-py3-none-any.whl", hash = "sha256:8a2cc44301091020740f973fd5c7b2804b73a1101bc6271dd27675e028f8d1a3", size = 1437964, upload-time = "2026-08-05T01:10:14.958Z" }, ] [[package]] From e2fd50058004f4902d9544320f56ce4af0047cfd Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:33:24 +0200 Subject: [PATCH 06/16] fix(docx): keep interior whitespace runs in checkbox and skip-empty paragraphs Under the faithful InlineGroup join, whitespace-only runs between other runs are text. `_add_body_text_items` dropped them when `skip_empty_text` was set, and `_clean_checkbox_symbols` stripped every run of a checkbox paragraph, which merged words (`Buy**milk**now`). Clean the checkbox symbol only from the leading edge of the first run and re-trim the block edges. With `skip_empty_text`, skip only a block that is empty as a whole. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/msword_backend.py | 23 +++++++++---- tests/test_backend_msword.py | 56 +++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 87b24a15c9..dab8c113f7 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -2657,10 +2657,11 @@ def _clean_checkbox_symbols(self, text: str) -> str: # Common checkbox symbols in docx documents checkbox_symbols = ["☐", "☑", "☒", "□", "■", "▪", "▫"] - text = text.strip() + # Only the leading edge: the text may be the first of several inline runs. + text = text.lstrip() for symbol in checkbox_symbols: if text.startswith(symbol): - text = text[len(symbol) :].strip() + text = text[len(symbol) :].lstrip() break return text @@ -3313,6 +3314,18 @@ def _add_body_text_items( skip_empty_text: bool, ) -> list[RefItem]: """Add ordinary paragraph text items under the current parent.""" + if checkbox_label and paragraph_elements: + text, formatting, hyperlink = paragraph_elements[0] + first = (self._clean_checkbox_symbols(text), formatting, hyperlink) + paragraph_elements = _trim_run_edges([first, *paragraph_elements[1:]]) or [ + ("", formatting, hyperlink) + ] + # Runs are already edge-trimmed: whitespace-only runs left are interior and significant. + if skip_empty_text and not any( + text.strip() for text, _, _ in paragraph_elements + ): + return [] + level = self._get_level() parent = self._create_or_reuse_parent( doc=doc, @@ -3322,14 +3335,10 @@ def _add_body_text_items( elem_ref: list[RefItem] = [] for text, formatting, hyperlink in paragraph_elements: - clean_text = self._clean_checkbox_symbols(text) if checkbox_label else text - if skip_empty_text and (not clean_text or not clean_text.strip()): - continue - text_item = doc.add_text( label=checkbox_label if checkbox_label else DocItemLabel.TEXT, parent=parent, - text=clean_text, + text=text, formatting=formatting, hyperlink=hyperlink, content_layer=self.content_layer, diff --git a/tests/test_backend_msword.py b/tests/test_backend_msword.py index dc659dd4d4..7bad073531 100644 --- a/tests/test_backend_msword.py +++ b/tests/test_backend_msword.py @@ -15,6 +15,7 @@ CodeItem, ContentLayer, DocItemLabel, + Formatting, GroupItem, ListGroup, ListItem, @@ -30,6 +31,7 @@ from docx.shared import Inches from lxml import etree from PIL import Image +from pydantic import AnyUrl import docling.backend.msword_backend as msword_backend_module from docling.backend.docx.drawingml.utils import get_libreoffice_cmd @@ -1546,6 +1548,60 @@ def test_checkbox_labels_in_tables(documents): ), "No checkboxes found in table cells" +def test_checkbox_paragraph_keeps_interior_run_whitespace(tmp_path): + """Only the leading checkbox symbol and the block edges are stripped (docling#3891).""" + document = Document() + para = document.add_paragraph() + sdt = etree.SubElement(para._p, qn("w:sdt")) + sdt_pr = etree.SubElement(sdt, qn("w:sdtPr")) + etree.SubElement( + sdt_pr, "{http://schemas.microsoft.com/office/word/2010/wordml}checkbox" + ) + para.add_run("☐ Buy ") + para.add_run("milk").bold = True + para.add_run(" now ") + + doc = _convert_built(document, tmp_path) + + runs = [ + item for item in doc.texts if item.label == DocItemLabel.CHECKBOX_UNSELECTED + ] + assert [run.text for run in runs] == ["Buy ", "milk", " now"] + + +def test_skip_empty_text_keeps_interior_whitespace_runs(tmp_path): + """A whitespace-only run between two runs is text; only an all-empty block is skipped.""" + document = Document() + document.add_paragraph("x") + path = tmp_path / "case.docx" + document.save(str(path)) + backend = InputDocument( + path_or_stream=path, format=InputFormat.DOCX, backend=MsWordDocumentBackend + )._backend + + doc = DoclingDocument(name="test") + elements = [ + ("See ", None, None), + ("docs", None, AnyUrl("https://example.com/")), + (" ", None, None), + ("now", Formatting(bold=True), None), + ] + backend._add_body_text_items( + doc=doc, paragraph_elements=elements, checkbox_label=None, skip_empty_text=True + ) + assert [item.text for item in doc.texts] == ["See ", "docs", " ", "now"] + + empty = DoclingDocument(name="empty") + refs = backend._add_body_text_items( + doc=empty, + paragraph_elements=[("", None, None)], + checkbox_label=None, + skip_empty_text=True, + ) + assert refs == [] + assert empty.texts == [] + + def test_text_after_drawingml_images(documents): """Text in paragraphs containing DrawingML images was being omitted during conversion, both with and without LibreOffice.""" name = "drawingml.docx" From a28b628e53f42efa2149d465554b9272226aa7aa Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:35:02 +0200 Subject: [PATCH 07/16] fix(pptx): keep whitespace between inline OMML formulas The OMML paragraph path dropped every whitespace-only text fragment, so `Let $a$ $b$ hold.` became `Let $a$$b$ hold.` under the faithful InlineGroup join, and the list path kept untrimmed block edges. Trim only the outer edges of the fragment sequence in both paths and keep interior whitespace fragments. Without an inline group the formulas stay separate blocks, as before. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/mspowerpoint_backend.py | 23 +++++++++++++++++++--- tests/test_backend_pptx_math.py | 26 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/docling/backend/mspowerpoint_backend.py b/docling/backend/mspowerpoint_backend.py index 0452e02168..7933589299 100644 --- a/docling/backend/mspowerpoint_backend.py +++ b/docling/backend/mspowerpoint_backend.py @@ -201,6 +201,22 @@ def _paragraph_fragments(element: etree._Element) -> list[tuple[DocItemLabel, st return fragments +def _trim_fragment_edges( + fragments: list[tuple[DocItemLabel, str]], +) -> list[tuple[DocItemLabel, str]]: + """Trim only the outer edges of a fragment sequence; interior whitespace is text. + + Formulas are already stripped and text fragments never touch each other, so only + a text fragment at either end needs trimming. + """ + fragments = list(fragments) + if fragments and fragments[0][0] != DocItemLabel.FORMULA: + fragments[0] = (fragments[0][0], fragments[0][1].lstrip()) + if fragments and fragments[-1][0] != DocItemLabel.FORMULA: + fragments[-1] = (fragments[-1][0], fragments[-1][1].rstrip()) + return [fragment for fragment in fragments if fragment[1]] + + _SAFE_XML_PARSER: Final = etree.XMLParser( resolve_entities=False, load_dtd=False, @@ -1060,7 +1076,7 @@ def _handle_text_elements( inline_group = doc.add_inline_group( parent=current.last_item, content_layer=content_layer ) - for label, text in fragments: + for label, text in _trim_fragment_edges(fragments): doc.add_text( label=label, parent=inline_group, @@ -1101,8 +1117,9 @@ def _handle_text_elements( if has_text else fragment_parent ) - for label, text in fragments: - if text.strip(): + for label, text in _trim_fragment_edges(fragments): + # Without an inline group the formulas are separate blocks. + if has_text or label == DocItemLabel.FORMULA: doc.add_text( label=label, parent=parent, diff --git a/tests/test_backend_pptx_math.py b/tests/test_backend_pptx_math.py index 0eb86c3561..610742fd53 100644 --- a/tests/test_backend_pptx_math.py +++ b/tests/test_backend_pptx_math.py @@ -112,3 +112,29 @@ def test_inline_equation_retains_the_title_label() -> None: assert title.children assert "Energy" in doc.export_to_markdown() assert "E=mc^2" in doc.export_to_markdown() + + +def _equation(text: str) -> str: + return f"{text}" + + +@pytest.mark.parametrize("listed", [False, True]) +def test_whitespace_between_inline_equations_is_kept(listed: bool) -> None: + """Only the block edges are trimmed; the space between two formulas is text.""" + properties = '' if listed else "" + doc = _convert_paragraph( + properties + + " Let " + + _equation("a") + + " " + + _equation("b") + + " hold. " + ) + + runs = [ + item.text + for item in doc.texts + if item.label in (DocItemLabel.TEXT, DocItemLabel.FORMULA) + ] + assert runs == ["Let ", "a", " ", "b", " hold."] + assert ("- " if listed else "") + "Let $a$ $b$ hold." in doc.export_to_markdown() From d17dd90496997b419d1430ad11debf04f42ed404 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:42:50 +0200 Subject: [PATCH 08/16] fix(html): keep
    between inline runs and collapse caption whitespace Under the faithful InlineGroup join, a list item or
     run that held
    only 
    tags was dropped, so `
  • Bold
    italic
  • ` became `**Bold***italic*`. Keep it as a plain "\n" run between its neighbours (never inside a code run); the serializers render it as a hard line break (`**Bold** \n*italic*`, `
    `). A
    at an edge of a list item is a block edge and is trimmed, also when it ends the last run. `_emit_caption` joined runs without collapsing their boundary whitespace, which gave double spaces; normalize the runs first, as the figure caption path does. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/html_backend.py | 40 +++++++++++++++------ tests/test_backend_html.py | 63 +++++++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 14 deletions(-) diff --git a/docling/backend/html_backend.py b/docling/backend/html_backend.py index 30953059ab..ef9d2158b9 100644 --- a/docling/backend/html_backend.py +++ b/docling/backend/html_backend.py @@ -3016,11 +3016,21 @@ def _add_list_item_with_content( with self._use_inline_group(min_parts, doc): compacted_parts = self._compact_adjacent_single_char_parts(min_parts) - for annotated_text, source_tag_ids in compacted_parts: - # Already normalized as one block above -- no per-run strip. - text_part = _resolve_line_breaks(annotated_text.text) - if _BR_SENTINEL in annotated_text.text and not text_part.strip(): - # The part only held
    tags + # Already normalized as one block above -- no per-run strip. A
    is not + # whitespace there, so it can still sit at an edge of the item: trim it. + text_parts = [ + _resolve_line_breaks(annotated_text.text) + for annotated_text, _ in compacted_parts + ] + non_blank = [i for i, text in enumerate(text_parts) if text.strip()] + first, last = non_blank[0], non_blank[-1] + text_parts[first] = text_parts[first].lstrip() + text_parts[last] = text_parts[last].rstrip() + for i, (annotated_text, source_tag_ids) in enumerate(compacted_parts): + text_part = text_parts[i] + # A run that only held
    tags stays as a "\n" run between its + # neighbours; dropping it merged them (`**Bold***italic*`). + if not text_part or not first <= i <= last: continue clean_text = HTMLDocumentBackend._clean_unicode(text_part) @@ -3604,16 +3614,24 @@ def _handle_block(self, tag: Tag, doc: DoclingDocument) -> list[RefItem]: # noq ) language_hint = self._code_language_hint(tag) with self._use_inline_group(annotated_texts, doc) as inline_ref: - for annotated_text in annotated_texts: + for i, annotated_text in enumerate(annotated_texts): # In preformatted text, each
    is a newline. No strip: the block # edges are trimmed above and every interior space is significant. text_orig = re.sub( rf" ?{_BR_SENTINEL} ?", "\n", annotated_text.text ) - if not text_orig or ( - _BR_SENTINEL in annotated_text.text and not text_orig.strip() - ): - # Empty, or the run only held
    tags + if not text_orig: + continue + if _BR_SENTINEL in annotated_text.text and not text_orig.strip(): + # The run only held
    tags. Between two runs it is a line break, + # as a plain run: whitespace never goes inside a code run. + if 0 < i < len(annotated_texts) - 1: + doc.add_text( + parent=self.parents[self.level], + label=DocItemLabel.TEXT, + text="\n", + content_layer=self.content_layer, + ) continue text_clean = HTMLDocumentBackend._clean_unicode(text_orig) prov = self._make_prov( @@ -5280,7 +5298,7 @@ def _emit_caption( cap_list = self._extract_text_and_hyperlink_recursively( caption_tag, find_parent_annotation=True ) - cap_anno = cap_list.to_single_text_element() + cap_anno = cap_list.normalize_whitespace().to_single_text_element() if not cap_anno.text or not cap_anno.text.strip(): return None diff --git a/tests/test_backend_html.py b/tests/test_backend_html.py index 34c9dbbb2a..9b689eac19 100644 --- a/tests/test_backend_html.py +++ b/tests/test_backend_html.py @@ -2545,7 +2545,9 @@ def test_html_newline_handling(): def test_html_line_break_outside_paragraphs(): # A
    outside a paragraph or a table cell, e.g. in a heading or a list # item, left the internal sentinel (U+E000) in the text. It is now a line - # break, as in a paragraph. The text of a checkbox stays on one line. + # break, as in a paragraph. The text of a checkbox stays on one line. A
    + # between two inline runs is a "\n" run of its own: runs are joined with "", + # so dropping it merged the words (docling#3891). src = ( b"" b"

    Title
    line

    " @@ -2572,8 +2574,9 @@ def test_html_line_break_outside_paragraphs(): "Title\nline", "Heading\nline", "Item\nline", - "", # the list item with formatting: its text is in the two runs below + "", # the list item with formatting: its text is in the three runs below "Bold", + "\n", "italic", "Term\nline", "Definition\nline", @@ -2581,11 +2584,65 @@ def test_html_line_break_outside_paragraphs(): "Figure\nline", "Code\nline", "bold", + "\n", "code", "Task line", ] assert not any(_BR_SENTINEL in item.orig for item in doc.texts) - assert "## Heading line" in doc.export_to_markdown() + markdown = doc.export_to_markdown() + assert "## Heading line" in markdown + assert "- **Bold** \n*italic*\n" in markdown + assert "**`bold`** \n*`code`*" in markdown + + +def test_html_line_break_at_list_item_edge_is_trimmed(): + # A
    at the start or end of a list item is a block edge, not a line break. + src = ( + b"
      " + b"

    • Bold italic
    • " + b"
    • plain Bold
      tail
    • " + b"
    " + ) + in_doc = InputDocument( + path_or_stream=BytesIO(src), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="t.html", + ) + doc = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(src)).convert() + + assert [item.text for item in doc.texts] == [ + "", + "Bold ", + "italic", + "", + "plain ", + "Bold", + "\ntail", + ] + assert doc.export_to_markdown() == "- **Bold** *italic*\n- plain **Bold** \ntail" + + +def test_html_caption_collapses_whitespace_across_runs(): + # Caption runs are joined faithfully, so boundary whitespace from several runs must + # collapse to one space first, as in a paragraph. + src = ( + b"" + b"
    A table caption
    x
    " + b"
    y
    " + b"
    A figure caption
    " + b"" + ) + in_doc = InputDocument( + path_or_stream=BytesIO(src), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="t.html", + ) + doc = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(src)).convert() + + captions = [item.text for item in doc.texts if item.label == DocItemLabel.CAPTION] + assert captions == ["A table caption", "A figure caption"] def test_gfm_task_list_renders_checkbox_with_text(): From 131a614b4ae922f55d8c4678683ed462897b2394 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:38:22 +0200 Subject: [PATCH 09/16] fix(chandra): keep inline run boundary whitespace The shared Chandra HTML mapper (also used by dots.ocr and Nemotron Parse) stripped every inline run and relied on docling-core's " " join, so a faithful-join core merges words ("**Rent**and terms"). Keep each run's boundary whitespace, collapse a boundary to one space carried by the left run, and trim only the block's outer edges. Edge whitespace of a code or formula element moves out into a plain " " run, so a boundary space never lands inside them. A
    at a run edge now stays where it is, since core hoists edge whitespace outside the emphasis markers; multi-run headings collapse whitespace without trimming. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/utils/chandra_utils.py | 60 +++++++++++++------------- tests/test_chandra_vlm.py | 70 +++++++++++++++++++++++++------ tests/test_nemotron_parse_v3_5.py | 5 ++- 3 files changed, 93 insertions(+), 42 deletions(-) diff --git a/docling/utils/chandra_utils.py b/docling/utils/chandra_utils.py index ece606d134..37e7180935 100644 --- a/docling/utils/chandra_utils.py +++ b/docling/utils/chandra_utils.py @@ -274,14 +274,6 @@ class _Run: formatting: Formatting = field(default_factory=Formatting) hyperlink: AnyUrl | Path | None = None - @property - def plain(self) -> bool: - return ( - self.label == DocItemLabel.TEXT - and self.formatting == Formatting() - and self.hyperlink is None - ) - @dataclass class _Provenance: @@ -339,7 +331,13 @@ def _inline_runs( text = "" if kind in {"checkbox", "radio"} else node.text() yield _Run(text, label, formatting, hyperlink) elif label is not None: - yield _Run(node.text().strip(), label, formatting, hyperlink) + # A boundary space never goes inside a code or formula run: move it out. + text = node.text() + if text[:1].isspace(): + yield _Run(" ", formatting=formatting, hyperlink=hyperlink) + yield _Run(text.strip(), label, formatting, hyperlink) + if text.strip() and text[-1:].isspace(): + yield _Run(" ", formatting=formatting, hyperlink=hyperlink) elif node.tag == "br": yield _Run("\n", formatting=formatting, hyperlink=hyperlink) elif node.tag not in {"script", "style", "head"}: @@ -393,6 +391,12 @@ def _emit_runs( ) -> None: merged: list[_Run] = [] for run in runs: + if run.label == DocItemLabel.TEXT and merged: + if merged[-1].text[-1:].isspace(): + # HTML collapses a boundary to one space; the left run carries it. + run.text = run.text.lstrip(" \t") + if not run.text: + continue if ( merged and run.label == merged[-1].label == DocItemLabel.TEXT @@ -406,34 +410,34 @@ def _emit_runs( DocItemLabel.SECTION_HEADER, DocItemLabel.TITLE, } + # A break inside one run of a multi-run heading would end the heading line. + collapse = heading and len(merged) > 1 runs, merged = merged, [] - line_break = False for run in runs: - edges = run.text.strip(" \t") - run.text = run.text.strip() - is_text = run.label == DocItemLabel.TEXT - line_break = line_break or (is_text and edges.startswith("\n")) + if run.label != DocItemLabel.TEXT: + # Code, formula and field runs never own boundary whitespace. + run.text = run.text.strip() + elif collapse: + run.text = re.sub(r"\s+", " ", run.text) if not run.text and run.label not in { DocItemLabel.FIELD_VALUE, DocItemLabel.CHECKBOX_SELECTED, DocItemLabel.CHECKBOX_UNSELECTED, }: continue - if line_break and merged and not heading: - # shortcut: a break next to a formatted run or in a heading becomes a - # space: docling-core's Markdown puts run edge whitespace inside the - # emphasis markers ("** \nX**"). Upgrade when it emits that outside - # them and joins heading lines: then always carry it to the next run. - if run.plain: - run.text = "\n" + run.text - elif merged[-1].plain: - merged[-1].text += "\n" - line_break = is_text and edges.endswith("\n") merged.append(run) - if heading and len(merged) > 1: - # A break inside one run of a multi-run heading would end the heading line. - for run in merged: - run.text = " ".join(run.text.split()) + # Runs keep their boundary whitespace (docling-core joins them with ""); only the + # block's outer edges are trimmed. + while merged and merged[0].label == DocItemLabel.TEXT: + merged[0].text = merged[0].text.lstrip() + if merged[0].text: + break + merged.pop(0) + while merged and merged[-1].label == DocItemLabel.TEXT: + merged[-1].text = merged[-1].text.rstrip() + if merged[-1].text: + break + merged.pop() if not merged: return before = len(self.doc.texts) diff --git a/tests/test_chandra_vlm.py b/tests/test_chandra_vlm.py index b54f79a1b5..eafbd2a777 100644 --- a/tests/test_chandra_vlm.py +++ b/tests/test_chandra_vlm.py @@ -63,19 +63,63 @@ def test_chandra_simple_parsing(): @pytest.mark.parametrize( - ("label", "html", "texts"), + ("label", "html", "texts", "markdown"), [ - ("Text", "Hello
    World", ["Hello\nWorld"]), - # A break between runs goes to a plain run; outer breaks are dropped. - ("Text", "
    Hello
    World", ["Hello\n", "World"]), - ("Text", "Hello
    World
    ", ["Hello", "\nWorld"]), - ("Text", "Hello
    World", ["Hello", "World"]), - ("Section-Header", "Hello
    World", ["", "Hello", "World"]), - ("Section-Header", "Hello big
    World", ["", "Hello", "big World"]), + ("Text", "Hello
    World", ["Hello\nWorld"], "Hello \nWorld"), + # Runs keep their boundary whitespace; only the block's outer edges are trimmed. + ( + "Text", + "
    Hello
    World", + ["Hello\n", "World"], + "Hello \n**World**", + ), + ( + "Text", + "Hello
    World
    ", + ["Hello", "\nWorld"], + "**Hello** \nWorld", + ), + ( + "Text", + "Hello
    World", + ["Hello", " \n", "World"], + "**Hello** \n**World**", + ), + ( + "Section-Header", + "Hello
    World", + ["", "Hello", " World"], + "## **Hello** World", + ), + ( + "Section-Header", + "Hello big
    World", + ["", "Hello", " big World"], + "## **Hello** big World", + ), + # A boundary space never goes inside a code or formula run. + ( + "Text", + "Install with pip install x first.", + ["Install with ", "pip install x", " first."], + "Install with `pip install x` first.", + ), + ( + "Text", + "A bold it x y end", + ["A ", "bold ", "it", " ", "x", " ", "y", " end"], + "A **bold** *it* $x$ $y$ end", + ), + ( + "Text", + "Run make now, then rest", + ["Run ", "make", " now, ", "then ", "rest"], + "Run `make` now, **then** *rest*", + ), ], ) -def test_chandra_br_spacing(label: str, html: str, texts: list[str]): - """Test that br tags preserve spacing between text.""" +def test_chandra_br_spacing(label: str, html: str, texts: list[str], markdown: str): + """Test that br tags and run boundaries keep their whitespace.""" content = f'
    {html}
    ' doc = parse_chandra_html( @@ -86,6 +130,7 @@ def test_chandra_br_spacing(label: str, html: str, texts: list[str]): ) assert [item.text for item in doc.texts] == texts + assert doc.export_to_markdown() == markdown def test_chandra_multiblock_parsing(): @@ -597,10 +642,11 @@ def test_chandra_equation_block_with_prose_becomes_text(): "1. Compute \\int_0^1 x\\,dx .", "Equation-Block" ) assert [(t.label, t.text) for t in doc.texts] == [ - (DocItemLabel.TEXT, "1. Compute"), + (DocItemLabel.TEXT, "1. Compute "), (DocItemLabel.FORMULA, "\\int_0^1 x\\,dx"), - (DocItemLabel.TEXT, "."), + (DocItemLabel.TEXT, " ."), ] + assert doc.export_to_markdown() == "1. Compute $\\int_0^1 x\\,dx$ ." dclg = doc.export_to_doclang() assert dclg.count("") == 1 assert dclg.count(" None: group = parent.children[0].resolve(doc) assert isinstance(group, InlineGroup) runs = [child.resolve(doc) for child in group.children] - assert [run.text for run in runs] == ["Mass is", "heavy", "in m", "2"] + assert [run.text for run in runs] == ["Mass is ", "heavy", " in m", "2"] assert runs[1].formatting is not None and runs[1].formatting.bold assert runs[3].formatting is not None assert runs[3].formatting.script == Script.SUPER + assert doc.export_to_markdown() == "Mass is **heavy** in m2" def test_caption_links_to_adjacent_table() -> None: @@ -341,7 +342,7 @@ def test_page_header_and_formatted_page_footer_are_furniture() -> None: furniture = [ item.text for item in doc.texts if item.content_layer == ContentLayer.FURNITURE ] - assert furniture == ["Journal of Tests", "", "Page", "4"] + assert furniture == ["Journal of Tests", "", "Page ", "4"] assert "Journal of Tests" not in doc.export_to_markdown() assert doc.export_to_markdown() == "Body" From 46dbadc45ae9534466930b32d6d6fd4e744aec64 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:40:18 +0200 Subject: [PATCH 10/16] fix(md): keep boundary whitespace in rich table-cell runs _iterate_cell_inline stripped every RawText run of a GFM rich cell, so a faithful-join docling-core merges words ("**C**Cadre", "run`build`now"). Keep the raw fragment like the paragraph path does: marko already trims the cell edges, and whitespace-only runs between formatted runs are kept. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/md_backend.py | 4 +++- tests/test_backend_markdown.py | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docling/backend/md_backend.py b/docling/backend/md_backend.py index d5d6dd8a2f..86298eae96 100644 --- a/docling/backend/md_backend.py +++ b/docling/backend/md_backend.py @@ -544,7 +544,9 @@ def _iterate_cell_inline( elif isinstance(element, marko.inline.RawText | marko.inline.Literal): raw = element.children if isinstance(element.children, str) else "" - text = unescape(raw.strip()) + # Keep the raw fragment: its edge whitespace is the run boundary. Marko has + # already trimmed the cell edges, and whitespace-only runs are significant. + text = unescape(raw) if text: item = doc.add_text( label=DocItemLabel.TEXT, diff --git a/tests/test_backend_markdown.py b/tests/test_backend_markdown.py index 45db4760d1..1b029f21aa 100644 --- a/tests/test_backend_markdown.py +++ b/tests/test_backend_markdown.py @@ -1012,6 +1012,42 @@ def test_convert_table_cell_whitespace_around_inline_emphasis(): ] +def test_rich_table_cell_runs_keep_boundary_whitespace(): + """Rich-cell runs carry their own boundary whitespace; only the cell edges are trimmed.""" + from docling_core.types.doc import RichTableCell + + markdown = ( + "| Cell | Note |\n" + "|---|---|\n" + "| **C** Cadre | x |\n" + "| **A** **B** | y |\n" + "| Install with `pip install x` first. | z |\n" + ) + doc = get_converter().convert_string(markdown, format=InputFormat.MD).document + + runs = [ + [ + ref.resolve(doc).text + for ref in cell.ref.resolve(doc).children[0].resolve(doc).children + ] + for cell in doc.tables[0].data.table_cells + if isinstance(cell, RichTableCell) + ] + assert runs == [ + ["C", " Cadre"], + ["A", " ", "B"], + ["Install with ", "pip install x", " first."], + ] + rows = [ + line.split("|")[1].strip() for line in doc.export_to_markdown().splitlines() + ] + assert rows[2:] == [ + "**C** Cadre", + "**A** **B**", + "Install with `pip install x` first.", + ] + + def test_line_break_does_not_cross_block_boundary(): """A line break only joins runs of its own paragraph. From 9f7ff7a06b2e9ee1afc27aa52a08900bfdd914cc Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 14:42:51 +0200 Subject: [PATCH 11/16] fix(asciidoc): keep inline run boundary whitespace _flush_text_data stripped every inline run and relied on docling-core's " " join, so a faithful-join core merges words ("Some**bold**,"). Keep each run's boundary whitespace and trim only the block's outer edges. A code run's edge whitespace (possible in ``unconstrained`` spans) moves out into a plain " " run, so it never lands inside the code delimiters. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/asciidoc_backend.py | 30 +++++++++++++----- tests/test_backend_asciidoc.py | 49 ++++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 11 deletions(-) diff --git a/docling/backend/asciidoc_backend.py b/docling/backend/asciidoc_backend.py index b44ebdf16f..04d8a01913 100644 --- a/docling/backend/asciidoc_backend.py +++ b/docling/backend/asciidoc_backend.py @@ -4,7 +4,7 @@ import logging import re from collections.abc import Iterator -from dataclasses import dataclass +from dataclasses import dataclass, replace from io import BytesIO from pathlib import Path from typing import Final, Optional, Union @@ -839,16 +839,32 @@ def _flush_text_data( return [] # Mixed formatting needs one item per run, kept together in an inline # group like the Markdown backend does. - group = doc.add_inline_group(parent=parent) + # Runs keep their boundary whitespace (docling-core joins them with ""); a + # code run's edge whitespace moves out into a plain " " run of its own. + spaced: list[_InlineRun] = [] for run in runs: - run_text = run.text.strip() - if not run_text: - continue + core = run.text.strip() if run.code else run.text + if run.code and run.text[:1].isspace(): + spaced.append(_InlineRun(" ")) + if core: + spaced.append(replace(run, text=core)) + if run.code and core and run.text[-1:].isspace(): + spaced.append(_InlineRun(" ")) + # Only the block's outer edges are trimmed. + while spaced and not spaced[0].text.strip(): + spaced.pop(0) + while spaced and not spaced[-1].text.strip(): + spaced.pop() + if spaced: + spaced[0] = replace(spaced[0], text=spaced[0].text.lstrip()) + spaced[-1] = replace(spaced[-1], text=spaced[-1].text.rstrip()) + group = doc.add_inline_group(parent=parent) + for run in spaced: if run.code: - doc.add_code(text=run_text, parent=group) + doc.add_code(text=run.text, parent=group) else: doc.add_text( - text=run_text, + text=run.text, label=DocItemLabel.TEXT, parent=group, formatting=( diff --git a/tests/test_backend_asciidoc.py b/tests/test_backend_asciidoc.py index ad2f727992..7742491b3c 100644 --- a/tests/test_backend_asciidoc.py +++ b/tests/test_backend_asciidoc.py @@ -879,9 +879,26 @@ def test_inline_formatting_in_paragraphs() -> None: "both": (True, True), } assert [item.text for item in doc.texts if isinstance(item, CodeItem)] == ["mono"] - plain = [item.text for item in doc.texts if item.formatting is None] - assert "and snake_case_name and 2*3*4." in plain - assert "No marks here." in plain + # Runs carry their own boundary whitespace; only the block edges are trimmed. + assert [item.text for item in doc.texts] == [ + "Some ", + "bold", + ", ", + "italic", + " and ", + "mono", + " text, with ", + "st", + "rong.", + "both", + " and snake_case_name and 2*3*4.", + "No marks here.", + ] + assert doc.export_to_markdown() == ( + "Some **bold**, *italic* and `mono` text, with **st**rong.\n\n" + "***both*** and snake\\_case\\_name and 2*3*4.\n\n" + "No marks here." + ) def test_inline_formatting_marks_and_spans() -> None: @@ -905,10 +922,34 @@ def test_inline_formatting_marks_and_spans() -> None: assert styled == [ ("ui", False, True), ("a b c", True, False), - ("bold", True, False), + ("bold ", True, False), ("and italic", True, True), ] assert [item.text for item in doc.texts if isinstance(item, CodeItem)] == ["um"] + assert doc.export_to_markdown() == ( + "Text with *ui*, `um` and **a b c** marks.\n\n" + "Nested **bold** ***and italic*** text." + ) + + +def test_code_run_edge_whitespace_stays_outside_the_code() -> None: + doc = DoclingDocument(name="code-edges") + AsciiDocBackend._flush_text_data( + doc=doc, + text_data=["Install with `pip install x` first, x`` a ``y."], + parent=None, + ) + + assert [item.text for item in doc.texts] == [ + "Install with ", + "pip install x", + " first, x", + " ", + "a", + " ", + "y.", + ] + assert doc.export_to_markdown() == "Install with `pip install x` first, x `a` y." @pytest.mark.parametrize("mark", ["*", "_", "`"]) From 2424725a6b663345c57ec9e8cb058205e39e5df4 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Mon, 26 Oct 2026 09:06:34 +0100 Subject: [PATCH 12/16] test: pin the host-text boundary before a leading inline group Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- tests/test_backend_boxnote.py | 27 +++++++++++++++++++++++++++ tests/test_chandra_vlm.py | 6 ++++++ 2 files changed, 33 insertions(+) diff --git a/tests/test_backend_boxnote.py b/tests/test_backend_boxnote.py index db7754f43b..41521e5b02 100644 --- a/tests/test_backend_boxnote.py +++ b/tests/test_backend_boxnote.py @@ -119,6 +119,33 @@ def _linked_paragraph(href) -> dict: } +def test_list_item_text_keeps_boundary_before_rich_paragraph(): + # The item text is one more run before its leading inline group (joined with ""). + def run(text: str, mark: str | None = None) -> dict: + return { + "type": "text", + "text": text, + **({"marks": [{"type": mark}]} if mark else {}), + } + + item = { + "type": "list_item", + "content": [ + {"type": "paragraph", "content": [run("Intro")]}, + { + "type": "paragraph", + "content": [run("more "), run("x", "strong"), run(" y")], + }, + ], + } + payload = { + "doc": {"type": "doc", "content": [{"type": "bullet_list", "content": [item]}]} + } + doc = get_converter().convert(_boxnote_stream(payload)).document + + assert doc.export_to_markdown() == "- Intro more **x** y" + + def test_safe_hyperlink_is_kept(): doc = ( get_converter() diff --git a/tests/test_chandra_vlm.py b/tests/test_chandra_vlm.py index eafbd2a777..1a52b5b298 100644 --- a/tests/test_chandra_vlm.py +++ b/tests/test_chandra_vlm.py @@ -363,6 +363,12 @@ def test_chandra_nested_lists_preserve_parent_order_and_markers(): assert doc.validate_tree(doc.body) +def test_chandra_list_item_text_keeps_boundary_before_inline_paragraph(): + # The item text is one more run before its leading inline group (joined with ""). + doc = _parse_fragment("
    • Intro

      more x y

    ", "List-Group") + assert doc.export_to_markdown() == "- Intro more **x** y" + + def test_chandra_paragraph_list_and_form_controls(): doc = _parse_fragment( "

    Yes

    No

    ", From 6100cf8e9041a783c2144947a1fc4d25127768bd Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 15:01:00 +0200 Subject: [PATCH 13/16] fix(html): keep the word boundary at a block child of a list item A list item's text is extracted from all its non-list descendants. Under the faithful run join, the text before a block child and the block's own text were concatenated, so `
    • a

      para

    • b
    ` exported `- apara`. A block child (`_PARA_BREAKERS`) is now a word boundary: a space is added at its edges unless the source already has whitespace there, and normalize_whitespace() collapses it and moves it out of code runs. Preformatted extraction is unchanged. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/html_backend.py | 23 ++++++++++++++++++++--- tests/test_backend_html.py | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/docling/backend/html_backend.py b/docling/backend/html_backend.py index ef9d2158b9..f6efefbb53 100644 --- a/docling/backend/html_backend.py +++ b/docling/backend/html_backend.py @@ -2584,6 +2584,8 @@ def _extract_text_and_hyperlink_recursively( return AnnotatedTextList() if self._is_checkbox_label_tag(tag): return AnnotatedTextList() + # Indexes in `result` where a block child starts or ends: a word boundary. + block_edges: set[int] = set() if not ignore_list or (tag.name not in ["ul", "ol", "dl", "table"]): for child in tag: if isinstance(child, Tag) and child.name in _FORMAT_TAG_MAP: @@ -2602,10 +2604,25 @@ def _extract_text_and_hyperlink_recursively( ) else: # Recursively get the child's text content - result.extend( - self._extract_text_and_hyperlink_recursively( - child, ignore_list, keep_newlines=keep_newlines + child_result = self._extract_text_and_hyperlink_recursively( + child, ignore_list, keep_newlines=keep_newlines + ) + if isinstance(child, Tag) and child.name in _PARA_BREAKERS: + block_edges.update( + (len(result), len(result) + len(child_result)) ) + result.extend(child_result) + if not keep_newlines: + # `
  • a

    para

    ` is "a para": keep the boundary unless the source already + # has whitespace there (normalize_whitespace() moves it out of code runs). + for i in sorted(block_edges): + if ( + 0 < i < len(result) + and not result[i - 1].text[-1:].isspace() + and not result[i].text[:1].isspace() + ): + result[i - 1] = result[i - 1].model_copy( + update={"text": result[i - 1].text + " "} ) return result diff --git a/tests/test_backend_html.py b/tests/test_backend_html.py index 9b689eac19..e68b50d998 100644 --- a/tests/test_backend_html.py +++ b/tests/test_backend_html.py @@ -2595,6 +2595,28 @@ def test_html_line_break_outside_paragraphs(): assert "**`bold`** \n*`code`*" in markdown +def test_block_child_of_list_item_is_a_word_boundary(): + # The list item text and its block child are separate words; source whitespace stays single. + src = ( + b"
      " + b"
    • Intro

      more x y

    • " + b"
    • A b
      c d
      tail
    • " + b"
    • e

      f

      g
    • " + b"
    " + ) + in_doc = InputDocument( + path_or_stream=BytesIO(src), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="t.html", + ) + doc = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(src)).convert() + + assert doc.export_to_markdown() == ( + "- Intro more **x** y\n- **A** b c *d* tail\n- e f g" + ) + + def test_html_line_break_at_list_item_edge_is_trimmed(): # A
    at the start or end of a list item is a block edge, not a line break. src = ( From 53d8fc8c7daf0f758729fc76c5734f3482a54dca Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 15:11:45 +0200 Subject: [PATCH 14/16] test: move stale run expectations to the inline whitespace contract These tests still expected stripped runs or the double spaces of the old " " join. Each new value was checked against the contract: boundary whitespace sits on the plain neighbour (never inside a code or formula run), a soft break before a code span is a plain " " run, and the exports read `*one* two`, `Value $x=1$`, `Already in `Reference/``. - html: test_text_directly_inside_figure_is_kept (2 cases), test_orig_keeps_source_text, test_link_and_image_outside_base_directory_keep_conversion - msword: test_docx_hidden_text_next_to_equations (no double space before $x=1$) - md: test_convert_line_breaks ("Author "), test_convert_line_break_next_to_code_span, test_line_break_does_not_cross_block_boundary (" " run before the code span) Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- tests/test_backend_html.py | 9 ++++--- tests/test_backend_markdown.py | 38 +++++++++++++++++++++++------ tests/test_backend_msword_hidden.py | 4 +-- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/tests/test_backend_html.py b/tests/test_backend_html.py index e68b50d998..f453ef2325 100644 --- a/tests/test_backend_html.py +++ b/tests/test_backend_html.py @@ -653,8 +653,9 @@ def test_table_and_image_inside_figure_are_parsed(): ("figure", "expected"), [ ("
    Quote text
    cap
    ", ["Quote text"]), - ("
    one two three
    ", ["one", "two", "three"]), - ("
    one two
    ", ["one", "two"]), + # The boundary space stays on the plain neighbours, outside the code run. + ("
    one two three
    ", ["one ", "two", " three"]), + ("
    one two
    ", ["one ", "two"]), ('
    after
    ', ["after"]), ], ) @@ -911,7 +912,7 @@ def test_orig_keeps_source_text(): paragraph.orig == "See §§ 3\u20135 and \u201cquoted\u201d text \u2026 it\u2019s kept." ) - assert items["Item 3-5 with"].orig == "Item 3\u20135 with" + assert items["Item 3-5 with "].orig == "Item 3\u20135 with " assert items['"text"'].orig == "\u201ctext\u201d" @@ -2387,7 +2388,7 @@ def test_link_and_image_outside_base_directory_keep_conversion(tmp_path: Path): doc = result.document assert doc.texts[-1].text == "End" links = {t.text: t.hyperlink for t in doc.texts if t.hyperlink is not None} - assert Path(str(links["about"])).as_posix() == "/about" + assert Path(str(links["about "])).as_posix() == "/about" assert Path(str(links["home"])).as_posix() == "../index.html" assert len(doc.pictures) == 2 assert all(pic.image is None for pic in doc.pictures) diff --git a/tests/test_backend_markdown.py b/tests/test_backend_markdown.py index 1b029f21aa..722491d38f 100644 --- a/tests/test_backend_markdown.py +++ b/tests/test_backend_markdown.py @@ -802,7 +802,7 @@ def test_convert_line_breaks(): # leading '\n' on the run that follows, since the runs cannot be merged. doc = _convert_markdown("Author **John** \nUniversity XYZ", opt) assert len(doc.texts) == 3 - assert doc.texts[0].text == "Author" + assert doc.texts[0].text == "Author " assert doc.texts[0].formatting is None assert doc.texts[1].text == "John" assert doc.texts[1].formatting is not None @@ -860,24 +860,43 @@ def items(markdown: str): doc = _convert_markdown(markdown, opt) return [(str(t.label), t.text) for t in doc.texts] - expected = [("text", "Already in"), ("code", "Reference/"), ("text", ". Done.")] + # Runs keep their boundary whitespace; a soft break before the code span + # becomes a plain " " run, never a space inside the code run. # No break: the reference behaviour - assert items("Already in `Reference/`. Done.") == expected + assert items("Already in `Reference/`. Done.") == [ + ("text", "Already in "), + ("code", "Reference/"), + ("text", ". Done."), + ] # Soft break before the code span - assert items("Already in\n`Reference/`. Done.") == expected + assert items("Already in\n`Reference/`. Done.") == [ + ("text", "Already in"), + ("text", " "), + ("code", "Reference/"), + ("text", ". Done."), + ] # Hard break before the code span - assert items("Already in \n`Reference/`. Done.") == expected + assert items("Already in \n`Reference/`. Done.") == [ + ("text", "Already in"), + ("text", "\n"), + ("code", "Reference/"), + ("text", ". Done."), + ] # Soft break after the code span - assert items("Already in `Reference/`\n. Done.") == expected + assert items("Already in `Reference/`\n. Done.") == [ + ("text", "Already in "), + ("code", "Reference/"), + ("text", " . Done."), + ] # Hard break after the code span: the break is kept as a leading '\\n' on # the run that follows, as across a formatting boundary. assert items("Already in `Reference/` \n. Done.") == [ - ("text", "Already in"), + ("text", "Already in "), ("code", "Reference/"), ("text", "\n. Done."), ] @@ -885,8 +904,9 @@ def items(markdown: str): # Two code spans after a soft break assert items("Already in\n`Reference/` and `Other/`. Done.") == [ ("text", "Already in"), + ("text", " "), ("code", "Reference/"), - ("text", "and"), + ("text", " and "), ("code", "Other/"), ("text", ". Done."), ] @@ -895,6 +915,7 @@ def items(markdown: str): assert items("- Already in\n `Reference/`. Done.") == [ ("list_item", ""), ("text", "Already in"), + ("text", " "), ("code", "Reference/"), ("text", ". Done."), ] @@ -1091,6 +1112,7 @@ def items(markdown: str): # A code span at the end of a paragraph does not take in the next paragraph assert items("Intro\n`code`\n\nAfter") == [ ("text", "Intro"), + ("text", " "), ("code", "code"), ("text", "After"), ] diff --git a/tests/test_backend_msword_hidden.py b/tests/test_backend_msword_hidden.py index 06252861ec..9d1da6b614 100644 --- a/tests/test_backend_msword_hidden.py +++ b/tests/test_backend_msword_hidden.py @@ -127,8 +127,8 @@ def add_equation_and_secret(paragraph): doc = _convert(document, tmp_path) assert doc.export_to_markdown() == ( - "Value $x=1$\n\n" - "- Item $x=1$\n\n" + "Value $x=1$\n\n" + "- Item $x=1$\n\n" "$$x=1$$\n\n" "| Cell $x=1$ | Other |\n" "|--------------|---------|" From 4424ce77eb616a204bed061f6deb59e41ae96346 Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 15:12:25 +0200 Subject: [PATCH 15/16] fix(jats): keep a footnote label apart from its paragraph A footnote's runs are collected from the whole . In compact XML (`

    See ...`) nothing separated the label from the paragraph, so under the faithful run join it exported `1See`. A

    is now a block boundary: a plain " " run is added unless whitespace is already there, so compact and indented XML give the same runs. The JATS styling, footnote and ext-link run-list tests still expected stripped runs; they now expect the boundary whitespace on each run. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- docling/backend/xml/jats_backend.py | 15 ++++++- tests/test_backend_jats.py | 70 ++++++++++++++--------------- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/docling/backend/xml/jats_backend.py b/docling/backend/xml/jats_backend.py index aa27e421e7..c8917416e0 100644 --- a/docling/backend/xml/jats_backend.py +++ b/docling/backend/xml/jats_backend.py @@ -843,9 +843,20 @@ def _walk_inline_formula( ) ) else: - segments.extend( - JatsDocumentBackend._walk_inline_formula(child, current, hyperlink) + child_segments = JatsDocumentBackend._walk_inline_formula( + child, current, hyperlink ) + if ( + tag == "p" + and segments + and child_segments + and not segments[-1].text[-1:].isspace() + and not child_segments[0].text[:1].isspace() + ): + # A paragraph is a block: keep the boundary to what precedes it + # (`

    See` reads "1 See"). + segments.append(InlineSegment(label=DocItemLabel.TEXT, text=" ")) + segments.extend(child_segments) if child.tail: tail = JatsDocumentBackend._normalize_xml_line_breaks(child.tail) if tail: diff --git a/tests/test_backend_jats.py b/tests/test_backend_jats.py index 46833c10ea..0feb74b2ba 100644 --- a/tests/test_backend_jats.py +++ b/tests/test_backend_jats.py @@ -255,18 +255,18 @@ def test_jats_plain_abstract_styling_is_preserved(): groups = _inline_group_items(doc) assert len(groups) == 1 - # Each styled span remains a separate inline run. + # Each styled span remains a separate inline run; runs keep their boundary whitespace. assert [_formatting_tuple(item) for item in groups[0]] == [ - (DocItemLabel.TEXT, "We study", None), + (DocItemLabel.TEXT, "We study ", None), ( DocItemLabel.TEXT, "Homo sapiens", (False, True, False, False, Script.BASELINE), ), - (DocItemLabel.TEXT, ",", None), + (DocItemLabel.TEXT, ", ", None), ( DocItemLabel.TEXT, - "key", + "key ", (True, False, False, False, Script.BASELINE), ), ( @@ -286,13 +286,13 @@ def test_jats_plain_abstract_styling_is_preserved(): "3", (False, False, False, False, Script.SUPER), ), - (DocItemLabel.TEXT, "Pa,", None), + (DocItemLabel.TEXT, " Pa, ", None), ( DocItemLabel.TEXT, "u", (False, False, True, False, Script.BASELINE), ), - (DocItemLabel.TEXT, ",", None), + (DocItemLabel.TEXT, ", ", None), ( DocItemLabel.TEXT, "old", @@ -326,14 +326,14 @@ def abstract_runs(paragraph: str) -> list: # (source paragraph, expected inline runs) ( "conditions in vitro.", - [(T, "conditions", None), (T, "in vitro", italic), (T, ".", None)], + [(T, "conditions ", None), (T, "in vitro", italic), (T, ".", None)], ), ( "cultures of Y. pestis, and E. coli.", [ - (T, "cultures of", None), + (T, "cultures of ", None), (T, "Y. pestis", italic), - (T, ", and", None), + (T, ", and ", None), (T, "E. coli", italic), (T, ".", None), ], @@ -343,11 +343,11 @@ def abstract_runs(paragraph: str) -> list: [ (T, "CO", None), (T, "2", sub), - (T, "and (CO", None), + (T, " and (CO", None), (T, "2", sub), (T, "e) at 10", None), (T, "3", sup), - (T, "Pa", None), + (T, " Pa", None), ], ), ( @@ -374,7 +374,7 @@ def abstract_runs(paragraph: str) -> list: # as authored (no collapsing, no stripping of interior blanks). ( "a b\nc\n d.", - [(T, "a", None), (T, "b c", italic), (T, "d.", None)], + [(T, "a ", None), (T, "b c", italic), (T, " d.", None)], ), ] for paragraph, expected in cases: @@ -396,9 +396,9 @@ def test_jats_inline_runs_drop_xml_indentation_but_keep_same_line_whitespace(): italic = (False, True, False, False, Script.BASELINE) expected = [ - (DocItemLabel.TEXT, "Alpha beta", None), + (DocItemLabel.TEXT, "Alpha beta ", None), (DocItemLabel.TEXT, "Yersinia pestis", italic), - (DocItemLabel.TEXT, "is critical here.", None), + (DocItemLabel.TEXT, " is critical here.", None), ] for doc in documents: groups = _inline_group_items(doc) @@ -448,7 +448,7 @@ def test_jats_structured_abstract_styling_is_preserved(): "Bg", (False, True, False, False, Script.BASELINE), ), - (DocItemLabel.TEXT, "text.", None), + (DocItemLabel.TEXT, " text.", None), ] assert [_formatting_tuple(item) for item in groups[1]] == [ ( @@ -456,7 +456,7 @@ def test_jats_structured_abstract_styling_is_preserved(): "M", (True, False, False, False, Script.BASELINE), ), - (DocItemLabel.TEXT, "text.", None), + (DocItemLabel.TEXT, " text.", None), ] @@ -489,33 +489,32 @@ def test_jats_plain_footnote_without_styling_stays_a_single_text_item(): assert footnotes == ["Plain footnote."] -def test_jats_footnote_styling_is_preserved(): +_FOOTNOTE = ( + "{sep}

    See ibid for details.

    " +) + + +@pytest.mark.parametrize("sep", ["\n ", ""], ids=["indented", "compact"]) +def test_jats_footnote_styling_is_preserved(sep: str): + fn = _FOOTNOTE.format(sep=sep) doc = convert_jats_body( - """ - - Footnote Styling Test - - - -

    See ibid for details.

    -
    -
    -
    - """ + f"Footnote Styling Test{fn}" ) groups = _inline_group_items(doc) assert len(groups) == 1 - # The punctuation after the bold run remains separate and unformatted. + # The punctuation after the bold run remains separate and unformatted. The label + # and the paragraph are separate blocks: a " " run keeps them apart. assert [_formatting_tuple(item) for item in groups[0]] == [ (DocItemLabel.FOOTNOTE, "1", None), - (DocItemLabel.FOOTNOTE, "See", None), + (DocItemLabel.FOOTNOTE, " ", None), + (DocItemLabel.FOOTNOTE, "See ", None), ( DocItemLabel.FOOTNOTE, "ibid", (False, True, False, False, Script.BASELINE), ), - (DocItemLabel.FOOTNOTE, "for", None), + (DocItemLabel.FOOTNOTE, " for ", None), ( DocItemLabel.FOOTNOTE, "details", @@ -523,6 +522,7 @@ def test_jats_footnote_styling_is_preserved(): ), (DocItemLabel.FOOTNOTE, ".", None), ] + assert doc.export_to_markdown().endswith("- 1 See *ibid* for **details**.") def test_jats_nested_lists_are_preserved(): @@ -840,9 +840,9 @@ def test_jats_external_link_boundaries_are_preserved(): (item.text, str(item.hyperlink) if item.hyperlink is not None else None) for item in groups[0] ] == [ - ("Before", None), + ("Before ", None), ("linked text", "https://example.com/docs"), - ("after.", None), + (" after.", None), ] @@ -933,9 +933,9 @@ def test_jats_external_link_is_preserved_on_inline_formula(): ) for item in groups[0] ] == [ - (DocItemLabel.TEXT, "value", "https://example.com/equation"), + (DocItemLabel.TEXT, "value ", "https://example.com/equation"), (DocItemLabel.FORMULA, "x", "https://example.com/equation"), - (DocItemLabel.TEXT, "after.", None), + (DocItemLabel.TEXT, " after.", None), ] From 66db214b282cea9c73f840217a0d1d96b63bc8be Mon Sep 17 00:00:00 2001 From: Christoph Auer Date: Fri, 23 Oct 2026 15:27:38 +0200 Subject: [PATCH 16/16] test: rebaseline groundtruth for the inline whitespace contract Regenerated with DOCLING_GEN_TEST_DATA=1 for docx, html, md, jats, odf, epub, xbrl, latex, pages/keynote/numbers, asciidoc, pptx, chandra, boxnote, vtt, mhtml and email, then audited mechanically (whitespace removed, 1.10.0 mapped to 1.11.0 on both sides). Only spacing changes remain, e.g. latex `states $h_t$,` (was `states $h_t$ ,`), plus these explained differences: - inline-group goldens carry the 1.11.0 stamp; version-only changes to goldens without inline groups were reverted - DocLang `.dclg` header 0.7 -> 0.8 (docling-core #880) and link destinations `(`/`)` -> `%28`/`%29` in wiki_duck.html.md (docling-core #920) - fields that verify_docitems does not compare and that main left stale: epub `orig` keeps the source typography (#4434), latex 1706.03762 multirow span clamped to the table (#4974), escaped_characters list marker `1.` and the binary hash of the internal HTML round trip - md goldens were generated with docling-core #894's CodeItem escaping disabled, so they do not bake in that regression of the HTML-block round trip - embedded image bytes (machine dependent, partly LibreOffice) restored from HEAD Co-Authored-By: Claude Opus 5.5 Signed-off-by: Christoph Auer --- .../groundtruth/docx_rich_cells.docx.html | 18 +- .../docx/groundtruth/docx_rich_cells.docx.md | 6 +- .../list_after_num_headers.docx.md | 10 +- .../unit_test_formatting.docx.itxt | 26 +- .../unit_test_formatting.docx.json | 8 +- .../groundtruth/word_image_anchors.docx.md | 2 +- .../groundtruth/epub_purvis_poetry.epub.json | 130 +- .../groundtruth/epub_purvis_poetry.epub.md | 38 +- .../html_rich_table_cells.html.itxt | 6 +- .../data/html/groundtruth/wiki_duck.html.itxt | 1140 ++++---- .../data/html/groundtruth/wiki_duck.html.json | 2286 ++++++++--------- tests/data/html/groundtruth/wiki_duck.html.md | 250 +- .../jats/groundtruth/elife-56337.nxml.itxt | 48 +- .../jats/groundtruth/elife-56337.nxml.json | 98 +- .../data/jats/groundtruth/elife-56337.nxml.md | 22 +- .../jats/groundtruth/pmc2231364.nxml.itxt | 12 +- .../jats/groundtruth/pmc2231364.nxml.json | 26 +- .../data/jats/groundtruth/pmc2231364.nxml.md | 6 +- .../jats/groundtruth/pntd.0008301.nxml.itxt | 76 +- .../jats/groundtruth/pntd.0008301.nxml.json | 154 +- .../jats/groundtruth/pntd.0008301.nxml.md | 4 +- .../jats/groundtruth/pone.0234687.nxml.itxt | 162 +- .../jats/groundtruth/pone.0234687.nxml.json | 326 +-- .../jats/groundtruth/pone.0234687.nxml.md | 58 +- .../groundtruth/1706.03762_main.tex.dclg | 50 +- .../groundtruth/1706.03762_main.tex.json | 6 +- .../latex/groundtruth/1706.03762_main.tex.md | 70 +- .../groundtruth/2305.03393_main.tex.dclg | 2 +- .../groundtruth/2310.06825_main.tex.dclg | 10 +- .../groundtruth/2310.06825_main.tex.json | 2 +- .../latex/groundtruth/2310.06825_main.tex.md | 16 +- .../groundtruth/2412.19437_main.tex.dclg | 26 +- .../groundtruth/2412.19437_main.tex.json | 2 +- .../latex/groundtruth/2412.19437_main.tex.md | 66 +- .../groundtruth/2501.00089_main.tex.dclg | 41 +- .../groundtruth/2501.00089_main.tex.json | 2 +- .../latex/groundtruth/2501.00089_main.tex.md | 58 +- .../arXiv-2501.01300v2_main.tex.dclg | 26 +- .../arXiv-2501.01300v2_main.tex.json | 2 +- .../arXiv-2501.01300v2_main.tex.md | 48 +- .../latex/groundtruth/example_01.tex.dclg | 2 +- .../latex/groundtruth/example_02.tex.dclg | 2 +- .../latex/groundtruth/example_02.tex.json | 2 +- .../data/latex/groundtruth/example_02.tex.md | 2 +- .../md/groundtruth/escaped_characters.md.json | 10 +- .../groundtruth/inline_and_formatting.md.yaml | 472 ++-- tests/data/md/groundtruth/line_breaks.md.json | 6 +- tests/data/md/groundtruth/line_breaks.md.md | 2 +- .../pages_iwork09_formatted.pages.json | 2 +- .../xbrl/groundtruth/mlac-20251231.xml.json | 30 +- 50 files changed, 2949 insertions(+), 2920 deletions(-) diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.html b/tests/data/docx/groundtruth/docx_rich_cells.docx.html index e715dd7c90..572a749f43 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.html +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.html @@ -196,30 +196,30 @@

    Table with rich cells

  • Number one
  • Number two
  • Number three
  • -

    This is simple text with

    +

    This is simple text with

    bold

    -

    ,

    +

    ,

    strikethrough

    -

    and

    +

    and

    italic

    -

    formatting with x

    +

    formatting with x

    2

    -

    and H

    +

    and H

    2

    O

    This is a paragraph

    This is another paragraph

    Table with nested table

    Before table

    - diff --git a/tests/data/latex/groundtruth/2310.06825_main.tex.json b/tests/data/latex/groundtruth/2310.06825_main.tex.json index f8ec5c98b3..2c811501eb 100644 --- a/tests/data/latex/groundtruth/2310.06825_main.tex.json +++ b/tests/data/latex/groundtruth/2310.06825_main.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "main", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/latex/groundtruth/2310.06825_main.tex.md b/tests/data/latex/groundtruth/2310.06825_main.tex.md index 1a306f09b9..e8a455e76f 100644 --- a/tests/data/latex/groundtruth/2310.06825_main.tex.md +++ b/tests/data/latex/groundtruth/2310.06825_main.tex.md @@ -34,7 +34,7 @@ is also streamlined for easier integration. Moreover, Mistral~7B\xspaceis crafte ## Architectural details -Sliding Window Attention. The number of operations in vanilla attention is quadratic in the sequence length, and the memory increases linearly with the number of tokens. At inference time, this incurs higher latency and smaller throughput due to reduced cache availability. To alleviate this issue, we use sliding window attention: each token can attend to at most $W$ tokens from the previous layer (here, $W=3$ ). Note that tokens outside the sliding window still influence next word prediction. At each attention layer, information can move forward by $W$ tokens. Hence, after $k$ attention layers, information can move forward by up to $k \times W$ tokens. +Sliding Window Attention. The number of operations in vanilla attention is quadratic in the sequence length, and the memory increases linearly with the number of tokens. At inference time, this incurs higher latency and smaller throughput due to reduced cache availability. To alleviate this issue, we use sliding window attention: each token can attend to at most $W$ tokens from the previous layer (here, $W=3$). Note that tokens outside the sliding window still influence next word prediction. At each attention layer, information can move forward by $W$ tokens. Hence, after $k$ attention layers, information can move forward by up to $k \times W$ tokens. @@ -57,17 +57,17 @@ Model architecture. Mistral~7B\xspaceis based on a transformer architecture[vaswani2017attention]. The main parameters of the architecture are summarized in Table[tab:param]. Compared to Llama\xspace, it introduces a few changes that we summarize below. -=-1 Sliding Window Attention. SWA exploits the stacked layers of a transformer to attend information beyond the window size $W$ . The hidden state in position $i$ of the layer $k$ , $h_i$ , attends to all hidden states from the previous layer with positions between $i-W$ and $i$ . Recursively, $h_i$ can access tokens from the input layer at a distance of up to $W \times k$ tokens, as illustrated in Figure[fig:swa]. At the last layer, using a window size of $W=4096$ , we have a theoretical attention span of approximately $131K$ tokens. In practice, for a sequence length of 16K and $W=4096$ , changes made to FlashAttention[dao2022flashattention] and xFormers[xFormers2022] yield a 2x speed improvement over a vanilla attention baseline. +=-1 Sliding Window Attention. SWA exploits the stacked layers of a transformer to attend information beyond the window size $W$. The hidden state in position $i$ of the layer $k$, $h_i$, attends to all hidden states from the previous layer with positions between $i-W$ and $i$. Recursively, $h_i$ can access tokens from the input layer at a distance of up to $W \times k$ tokens, as illustrated in Figure[fig:swa]. At the last layer, using a window size of $W=4096$, we have a theoretical attention span of approximately $131K$ tokens. In practice, for a sequence length of 16K and $W=4096$, changes made to FlashAttention[dao2022flashattention] and xFormers[xFormers2022] yield a 2x speed improvement over a vanilla attention baseline. -=-1 Rolling Buffer Cache. A fixed attention span means that we can limit our cache size using a rolling buffer cache. The cache has a fixed size of $W$ , and the keys and values for the timestep $i$ are stored in position $i \bmod W$ of the cache. As a result, when the position $i$ is larger than $W$ , past values in the cache are overwritten, and the size of the cache stops increasing. We provide an illustration in Figure[fig:cache] for $W=3$ . On a sequence length of 32k tokens, this reduces the cache memory usage by 8x, without impacting the model quality. +=-1 Rolling Buffer Cache. A fixed attention span means that we can limit our cache size using a rolling buffer cache. The cache has a fixed size of $W$, and the keys and values for the timestep $i$ are stored in position $i \bmod W$ of the cache. As a result, when the position $i$ is larger than $W$, past values in the cache are overwritten, and the size of the cache stops increasing. We provide an illustration in Figure[fig:cache] for $W=3$. On a sequence length of 32k tokens, this reduces the cache memory usage by 8x, without impacting the model quality. [][c] -Rolling buffer cache. The cache has a fixed size of $W=4$ . Keys and values for position $i$ are stored in position $i \bmod W$ of the cache. When the position $i$ is larger than $W$ , past values in the cache are overwritten. The hidden state corresponding to the latest generated tokens are colored in orange. +Rolling buffer cache. The cache has a fixed size of $W=4$. Keys and values for position $i$ are stored in position $i \bmod W$ of the cache. When the position $i$ is larger than $W$, past values in the cache are overwritten. The hidden state corresponding to the latest generated tokens are colored in orange. -=-1 Pre-fill and Chunking. When generating a sequence, we need to predict tokens one-by-one, as each token is conditioned on the previous ones. However, the prompt is known in advance, and we can pre-fill the ( $k$ , $v$ ) cache with the prompt. If the prompt is very large, we can chunk it into smaller pieces, and pre-fill the cache with each chunk. For this purpose, we can select the window size as our chunk size. For each chunk, we thus need to compute the attention over the cache and over the chunk. Figure[fig:chunking] shows how the attention mask works over both the cache and the chunk. +=-1 Pre-fill and Chunking. When generating a sequence, we need to predict tokens one-by-one, as each token is conditioned on the previous ones. However, the prompt is known in advance, and we can pre-fill the ($k$, $v$) cache with the prompt. If the prompt is very large, we can chunk it into smaller pieces, and pre-fill the cache with each chunk. For this purpose, we can select the window size as our chunk size. For each chunk, we thus need to compute the attention over the cache and over the chunk. Figure[fig:chunking] shows how the attention mask works over both the cache and the chunk. Pre-fill and chunking. During pre-fill of the cache, long sequences are chunked to limit memory usage. We process a sequence in three chunks, The cat sat on, the mat and saw, the dog go to. The figure shows what happens for the third chunk (the dog go to): it attends itself using a causal mask (rightmost block), attends the cache using a sliding window (center block), and does not attend to past tokens as they are outside of the sliding window (left block). @@ -147,9 +147,9 @@ r0.38 | Guardrails | MT Bench | | - | - | -| No system prompt | 6.84 $\pm$ 0.07 | -| Llama\xspace2 system prompt | 6.38 $\pm$ 0.07 | -| Mistral system prompt | 6.58 $\pm$ 0.05 | +| No system prompt | 6.84 $\pm$ 0.07 | +| Llama\xspace2 system prompt | 6.38 $\pm$ 0.07 | +| Mistral system prompt | 6.58 $\pm$ 0.05 | | | | System prompts. Mean official MT Bench score over 10 iterations with standard deviation for Mistral~7B~--~Instruct\xspace. For reference, Llama\xspace2 13B Chat reports official results of 6.65. diff --git a/tests/data/latex/groundtruth/2412.19437_main.tex.dclg b/tests/data/latex/groundtruth/2412.19437_main.tex.dclg index 4961e95521..a510986ca7 100644 --- a/tests/data/latex/groundtruth/2412.19437_main.tex.dclg +++ b/tests/data/latex/groundtruth/2412.19437_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass[11pt, a4paper, logo, copyright, nonumbering]{deepseek} @@ -375,7 +375,7 @@ \mathbf{h}_{t} \in \mathbb{R}^{d} denote the attention input for the t --th token at a given attention layer. The core of MLA is the low-rank joint compression for attention keys and values to reduce Key-Value (KV) cache during inference: + -th token at a given attention layer. The core of MLA is the low-rank joint compression for attention keys and values to reduce Key-Value (KV) cache during inference: \color{blue} \mathbf{c}_{t}^{KV} and \color{blue}\mathbf{k}_{t}^{R} -) need to be cached during generation, which results in significantly reduced KV cache while maintaining performance comparable to standard Multi-Head Attention (MHA)[transformer]. + ) need to be cached during generation, which results in significantly reduced KV cache while maintaining performance comparable to standard Multi-Head Attention (MHA)[transformer]. For the attention queries, we also perform a low-rank compression, which can reduce the activation memory during training: @@ -430,13 +430,13 @@ Ultimately, the attention queries ( \mathbf{q}_{t, i} -), keys ( + ), keys ( \mathbf{k}_{j, i} -), and values ( + ), and values ( \mathbf{v}_{j, i}^{C} ) are combined to yield the final attention output \mathbf{u}_{t} -: + : K highest scores among the affinity scores calculated for the t --th token and all routed experts. Slightly different from DeepSeek-V2, DeepSeek-V3 uses the sigmoid function to compute the affinity scores, and applies a normalization among all selected affinity scores to produce the gating values. + -th token and all routed experts. Slightly different from DeepSeek-V2, DeepSeek-V3 uses the sigmoid function to compute the affinity scores, and applies a normalization among all selected affinity scores to produce the gating values. Auxiliary-Loss-Free Load Balancing. For MoE models, an unbalanced expert load will lead to routing collapse[moe] and diminish computational efficiency in scenarios with expert parallelism. Conventional solutions usually rely on the auxiliary loss[switch,gshard] to avoid unbalanced load. However, too large an auxiliary loss will impair the model performance[noaux_tc]. To achieve a better trade-off between load balance and model performance, we pioneer an auxiliary-loss-free load balancing strategy[noaux_tc] to ensure load balance. To be specific, we introduce a bias term @@ -616,7 +616,7 @@ k -th depth to produce the output representation at the current depth \mathbf{h}_{i}^{k} -: + : \begin{equation} @@ -650,12 +650,12 @@ \operatorname{Softmax}(\cdot) function to compute the prediction probabilities of the k --th additional token. Also, for each MTP module, its output head is shared with the main model. Our principle of maintaining the causal chain of predictions is similar to that of EAGLE[eagle], but its primary objective is speculative decoding[speculative_xhm,speculative_google], whereas we utilize MTP to improve training. + -th additional token. Also, for each MTP module, its output head is shared with the main model. Our principle of maintaining the causal chain of predictions is similar to that of EAGLE[eagle], but its primary objective is speculative decoding[speculative_xhm,speculative_google], whereas we utilize MTP to improve training. MTP Training Objective. For each prediction depth, we compute a cross-entropy loss \mathcal{L}_{\text{MTP}}^{k} -: + : \begin{equation} @@ -679,7 +679,7 @@ \lambda to obtain the overall MTP loss \mathcal{L}_{\text{MTP}} -, which serves as an additional training objective for DeepSeek-V3: + , which serves as an additional training objective for DeepSeek-V3: \begin{equation} @@ -950,7 +950,7 @@ \sqrt{t} = 0.1 \ln{s} + 1 . In the first phase, the sequence length is set to 32K, and the batch size is 1920. During the second phase, the sequence length is increased to 128K, and the batch size is reduced to 480. The learning rate for both phases is set to 7.3 \times 10^{-6} -, matching the final learning rate from the pre-training stage. + , matching the final learning rate from the pre-training stage. Evaluations @@ -2016,7 +2016,7 @@ 5 \times 10^{-6} and gradually decreases to 1 \times 10^{-6} -. During training, each single sequence is packed from multiple samples. However, we adopt a sample masking strategy to ensure that these examples remain isolated and mutually invisible. + . During training, each single sequence is packed from multiple samples. However, we adopt a sample masking strategy to ensure that these examples remain isolated and mutually invisible. Reinforcement Learning Reward Model diff --git a/tests/data/latex/groundtruth/2412.19437_main.tex.json b/tests/data/latex/groundtruth/2412.19437_main.tex.json index 0a3f687d68..970406c9aa 100644 --- a/tests/data/latex/groundtruth/2412.19437_main.tex.json +++ b/tests/data/latex/groundtruth/2412.19437_main.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "main", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/latex/groundtruth/2412.19437_main.tex.md b/tests/data/latex/groundtruth/2412.19437_main.tex.md index 8c51bcdd33..5fccbedd2e 100644 --- a/tests/data/latex/groundtruth/2412.19437_main.tex.md +++ b/tests/data/latex/groundtruth/2412.19437_main.tex.md @@ -68,7 +68,7 @@ The basic architecture of DeepSeek-V3 is still within the Transformer[transforme #### Multi-Head Latent Attention -For attention, DeepSeek-V3 adopts the MLA architecture. Let $d$ denote the embedding dimension, $n_h$ denote the number of attention heads, $d_h$ denote the dimension per head, and $\mathbf{h}_{t} \in \mathbb{R}^{d}$ denote the attention input for the $t$ -th token at a given attention layer. The core of MLA is the low-rank joint compression for attention keys and values to reduce Key-Value (KV) cache during inference: +For attention, DeepSeek-V3 adopts the MLA architecture. Let $d$ denote the embedding dimension, $n_h$ denote the number of attention heads, $d_h$ denote the dimension per head, and $\mathbf{h}_{t} \in \mathbb{R}^{d}$ denote the attention input for the $t$-th token at a given attention layer. The core of MLA is the low-rank joint compression for attention keys and values to reduce Key-Value (KV) cache during inference: $$\begin{align} \boxed{\color{blue} \mathbf{c}_{t}^{KV}} &= W^{DKV} \mathbf{h}_{t}, \\ @@ -78,7 +78,7 @@ $$\begin{align} [\mathbf{v}_{t, 1}^{C};\mathbf{v}_{t, 2}^{C};...;\mathbf{v}_{t, n_{h}}^{C}] = \mathbf{v}_{t}^{C} &= W^{UV} \mathbf{c}_{t}^{KV}, \end{align}$$ -where $\mathbf{c}_{t}^{KV} \in \mathbb{R}^{d_c}$ is the compressed latent vector for keys and values; $d_c (\ll d_h n_h)$ indicates the KV compression dimension; $W^{DKV} \in \mathbb{R}^{d_c \times d}$ denotes the down-projection matrix; $W^{UK},W^{UV} \in \mathbb{R}^{d_h n_h \times d_c}$ are the up-projection matrices for keys and values, respectively; $W^{KR} \in \mathbb{R}^{d_h^R \times d}$ is the matrix used to produce the decoupled key that carries Rotary Positional Embedding (RoPE)[su2024roformer]; $\operatorname{RoPE}(\cdot)$ denotes the operation that applies RoPE matrices; and $[\cdot;\cdot]$ denotes concatenation. Note that for MLA, only the blue-boxed vectors (i.e., $\color{blue} \mathbf{c}_{t}^{KV}$ and $\color{blue}\mathbf{k}_{t}^{R}$ ) need to be cached during generation, which results in significantly reduced KV cache while maintaining performance comparable to standard Multi-Head Attention (MHA)[transformer]. +where $\mathbf{c}_{t}^{KV} \in \mathbb{R}^{d_c}$ is the compressed latent vector for keys and values; $d_c (\ll d_h n_h)$ indicates the KV compression dimension; $W^{DKV} \in \mathbb{R}^{d_c \times d}$ denotes the down-projection matrix; $W^{UK},W^{UV} \in \mathbb{R}^{d_h n_h \times d_c}$ are the up-projection matrices for keys and values, respectively; $W^{KR} \in \mathbb{R}^{d_h^R \times d}$ is the matrix used to produce the decoupled key that carries Rotary Positional Embedding (RoPE)[su2024roformer]; $\operatorname{RoPE}(\cdot)$ denotes the operation that applies RoPE matrices; and $[\cdot;\cdot]$ denotes concatenation. Note that for MLA, only the blue-boxed vectors (i.e., $\color{blue} \mathbf{c}_{t}^{KV}$ and $\color{blue}\mathbf{k}_{t}^{R}$) need to be cached during generation, which results in significantly reduced KV cache while maintaining performance comparable to standard Multi-Head Attention (MHA)[transformer]. For the attention queries, we also perform a low-rank compression, which can reduce the activation memory during training: @@ -89,20 +89,20 @@ $$\begin{align} \mathbf{q}_{t, i} &= [\mathbf{q}_{t, i}^{C}; \mathbf{q}_{t, i}^{R}], \end{align}$$ -where $\mathbf{c}_{t}^{Q} \in \mathbb{R}^{d_c^{\prime}}$ is the compressed latent vector for queries; $d_c^{\prime} (\ll d_h n_h)$ denotes the query compression dimension; $W^{DQ} \in \mathbb{R}^{d_c^{\prime} \times d}, W^{UQ} \in \mathbb{R}^{d_h n_h \times d_c^{\prime}}$ are the down-projection and up-projection matrices for queries, respectively; and $W^{QR} \in \mathbb{R}^{d_h^R n_h \times d_c^{\prime}}$ is the matrix to produce the decoupled queries that carry RoPE. +where $\mathbf{c}_{t}^{Q} \in \mathbb{R}^{d_c^{\prime}}$ is the compressed latent vector for queries; $d_c^{\prime} (\ll d_h n_h)$ denotes the query compression dimension; $W^{DQ} \in \mathbb{R}^{d_c^{\prime} \times d}, W^{UQ} \in \mathbb{R}^{d_h n_h \times d_c^{\prime}}$ are the down-projection and up-projection matrices for queries, respectively; and $W^{QR} \in \mathbb{R}^{d_h^R n_h \times d_c^{\prime}}$ is the matrix to produce the decoupled queries that carry RoPE. -Ultimately, the attention queries ( $\mathbf{q}_{t, i}$ ), keys ( $\mathbf{k}_{j, i}$ ), and values ( $\mathbf{v}_{j, i}^{C}$ ) are combined to yield the final attention output $\mathbf{u}_{t}$ : +Ultimately, the attention queries ($\mathbf{q}_{t, i}$), keys ($\mathbf{k}_{j, i}$), and values ($\mathbf{v}_{j, i}^{C}$) are combined to yield the final attention output $\mathbf{u}_{t}$: $$\begin{align} \mathbf{o}_{t, i} &= \sum_{j=1}^{t} \operatorname{Softmax}_j(\frac{\mathbf{q}_{t, i}^T \mathbf{k}_{j, i}}{\sqrt{d_{h} + d_{h}^{R}}}) \mathbf{v}_{j, i}^{C}, \\ \mathbf{u}_{t} &= W^{O} [\mathbf{o}_{t, 1};\mathbf{o}_{t, 2};...;\mathbf{o}_{t, n_{h}}], \end{align}$$ -where $W^{O} \in \mathbb{R}^{d \times d_h n_h}$ denotes the output projection matrix. +where $W^{O} \in \mathbb{R}^{d \times d_h n_h}$ denotes the output projection matrix. #### DeepSeekMoE with Auxiliary-Loss-Free Load Balancing -Basic Architecture of DeepSeekMoE. For Feed-Forward Networks(FFNs), DeepSeek-V3 employs the DeepSeekMoE architecture[deepseekmoe]. Compared with traditional MoE architectures like GShard[gshard], DeepSeekMoE uses finer-grained experts and isolates some experts as shared ones. Let $\mathbf{u}_{t}$ denote the FFN input of the $t$ -th token, we compute the FFN output $\mathbf{h}_{t}^{\prime}$ as follows: +Basic Architecture of DeepSeekMoE. For Feed-Forward Networks(FFNs), DeepSeek-V3 employs the DeepSeekMoE architecture[deepseekmoe]. Compared with traditional MoE architectures like GShard[gshard], DeepSeekMoE uses finer-grained experts and isolates some experts as shared ones. Let $\mathbf{u}_{t}$ denote the FFN input of the $t$-th token, we compute the FFN output $\mathbf{h}_{t}^{\prime}$ as follows: $$\begin{align} \mathbf{h}_{t}^{\prime} & = \mathbf{u}_{t} + \sum_{i=1}^{N_{s}} {\operatorname{FFN}^{(s)}_{i}\left( \mathbf{u}_{t} \right)} + \sum_{i=1}^{N_r} {g_{i,t} \operatorname{FFN}^{(r)}_{i}\left( \mathbf{u}_{t} \right)}, \\ @@ -114,9 +114,9 @@ $$\begin{align} s_{i,t} & = \operatorname{Sigmoid} \left( {\mathbf{u}_{t}}^{T} \mathbf{e}_{i} \right), \end{align}$$ -where $N_{s}$ and $N_r$ denote the numbers of shared experts and routed experts, respectively; $\operatorname{FFN}^{(s)}_{i}(\cdot)$ and $\operatorname{FFN}^{(r)}_{i}(\cdot)$ denote the $i$ -th shared expert and the $i$ -th routed expert, respectively; $K_{r}$ denotes the number of activated routed experts; $g_{i,t}$ is the gating value for the $i$ -th expert; $s_{i,t}$ is the token-to-expert affinity; $\mathbf{e}_{i}$ is the centroid vector of the $i$ -th routed expert; and $\operatorname{Topk}(\cdot, K)$ denotes the set comprising $K$ highest scores among the affinity scores calculated for the $t$ -th token and all routed experts. Slightly different from DeepSeek-V2, DeepSeek-V3 uses the sigmoid function to compute the affinity scores, and applies a normalization among all selected affinity scores to produce the gating values. +where $N_{s}$ and $N_r$ denote the numbers of shared experts and routed experts, respectively; $\operatorname{FFN}^{(s)}_{i}(\cdot)$ and $\operatorname{FFN}^{(r)}_{i}(\cdot)$ denote the $i$-th shared expert and the $i$-th routed expert, respectively; $K_{r}$ denotes the number of activated routed experts; $g_{i,t}$ is the gating value for the $i$-th expert; $s_{i,t}$ is the token-to-expert affinity; $\mathbf{e}_{i}$ is the centroid vector of the $i$-th routed expert; and $\operatorname{Topk}(\cdot, K)$ denotes the set comprising $K$ highest scores among the affinity scores calculated for the $t$-th token and all routed experts. Slightly different from DeepSeek-V2, DeepSeek-V3 uses the sigmoid function to compute the affinity scores, and applies a normalization among all selected affinity scores to produce the gating values. -Auxiliary-Loss-Free Load Balancing. For MoE models, an unbalanced expert load will lead to routing collapse[moe] and diminish computational efficiency in scenarios with expert parallelism. Conventional solutions usually rely on the auxiliary loss[switch,gshard] to avoid unbalanced load. However, too large an auxiliary loss will impair the model performance[noaux\_tc]. To achieve a better trade-off between load balance and model performance, we pioneer an auxiliary-loss-free load balancing strategy[noaux\_tc] to ensure load balance. To be specific, we introduce a bias term $b_i$ for each expert and add it to the corresponding affinity scores $s_{i,t}$ to determine the top-K routing: +Auxiliary-Loss-Free Load Balancing. For MoE models, an unbalanced expert load will lead to routing collapse[moe] and diminish computational efficiency in scenarios with expert parallelism. Conventional solutions usually rely on the auxiliary loss[switch,gshard] to avoid unbalanced load. However, too large an auxiliary loss will impair the model performance[noaux\_tc]. To achieve a better trade-off between load balance and model performance, we pioneer an auxiliary-loss-free load balancing strategy[noaux\_tc] to ensure load balance. To be specific, we introduce a bias term $b_i$ for each expert and add it to the corresponding affinity scores $s_{i,t}$ to determine the top-K routing: $$\begin{align} g^{\prime}_{i,t} & = \begin{cases} @@ -125,7 +125,7 @@ $$\begin{align} \end{cases} \end{align}$$ -Note that the bias term is only used for routing. The gating value, which will be multiplied with the FFN output, is still derived from the original affinity score $s_{i,t}$ . During training, we keep monitoring the expert load on the whole batch of each training step. At the end of each step, we will decrease the bias term by $\gamma$ if its corresponding expert is overloaded, and increase it by $\gamma$ if its corresponding expert is underloaded, where $\gamma$ is a hyper-parameter called bias update speed. Through the dynamic adjustment, DeepSeek-V3 keeps balanced expert load during training, and achieves better performance than models that encourage load balance through pure auxiliary losses. +Note that the bias term is only used for routing. The gating value, which will be multiplied with the FFN output, is still derived from the original affinity score $s_{i,t}$. During training, we keep monitoring the expert load on the whole batch of each training step. At the end of each step, we will decrease the bias term by $\gamma$ if its corresponding expert is overloaded, and increase it by $\gamma$ if its corresponding expert is underloaded, where $\gamma$ is a hyper-parameter called bias update speed. Through the dynamic adjustment, DeepSeek-V3 keeps balanced expert load during training, and achieves better performance than models that encourage load balance through pure auxiliary losses. Complementary Sequence-Wise Auxiliary Loss. Although DeepSeek-V3 mainly relies on the auxiliary-loss-free strategy for load balance, to prevent extreme imbalance within any single sequence, we also employ a complementary sequence-wise balance loss: @@ -137,9 +137,9 @@ $$\begin{align} P_i & = \frac{1}{T} \sum_{t=1}^{T}{s^{\prime}_{i,t}}, \end{align}$$ -where the balance factor $\alpha$ is a hyper-parameter, which will be assigned an extremely small value for DeepSeek-V3; $\mathds{1}(\cdot)$ denotes the indicator function; and $T$ denotes the number of tokens in a sequence. The sequence-wise balance loss encourages the expert load on each sequence to be balanced. +where the balance factor $\alpha$ is a hyper-parameter, which will be assigned an extremely small value for DeepSeek-V3; $\mathds{1}(\cdot)$ denotes the indicator function; and $T$ denotes the number of tokens in a sequence. The sequence-wise balance loss encourages the expert load on each sequence to be balanced. -Node-Limited Routing. Like the device-limited routing used by DeepSeek-V2, DeepSeek-V3 also uses a restricted routing mechanism to limit communication costs during training. In short, we ensure that each token will be sent to at most $M$ nodes, which are selected according to the sum of the highest $\frac{K_r}{M}$ affinity scores of the experts distributed on each node. Under this constraint, our MoE training framework can nearly achieve full computation-communication overlap. +Node-Limited Routing. Like the device-limited routing used by DeepSeek-V2, DeepSeek-V3 also uses a restricted routing mechanism to limit communication costs during training. In short, we ensure that each token will be sent to at most $M$ nodes, which are selected according to the sum of the highest $\frac{K_r}{M}$ affinity scores of the experts distributed on each node. Under this constraint, our MoE training framework can nearly achieve full computation-communication overlap. No Token-Dropping. Due to the effective load balancing strategy, DeepSeek-V3 keeps a good load balance during its full training. Therefore, DeepSeek-V3 does not drop any tokens during training. In addition, we also implement specific deployment strategies to ensure inference load balance, so DeepSeek-V3 also does not drop tokens during inference. @@ -149,35 +149,35 @@ Illustration of our Multi-Token Prediction (MTP) implementation. We keep the com ### Multi-Token Prediction -Inspired by [meta\_mtp], we investigate and set a Multi-Token Prediction (MTP) objective for DeepSeek-V3, which extends the prediction scope to multiple future tokens at each position. On the one hand, an MTP objective densifies the training signals and may improve data efficiency. On the other hand, MTP may enable the model to pre-plan its representations for better prediction of future tokens. Figure[fig:nextn] illustrates our implementation of MTP. Different from [meta\_mtp], which parallelly predicts $D$ additional tokens using independent output heads, we sequentially predict additional tokens and keep the complete causal chain at each prediction depth. We introduce the details of our MTP implementation in this section. +Inspired by [meta\_mtp], we investigate and set a Multi-Token Prediction (MTP) objective for DeepSeek-V3, which extends the prediction scope to multiple future tokens at each position. On the one hand, an MTP objective densifies the training signals and may improve data efficiency. On the other hand, MTP may enable the model to pre-plan its representations for better prediction of future tokens. Figure[fig:nextn] illustrates our implementation of MTP. Different from [meta\_mtp], which parallelly predicts $D$ additional tokens using independent output heads, we sequentially predict additional tokens and keep the complete causal chain at each prediction depth. We introduce the details of our MTP implementation in this section. -MTP Modules. To be specific, our MTP implementation uses $D$ sequential modules to predict $D$ additional tokens. The $k$ -th MTP module consists of a shared embedding layer $\operatorname{Emb}(\cdot)$ , a shared output head $\operatorname{OutHead}(\cdot)$ , a Transformer block $\operatorname{TRM}_k(\cdot)$ , and a projection matrix $M_k \in \mathbb{R}^{d \times 2d}$ . For the $i$ -th input token $t_i$ , at the $k$ -th prediction depth, we first combine the representation of the $i$ -th token at the $(k-1)$ -th depth $\mathbf{h}_i^{k-1} \in \mathbb{R}^{d}$ and the embedding of the $(i+k)$ -th token $Emb(t_{i+k}) \in \mathbb{R}^{d}$ with the linear projection: +MTP Modules. To be specific, our MTP implementation uses $D$ sequential modules to predict $D$ additional tokens. The $k$-th MTP module consists of a shared embedding layer $\operatorname{Emb}(\cdot)$, a shared output head $\operatorname{OutHead}(\cdot)$, a Transformer block $\operatorname{TRM}_k(\cdot)$, and a projection matrix $M_k \in \mathbb{R}^{d \times 2d}$. For the $i$-th input token $t_i$, at the $k$-th prediction depth, we first combine the representation of the $i$-th token at the $(k-1)$-th depth $\mathbf{h}_i^{k-1} \in \mathbb{R}^{d}$ and the embedding of the $(i+k)$-th token $Emb(t_{i+k}) \in \mathbb{R}^{d}$ with the linear projection: $$\begin{equation} \mathbf{h}_i^{\prime k} = M_k [\operatorname{RMSNorm}(\mathbf{h}_i^{k-1}) ; \operatorname{RMSNorm}(\operatorname{Emb}(t_{i+k}))], \end{equation}$$ -where $[\cdot ; \cdot]$ denotes concatenation. Especially, when $k=1$ , $\mathbf{h}_i^{k-1}$ refers to the representation given by the main model. Note that for each MTP module, its embedding layer is shared with the main model. The combined $\mathbf{h}_i^{\prime k}$ serves as the input of the Transformer block at the $k$ -th depth to produce the output representation at the current depth $\mathbf{h}_{i}^{k}$ : +where $[\cdot ; \cdot]$ denotes concatenation. Especially, when $k=1$, $\mathbf{h}_i^{k-1}$ refers to the representation given by the main model. Note that for each MTP module, its embedding layer is shared with the main model. The combined $\mathbf{h}_i^{\prime k}$ serves as the input of the Transformer block at the $k$-th depth to produce the output representation at the current depth $\mathbf{h}_{i}^{k}$: $$\begin{equation} \mathbf{h}_{1:T-k}^{k} = \operatorname{TRM}_k(\mathbf{h}_{1:T-k}^{\prime k}), \end{equation}$$ -where $T$ represents the input sequence length and $_{i:j}$ denotes the slicing operation (inclusive of both the left and right boundaries). Finally, taking $\mathbf{h}_{i}^{k}$ as the input, the shared output head will compute the probability distribution for the $k$ -th additional prediction token $P_{i+1+k}^{k} \in \mathbb{R}^{V}$ , where $V$ is the vocabulary size: +where $T$ represents the input sequence length and $_{i:j}$ denotes the slicing operation (inclusive of both the left and right boundaries). Finally, taking $\mathbf{h}_{i}^{k}$ as the input, the shared output head will compute the probability distribution for the $k$-th additional prediction token $P_{i+1+k}^{k} \in \mathbb{R}^{V}$, where $V$ is the vocabulary size: $$\begin{equation} P_{i+k+1}^{k} = \operatorname{OutHead}(\mathbf{h}_{i}^{k}). \end{equation}$$ -The output head $\operatorname{OutHead}(\cdot)$ linearly maps the representation to logits and subsequently applies the $\operatorname{Softmax}(\cdot)$ function to compute the prediction probabilities of the $k$ -th additional token. Also, for each MTP module, its output head is shared with the main model. Our principle of maintaining the causal chain of predictions is similar to that of EAGLE[eagle], but its primary objective is speculative decoding[speculative\_xhm,speculative\_google], whereas we utilize MTP to improve training. +The output head $\operatorname{OutHead}(\cdot)$ linearly maps the representation to logits and subsequently applies the $\operatorname{Softmax}(\cdot)$ function to compute the prediction probabilities of the $k$-th additional token. Also, for each MTP module, its output head is shared with the main model. Our principle of maintaining the causal chain of predictions is similar to that of EAGLE[eagle], but its primary objective is speculative decoding[speculative\_xhm,speculative\_google], whereas we utilize MTP to improve training. -MTP Training Objective. For each prediction depth, we compute a cross-entropy loss $\mathcal{L}_{\text{MTP}}^{k}$ : +MTP Training Objective. For each prediction depth, we compute a cross-entropy loss $\mathcal{L}_{\text{MTP}}^{k}$: $$\begin{equation} \mathcal{L}_{\text{MTP}}^{k} = \operatorname{CrossEntropy}(P_{2 + k:T + 1}^{k}, t_{2 + k:T + 1}) = -\frac{1}{T} \sum_{i=2 + k}^{T + 1} \log P_i^k [t_i], \end{equation}$$ -where $T$ denotes the input sequence length, $t_i$ denotes the ground-truth token at the $i$ -th position, and $P_i^k [t_i]$ denotes the corresponding prediction probability of $t_i$ , given by the $k$ -th MTP module. Finally, we compute the average of the MTP losses across all depths and multiply it by a weighting factor $\lambda$ to obtain the overall MTP loss $\mathcal{L}_{\text{MTP}}$ , which serves as an additional training objective for DeepSeek-V3: +where $T$ denotes the input sequence length, $t_i$ denotes the ground-truth token at the $i$-th position, and $P_i^k [t_i]$ denotes the corresponding prediction probability of $t_i$, given by the $k$-th MTP module. Finally, we compute the average of the MTP losses across all depths and multiply it by a weighting factor $\lambda$ to obtain the overall MTP loss $\mathcal{L}_{\text{MTP}}$, which serves as an additional training objective for DeepSeek-V3: $$\begin{equation} \mathcal{L}_{\text{MTP}} = \frac{\lambda}{D} \sum_{k=1}^{D} \mathcal{L}_{\text{MTP}}^{k}. @@ -211,9 +211,9 @@ Example DualPipe scheduling for 8 PP ranks and 20 micro-batches in two direction -In addition, even in more general scenarios without a heavy communication burden, DualPipe still exhibits efficiency advantages. In Table[tab:dualpipe-bubble], we summarize the pipeline bubbles and memory usage across different PP methods. As shown in the table, compared with ZB1P[zerobubble] and 1F1B[pipedream], DualPipe significantly reduces the pipeline bubbles while only increasing the peak activation memory by $\frac{1}{PP}$ times. Although DualPipe requires keeping two copies of the model parameters, this does not significantly increase the memory consumption since we use a large EP size during training. Compared with Chimera[chimera], DualPipe only requires that the pipeline stages and micro-batches be divisible by 2, without requiring micro-batches to be divisible by pipeline stages. In addition, for DualPipe, neither the bubbles nor activation memory will increase as the number of micro-batches grows. +In addition, even in more general scenarios without a heavy communication burden, DualPipe still exhibits efficiency advantages. In Table[tab:dualpipe-bubble], we summarize the pipeline bubbles and memory usage across different PP methods. As shown in the table, compared with ZB1P[zerobubble] and 1F1B[pipedream], DualPipe significantly reduces the pipeline bubbles while only increasing the peak activation memory by $\frac{1}{PP}$ times. Although DualPipe requires keeping two copies of the model parameters, this does not significantly increase the memory consumption since we use a large EP size during training. Compared with Chimera[chimera], DualPipe only requires that the pipeline stages and micro-batches be divisible by 2, without requiring micro-batches to be divisible by pipeline stages. In addition, for DualPipe, neither the bubbles nor activation memory will increase as the number of micro-batches grows. -Comparison of pipeline bubbles and memory usage across different pipeline parallel methods. $F$ denotes the execution time of a forward chunk, $B$ denotes the execution time of a full backward chunk, $W$ denotes the execution time of a "backward for weights" chunk, and $F\&B$ denotes the execution time of two mutually overlapped forward and backward chunks. +Comparison of pipeline bubbles and memory usage across different pipeline parallel methods. $F$ denotes the execution time of a forward chunk, $B$ denotes the execution time of a full backward chunk, $W$ denotes the execution time of a "backward for weights" chunk, and $F\&B$ denotes the execution time of two mutually overlapped forward and backward chunks. | Method | Bubble | Parameter | Activation | | - | - | - | - | @@ -224,7 +224,7 @@ Comparison of pipeline bubbles and memory usage across different pipeline parall #### Efficient Implementation of Cross-Node All-to-All Communication -In order to ensure sufficient computational performance for DualPipe, we customize efficient cross-node all-to-all communication kernels (including dispatching and combining) to conserve the number of SMs dedicated to communication. The implementation of the kernels is co-designed with the MoE gating algorithm and the network topology of our cluster. To be specific, in our cluster, cross-node GPUs are fully interconnected with IB, and intra-node communications are handled via NVLink. NVLink offers a bandwidth of 160 GB/s, roughly 3.2 times that of IB (50 GB/s). To effectively leverage the different bandwidths of IB and NVLink, we limit each token to be dispatched to at most 4 nodes, thereby reducing IB traffic. For each token, when its routing decision is made, it will first be transmitted via IB to the GPUs with the same in-node index on its target nodes. Once it reaches the target nodes, we will endeavor to ensure that it is instantaneously forwarded via NVLink to specific GPUs that host their target experts, without being blocked by subsequently arriving tokens. In this way, communications via IB and NVLink are fully overlapped, and each token can efficiently select an average of 3.2 experts per node without incurring additional overhead from NVLink. This implies that, although DeepSeek-V3 selects only 8 routed experts in practice, it can scale up this number to a maximum of 13 experts (4 nodes $\times$ 3.2 experts/node) while preserving the same communication cost. Overall, under such a communication strategy, only 20 SMs are sufficient to fully utilize the bandwidths of IB and NVLink. +In order to ensure sufficient computational performance for DualPipe, we customize efficient cross-node all-to-all communication kernels (including dispatching and combining) to conserve the number of SMs dedicated to communication. The implementation of the kernels is co-designed with the MoE gating algorithm and the network topology of our cluster. To be specific, in our cluster, cross-node GPUs are fully interconnected with IB, and intra-node communications are handled via NVLink. NVLink offers a bandwidth of 160 GB/s, roughly 3.2 times that of IB (50 GB/s). To effectively leverage the different bandwidths of IB and NVLink, we limit each token to be dispatched to at most 4 nodes, thereby reducing IB traffic. For each token, when its routing decision is made, it will first be transmitted via IB to the GPUs with the same in-node index on its target nodes. Once it reaches the target nodes, we will endeavor to ensure that it is instantaneously forwarded via NVLink to specific GPUs that host their target experts, without being blocked by subsequently arriving tokens. In this way, communications via IB and NVLink are fully overlapped, and each token can efficiently select an average of 3.2 experts per node without incurring additional overhead from NVLink. This implies that, although DeepSeek-V3 selects only 8 routed experts in practice, it can scale up this number to a maximum of 13 experts (4 nodes $\times$ 3.2 experts/node) while preserving the same communication cost. Overall, under such a communication strategy, only 20 SMs are sufficient to fully utilize the bandwidths of IB and NVLink. In detail, we employ the warp specialization technique[warp-spec] and partition 20 SMs into 10 communication channels. During the dispatching process, (1) IB sending, (2) IB-to-NVLink forwarding, and (3) NVLink receiving are handled by respective warps. The number of warps allocated to each communication task is dynamically adjusted according to the actual workload across all SMs. Similarly, during the combining process, (1) NVLink sending, (2) NVLink-to-IB forwarding and accumulation, and (3) IB receiving and accumulation are also handled by dynamically adjusted warps. In addition, both dispatching and combining kernels overlap with the computation stream, so we also consider their impact on other SM computation kernels. Specifically, we employ customized PTX (Parallel Thread Execution) instructions and auto-tune the communication chunk size, which significantly reduces the use of the L2 cache and the interference to other SMs. @@ -246,7 +246,7 @@ The overall mixed precision framework with FP8 data format. For clarification, o -Inspired by recent advances in low-precision training[fp8lm, llm.int8, 8-bit-numerical], we propose a fine-grained mixed precision framework utilizing the FP8 data format for training DeepSeek-V3. While low-precision training holds great promise, it is often limited by the presence of outliers in activations, weights, and gradients[massiveoutlier, understandoutlier, scalefp8train]. Although significant progress has been made in inference quantization[xiao2023smoothquant, frantar2022gptq], there are relatively few studies demonstrating successful application of low-precision techniques in large-scale language model pre-training[scalefp8train]. To address this challenge and effectively extend the dynamic range of the FP8 format, we introduce a fine-grained quantization strategy: tile-wise grouping with $1\times N_c$ elements or block-wise grouping with $N_c\times N_c$ elements. The associated dequantization overhead is largely mitigated under our increased-precision accumulation process, a critical aspect for achieving accurate FP8 General Matrix Multiplication(GEMM). Moreover, to further reduce memory and communication overhead in MoE training, we cache and dispatch activations in FP8, while storing low-precision optimizer states in BF16. We validate the proposed FP8 mixed precision framework on two model scales similar to DeepSeek-V2-Lite and DeepSeek-V2, training for approximately 1 trillion tokens (see more details in Appendix[app:fp8\_cp\_bf16]). Notably, compared with the BF16 baseline, the relative loss error of our FP8-training model remains consistently below 0.25%, a level well within the acceptable range of training randomness. +Inspired by recent advances in low-precision training[fp8lm, llm.int8, 8-bit-numerical], we propose a fine-grained mixed precision framework utilizing the FP8 data format for training DeepSeek-V3. While low-precision training holds great promise, it is often limited by the presence of outliers in activations, weights, and gradients[massiveoutlier, understandoutlier, scalefp8train]. Although significant progress has been made in inference quantization[xiao2023smoothquant, frantar2022gptq], there are relatively few studies demonstrating successful application of low-precision techniques in large-scale language model pre-training[scalefp8train]. To address this challenge and effectively extend the dynamic range of the FP8 format, we introduce a fine-grained quantization strategy: tile-wise grouping with $1\times N_c$ elements or block-wise grouping with $N_c\times N_c$ elements. The associated dequantization overhead is largely mitigated under our increased-precision accumulation process, a critical aspect for achieving accurate FP8 General Matrix Multiplication(GEMM). Moreover, to further reduce memory and communication overhead in MoE training, we cache and dispatch activations in FP8, while storing low-precision optimizer states in BF16. We validate the proposed FP8 mixed precision framework on two model scales similar to DeepSeek-V2-Lite and DeepSeek-V2, training for approximately 1 trillion tokens (see more details in Appendix[app:fp8\_cp\_bf16]). Notably, compared with the BF16 baseline, the relative loss error of our FP8-training model remains consistently below 0.25%, a level well within the acceptable range of training randomness. #### Mixed Precision Framework @@ -256,7 +256,7 @@ Firstly, in order to accelerate model training, the majority of core computation Despite the efficiency advantage of the FP8 format, certain operators still require a higher precision due to their sensitivity to low-precision computations. Besides, some low-cost operators can also utilize a higher precision with a negligible overhead to the overall training cost. For this reason, after careful investigations, we maintain the original precision (e.g., BF16 or FP32) for the following components: the embedding module, the output head, MoE gating modules, normalization operators, and attention operators. These targeted retentions of high precision ensure stable training dynamics for DeepSeek-V3. To further guarantee numerical stability, we store the master weights, weight gradients, and optimizer states in higher precision. While these high-precision components incur some memory overheads, their impact can be minimized through efficient sharding across multiple DP ranks in our distributed training system. -(a) We propose a fine-grained quantization method to mitigate quantization errors caused by feature outliers; for illustration simplicity, only Fprop is illustrated. (b) In conjunction with our quantization strategy, we improve the FP8 GEMM precision by promoting to CUDA Cores at an interval of $N_C=128$ elements MMA for the high-precision accumulation. +(a) We propose a fine-grained quantization method to mitigate quantization errors caused by feature outliers; for illustration simplicity, only Fprop is illustrated. (b) In conjunction with our quantization strategy, we improve the FP8 GEMM precision by promoting to CUDA Cores at an interval of $N_C=128$ elements MMA for the high-precision accumulation. @@ -272,9 +272,9 @@ Notably, our fine-grained quantization strategy is highly consistent with the id Increasing Accumulation Precision. Low-precision GEMM operations often suffer from underflow issues, and their accuracy largely depends on high-precision accumulation, which is commonly performed in an FP32 precision[bf16train, fp16train]. However, we observe that the accumulation precision of FP8 GEMM on NVIDIA H800 GPUs is limited to retaining around 14 bits, which is significantly lower than FP32 accumulation precision. This problem will become more pronounced when the inner dimension K is large[switchback], a typical scenario in large-scale model training where the batch size and model width are increased. Taking GEMM operations of two random matrices with K = 4096 for example, in our preliminary test, the limited accumulation precision in Tensor Cores results in a maximum relative error of nearly 2%. Despite these problems, the limited accumulation precision is still the default option in a few FP8 frameworks[transformerengine], severely constraining the training accuracy. -In order to address this issue, we adopt the strategy of promotion to CUDA Cores for higher precision[Thakkar\_CUTLASS\_2023]. The process is illustrated in Figure[fig:fp8\_quantization] (b). To be specific, during MMA (Matrix Multiply-Accumulate) execution on Tensor Cores, intermediate results are accumulated using the limited bit width. Once an interval of $N_C$ is reached, these partial results will be copied to FP32 registers on CUDA Cores, where full-precision FP32 accumulation is performed. As mentioned before, our fine-grained quantization applies per-group scaling factors along the inner dimension K. These scaling factors can be efficiently multiplied on the CUDA Cores as the dequantization process with minimal additional computational cost. +In order to address this issue, we adopt the strategy of promotion to CUDA Cores for higher precision[Thakkar\_CUTLASS\_2023]. The process is illustrated in Figure[fig:fp8\_quantization] (b). To be specific, during MMA (Matrix Multiply-Accumulate) execution on Tensor Cores, intermediate results are accumulated using the limited bit width. Once an interval of $N_C$ is reached, these partial results will be copied to FP32 registers on CUDA Cores, where full-precision FP32 accumulation is performed. As mentioned before, our fine-grained quantization applies per-group scaling factors along the inner dimension K. These scaling factors can be efficiently multiplied on the CUDA Cores as the dequantization process with minimal additional computational cost. -It is worth noting that this modification reduces the WGMMA (Warpgroup-level Matrix Multiply-Accumulate) instruction issue rate for a single warpgroup. However, on the H800 architecture, it is typical for two WGMMA to persist concurrently: while one warpgroup performs the promotion operation, the other is able to execute the MMA operation. This design enables overlapping of the two operations, maintaining high utilization of Tensor Cores. Based on our experiments, setting $N_C=128$ elements, equivalent to 4 WGMMAs, represents the minimal accumulation interval that can significantly improve precision without introducing substantial overhead. +It is worth noting that this modification reduces the WGMMA (Warpgroup-level Matrix Multiply-Accumulate) instruction issue rate for a single warpgroup. However, on the H800 architecture, it is typical for two WGMMA to persist concurrently: while one warpgroup performs the promotion operation, the other is able to execute the MMA operation. This design enables overlapping of the two operations, maintaining high utilization of Tensor Cores. Based on our experiments, setting $N_C=128$ elements, equivalent to 4 WGMMAs, represents the minimal accumulation interval that can significantly improve precision without introducing substantial overhead. Mantissa over Exponents. In contrast to the hybrid FP8 format adopted by prior work [transformerengine, fp8lm, hfp8], which uses E4M3 (4-bit exponent and 3-bit mantissa) in Fprop and E5M2 (5-bit exponent and 2-bit mantissa) in Dgrad and Wgrad, we adopt the E4M3 format on all tensors for higher precision. We attribute the feasibility of this approach to our fine-grained quantization strategy, i.e., tile and block-wise scaling. By operating on smaller element groups, our methodology effectively shares exponent bits among these grouped elements, mitigating the impact of the limited dynamic range. @@ -335,9 +335,9 @@ We aspire to see future vendors developing hardware that offloads these communic #### Compute Hardware -Higher FP8 GEMM Accumulation Precision in Tensor Cores. In the current Tensor Core implementation of the NVIDIA Hopper architecture, FP8 GEMM suffers from limited accumulation precision. After aligning 32 mantissa products by right-shifting based on the maximum exponent, the Tensor Core only uses the highest 14 bits of each mantissa product for addition, and truncates bits exceeding this range. The accumulation of addition results into registers also employs 14-bit precision. Our implementation partially mitigates the limitation by accumulating the addition results of 128 FP8 $\times$ FP8 multiplications into registers with FP32 precision in the CUDA core. Although helpful in achieving successful FP8 training, it is merely a compromise due to the Hopper architecture's hardware deficiency in FP8 GEMM accumulation precision. Future chips need to adopt higher precision. +Higher FP8 GEMM Accumulation Precision in Tensor Cores. In the current Tensor Core implementation of the NVIDIA Hopper architecture, FP8 GEMM suffers from limited accumulation precision. After aligning 32 mantissa products by right-shifting based on the maximum exponent, the Tensor Core only uses the highest 14 bits of each mantissa product for addition, and truncates bits exceeding this range. The accumulation of addition results into registers also employs 14-bit precision. Our implementation partially mitigates the limitation by accumulating the addition results of 128 FP8$\times$FP8 multiplications into registers with FP32 precision in the CUDA core. Although helpful in achieving successful FP8 training, it is merely a compromise due to the Hopper architecture's hardware deficiency in FP8 GEMM accumulation precision. Future chips need to adopt higher precision. -Support for Tile- and Block-Wise Quantization. Current GPUs only support per-tensor quantization, lacking the native support for fine-grained quantization like our tile- and block-wise quantization. In the current implementation, when the $N_C$ interval is reached, the partial results will be copied from Tensor Cores to CUDA cores, multiplied by the scaling factors, and added to FP32 registers on CUDA cores. Although the dequantization overhead is significantly mitigated combined with our precise FP32 accumulation strategy, the frequent data movements between Tensor Cores and CUDA cores still limit the computational efficiency. Therefore, we recommend future chips to support fine-grained quantization by enabling Tensor Cores to receive scaling factors and implement MMA with group scaling. In this way, the whole partial sum accumulation and dequantization can be completed directly inside Tensor Cores until the final result is produced, avoiding frequent data movements. +Support for Tile- and Block-Wise Quantization. Current GPUs only support per-tensor quantization, lacking the native support for fine-grained quantization like our tile- and block-wise quantization. In the current implementation, when the $N_C$ interval is reached, the partial results will be copied from Tensor Cores to CUDA cores, multiplied by the scaling factors, and added to FP32 registers on CUDA cores. Although the dequantization overhead is significantly mitigated combined with our precise FP32 accumulation strategy, the frequent data movements between Tensor Cores and CUDA cores still limit the computational efficiency. Therefore, we recommend future chips to support fine-grained quantization by enabling Tensor Cores to receive scaling factors and implement MMA with group scaling. In this way, the whole partial sum accumulation and dequantization can be completed directly inside Tensor Cores until the final result is produced, avoiding frequent data movements. Support for Online Quantization. The current implementations struggle to effectively support online quantization, despite its effectiveness demonstrated in our research. In the existing process, we need to read 128 BF16 activation values (the output of the previous computation) from HBM (High Bandwidth Memory) for quantization, and the quantized FP8 values are then written back to HBM, only to be read again for MMA. To address this inefficiency, we recommend that future chips integrate FP8 cast and TMA (Tensor Memory Accelerator) access into a single fused operation, so quantization can be completed during the transfer of activations from global memory to shared memory, avoiding frequent memory reads and writes. We also recommend supporting a warp-level cast instruction for speedup, which further facilitates the better fusion of layer normalization and FP8 cast. Alternatively, a near-memory computing approach can be adopted, where compute logic is placed near the HBM. In this case, BF16 elements can be cast to FP8 directly as they are read from HBM into the GPU, reducing off-chip memory access by roughly 50%. @@ -361,9 +361,9 @@ The tokenizer for DeepSeek-V3 employs Byte-level BPE[shibata1999byte] with an ex ### Hyper-Parameters -Model Hyper-Parameters. We set the number of Transformer layers to 61 and the hidden dimension to 7168. All learnable parameters are randomly initialized with a standard deviation of 0.006. In MLA, we set the number of attention heads $n_h$ to 128 and the per-head dimension $d_h$ to 128. The KV compression dimension $d_c$ is set to 512, and the query compression dimension $d_c^{\prime}$ is set to 1536. For the decoupled queries and key, we set the per-head dimension $d_h^R$ to 64. We substitute all FFNs except for the first three layers with MoE layers. Each MoE layer consists of 1 shared expert and 256 routed experts, where the intermediate hidden dimension of each expert is 2048. Among the routed experts, 8 experts will be activated for each token, and each token will be ensured to be sent to at most 4 nodes. The multi-token prediction depth $D$ is set to 1, i.e., besides the exact next token, each token will predict one additional token. As DeepSeek-V2, DeepSeek-V3 also employs additional RMSNorm layers after the compressed latent vectors, and multiplies additional scaling factors at the width bottlenecks. Under this configuration, DeepSeek-V3 comprises 671B total parameters, of which 37B are activated for each token. +Model Hyper-Parameters. We set the number of Transformer layers to 61 and the hidden dimension to 7168. All learnable parameters are randomly initialized with a standard deviation of 0.006. In MLA, we set the number of attention heads $n_h$ to 128 and the per-head dimension $d_h$ to 128. The KV compression dimension $d_c$ is set to 512, and the query compression dimension $d_c^{\prime}$ is set to 1536. For the decoupled queries and key, we set the per-head dimension $d_h^R$ to 64. We substitute all FFNs except for the first three layers with MoE layers. Each MoE layer consists of 1 shared expert and 256 routed experts, where the intermediate hidden dimension of each expert is 2048. Among the routed experts, 8 experts will be activated for each token, and each token will be ensured to be sent to at most 4 nodes. The multi-token prediction depth $D$ is set to 1, i.e., besides the exact next token, each token will predict one additional token. As DeepSeek-V2, DeepSeek-V3 also employs additional RMSNorm layers after the compressed latent vectors, and multiplies additional scaling factors at the width bottlenecks. Under this configuration, DeepSeek-V3 comprises 671B total parameters, of which 37B are activated for each token. -Training Hyper-Parameters. We employ the AdamW optimizer[adamW] with hyper-parameters set to $\beta_1=0.9$ , $\beta_2=0.95$ , and $\mathrm{weight\_decay}=0.1$ . We set the maximum sequence length to 4K during pre-training, and pre-train DeepSeek-V3 on 14.8T tokens. As for the learning rate scheduling, we first linearly increase it from 0 to $2.2 \times 10^{-4}$ during the first 2K steps. Then, we keep a constant learning rate of $2.2 \times 10^{-4}$ until the model consumes 10T training tokens. Subsequently, we gradually decay the learning rate to $2.2 \times 10^{-5}$ in 4.3T tokens, following a cosine decay curve. During the training of the final 500B tokens, we keep a constant learning rate of $2.2 \times 10^{-5}$ in the first 333B tokens, and switch to another constant learning rate of $7.3 \times 10^{-6}$ in the remaining 167B tokens. The gradient clipping norm is set to 1.0. We employ a batch size scheduling strategy, where the batch size is gradually increased from 3072 to 15360 in the training of the first 469B tokens, and then keeps 15360 in the remaining training. We leverage pipeline parallelism to deploy different layers of a model on different GPUs, and for each layer, the routed experts will be uniformly deployed on 64 GPUs belonging to 8 nodes. As for the node-limited routing, each token will be sent to at most 4 nodes (i.e., $M=4$ ). For auxiliary-loss-free load balancing, we set the bias update speed $\gamma$ to 0.001 for the first 14.3T tokens, and to 0.0 for the remaining 500B tokens. For the balance loss, we set $\alpha$ to 0.0001, just to avoid extreme imbalance within any single sequence. The MTP loss weight $\lambda$ is set to 0.3 for the first 10T tokens, and to 0.1 for the remaining 4.8T tokens. +Training Hyper-Parameters. We employ the AdamW optimizer[adamW] with hyper-parameters set to $\beta_1=0.9$, $\beta_2=0.95$, and $\mathrm{weight\_decay}=0.1$. We set the maximum sequence length to 4K during pre-training, and pre-train DeepSeek-V3 on 14.8T tokens. As for the learning rate scheduling, we first linearly increase it from 0 to $2.2 \times 10^{-4}$ during the first 2K steps. Then, we keep a constant learning rate of $2.2 \times 10^{-4}$ until the model consumes 10T training tokens. Subsequently, we gradually decay the learning rate to $2.2 \times 10^{-5}$ in 4.3T tokens, following a cosine decay curve. During the training of the final 500B tokens, we keep a constant learning rate of $2.2 \times 10^{-5}$ in the first 333B tokens, and switch to another constant learning rate of $7.3 \times 10^{-6}$ in the remaining 167B tokens. The gradient clipping norm is set to 1.0. We employ a batch size scheduling strategy, where the batch size is gradually increased from 3072 to 15360 in the training of the first 469B tokens, and then keeps 15360 in the remaining training. We leverage pipeline parallelism to deploy different layers of a model on different GPUs, and for each layer, the routed experts will be uniformly deployed on 64 GPUs belonging to 8 nodes. As for the node-limited routing, each token will be sent to at most 4 nodes (i.e., $M=4$). For auxiliary-loss-free load balancing, we set the bias update speed $\gamma$ to 0.001 for the first 14.3T tokens, and to 0.0 for the remaining 500B tokens. For the balance loss, we set $\alpha$ to 0.0001, just to avoid extreme imbalance within any single sequence. The MTP loss weight $\lambda$ is set to 0.3 for the first 10T tokens, and to 0.1 for the remaining 4.8T tokens. Evaluation results on the Needle In A Haystack (NIAH) tests. DeepSeek-V3 performs well across all context window lengths up to 128K. @@ -371,7 +371,7 @@ Evaluation results on the Needle In A Haystack (NIAH) tests. DeepSeek-V3 perform ### Long Context Extension -We adopt a similar approach to DeepSeek-V2[dsvii] to enable long context capabilities in DeepSeek-V3. After the pre-training stage, we apply YaRN[peng2023yarn] for context extension and perform two additional training phases, each comprising 1000 steps, to progressively expand the context window from 4K to 32K and then to 128K. The YaRN configuration is consistent with that used in DeepSeek-V2, being applied exclusively to the decoupled shared key $\mathbf{k}^R_t$ . The hyper-parameters remain identical across both phases, with the scale $s = 40$ , $\alpha = 1$ , $\beta = 32$ , and the scaling factor $\sqrt{t} = 0.1 \ln{s} + 1$ . In the first phase, the sequence length is set to 32K, and the batch size is 1920. During the second phase, the sequence length is increased to 128K, and the batch size is reduced to 480. The learning rate for both phases is set to $7.3 \times 10^{-6}$ , matching the final learning rate from the pre-training stage. +We adopt a similar approach to DeepSeek-V2[dsvii] to enable long context capabilities in DeepSeek-V3. After the pre-training stage, we apply YaRN[peng2023yarn] for context extension and perform two additional training phases, each comprising 1000 steps, to progressively expand the context window from 4K to 32K and then to 128K. The YaRN configuration is consistent with that used in DeepSeek-V2, being applied exclusively to the decoupled shared key $\mathbf{k}^R_t$. The hyper-parameters remain identical across both phases, with the scale $s = 40$, $\alpha = 1$, $\beta = 32$, and the scaling factor $\sqrt{t} = 0.1 \ln{s} + 1$. In the first phase, the sequence length is set to 32K, and the batch size is 1920. During the second phase, the sequence length is increased to 128K, and the batch size is reduced to 480. The learning rate for both phases is set to $7.3 \times 10^{-6}$, matching the final learning rate from the pre-training stage. Through this two-phase extension training, DeepSeek-V3 is capable of handling inputs up to 128K in length while maintaining strong performance. Figure[fig:long\_context] illustrates that DeepSeek-V3, following supervised fine-tuning, achieves notable performance on the "Needle In A Haystack" (NIAH) test, demonstrating consistent robustness across context window lengths up to 128K. @@ -531,7 +531,7 @@ Upon completing the RL training phase, we implement rejection sampling to curate Non-Reasoning Data. For non-reasoning data, such as creative writing, role-play, and simple question answering, we utilize DeepSeek-V2.5 to generate responses and enlist human annotators to verify the accuracy and correctness of the data. -SFT Settings. We fine-tune DeepSeek-V3-Base for two epochs using the SFT dataset, using the cosine decay learning rate scheduling that starts at $5 \times 10^{-6}$ and gradually decreases to $1 \times 10^{-6}$ . During training, each single sequence is packed from multiple samples. However, we adopt a sample masking strategy to ensure that these examples remain isolated and mutually invisible. +SFT Settings. We fine-tune DeepSeek-V3-Base for two epochs using the SFT dataset, using the cosine decay learning rate scheduling that starts at $5 \times 10^{-6}$ and gradually decreases to $1 \times 10^{-6}$. During training, each single sequence is packed from multiple samples. However, we adopt a sample masking strategy to ensure that these examples remain isolated and mutually invisible. ### Reinforcement Learning @@ -545,7 +545,7 @@ Model-Based RM. For questions with free-form ground-truth answers, we rely on th #### Group Relative Policy Optimization -Similar to DeepSeek-V2[dsvii], we adopt Group Relative Policy Optimization(GRPO)[deepseekmath], which foregoes the critic model that is typically with the same size as the policy model, and estimates the baseline from group scores instead. Specifically, for each question $q$ , GRPO samples a group of outputs $\{o_1, o_2, \cdots, o_G\}$ from the old policy model $\pi_{\theta_{old}}$ and then optimizes the policy model $\pi_{\theta}$ by maximizing the following objective: +Similar to DeepSeek-V2[dsvii], we adopt Group Relative Policy Optimization(GRPO)[deepseekmath], which foregoes the critic model that is typically with the same size as the policy model, and estimates the baseline from group scores instead. Specifically, for each question $q$, GRPO samples a group of outputs $\{o_1, o_2, \cdots, o_G\}$ from the old policy model $\pi_{\theta_{old}}$ and then optimizes the policy model $\pi_{\theta}$ by maximizing the following objective: $$\begin{equation} \begin{split} @@ -559,7 +559,7 @@ $$\begin{equation} \mathbb{D}_{KL}\left(\pi_{\theta} || \pi_{ref}\right) = \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)}- \log\frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - 1, \end{equation}$$ -where $\epsilon$ and $\beta$ are hyper-parameters; $\pi_{ref}$ is the reference model; and $A_i$ is the advantage, derived from the rewards $\{r_1, r_2, \ldots, r_G\}$ corresponding to the outputs within each group: +where $\epsilon$ and $\beta$ are hyper-parameters; $\pi_{ref}$ is the reference model; and $A_i$ is the advantage, derived from the rewards $\{r_1, r_2, \ldots, r_G\}$ corresponding to the outputs within each group: $$\begin{equation} A_i = \frac{r_i - {\operatorname{mean}(\{r_1, r_2, \cdots, r_G\})}}{{\operatorname{std}(\{r_1, r_2, \cdots, r_G\})}}. diff --git a/tests/data/latex/groundtruth/2501.00089_main.tex.dclg b/tests/data/latex/groundtruth/2501.00089_main.tex.dclg index 6cfc2ef273..69b3642423 100644 --- a/tests/data/latex/groundtruth/2501.00089_main.tex.dclg +++ b/tests/data/latex/groundtruth/2501.00089_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass[apj,twocolumn,twocolappendix]{aastex631} @@ -70,13 +70,13 @@ We select galaxies from the SDSS Main Galaxy Sample [2002AJ....124.1810S,sdssdr7] that have emission line signal-to-noise ratios greater than 3 for [N2] \lambda6584 -, H + , H \alpha \lambda6564 , [O3] \lambda5007 -, and H + , and H \beta \lambda4861 @@ -101,7 +101,7 @@ k=4 . Later, in Section[ssec:comparison-pca], we vary k \in \{2, 3, 4, 6, 8\} -. Thus, the SFNet learns a representation of each galaxy using just a few features out of a library of 512 possible features. Critically, the features activate directly after the convolution layers, so that morphological features are localized in pixel space. + . Thus, the SFNet learns a representation of each galaxy using just a few features out of a library of 512 possible features. Critically, the features activate directly after the convolution layers, so that morphological features are localized in pixel space. The resnet18 backbone of the model is initialized to ImageNet-pretrained weights [5206848], and we update model parameters by minimizing the root mean squared error. We randomly designate 20% of objects for validation, and train on the remainder. Random flips are applied for data augmentation. We train for 20 epochs using the ranger optimizer [wright2021ranger21synergisticdeeplearning] and an initial learning rate of 0.1 with a flat+cosine annealing schedule. All code and the trained models presented here can be found in our public Github repository: https://github.com/jwuphysics/sparse-feature-networks. Results @@ -110,16 +110,15 @@ A_{\tt SL\,17} and A_{\tt Z\,256} -, respectively. + , respectively. Emission line fluxes We train a SFNet to predict the spectral line fluxes for [N2], H \alpha -, [O3], and H + , [O3], and H \beta - - \alpha + \alpha against [O3]/H \beta comprise the BPT diagram [1981PASP...93....5B], which is commonly used to differentiate activate galactic nuclei (AGN) from star-forming galaxies. Other physical processes can also affect these line strengths, including stellar evolution/age, AGN, gas metallicity, gas physical state, and dust attenuation. @@ -136,7 +135,7 @@ \beta , indicating harder ionizing radiation and higher gas density [2019ARAA..57..511K]. Meanwhile, the opposite appears to be true for SL138 (or at least, for non-AGN with high A_{\tt SL\,138} -). Additional features contain information about metallicity and stellar populations. In Table[tab:features], we offer physical interpretations for these features. + ). Additional features contain information about metallicity and stellar populations. In Table[tab:features], we offer physical interpretations for these features. @@ -161,7 +160,7 @@ 0.087dex using only two image features, Z61 and Z256, which are activated 99.6% and 87.9% of the time respectively. If we also incorporate the third and fourth most frequent activations (40.2% and 11.9%, respectively), then we can achieve 0.086 -dex error. This level of performance suggests that our SFNet is extremely accurate (see Section[ssec:performance-interpretability] for further discussion). + dex error. This level of performance suggests that our SFNet is extremely accurate (see Section[ssec:performance-interpretability] for further discussion). In the bottom two rows of Table[tab:features], we describe the two main features used to predict metallicity. Z61 is associated with galaxies with prominent red bulges and is linked to higher metallicity. It activates strongly for red ellipticals or face-on disk galaxies (often with two loosely wound spiral arms; see, e.g., 2019MNRAS.487.1808M for more on the correlations between galaxy properties and spiral arm pitch angle). Feature Z256 is associated with blue, edge-on disk galaxies and lower metallicity. [2004ApJ...613..898T] noted that metal-poor galaxies tended to have highly inclined disk morphologies, and attributed this effect to observational bias. SDSS spectroscopic fibers collect light from lower- @@ -175,7 +174,7 @@ dex error. This level of performance suggests that our SFNet is extremely accura @@ -187,11 +186,11 @@ dex error. This level of performance suggests that our SFNet is extremely accura \alpha and [O3]/H\beta -; we might interpret these morphological features as indicators of spectral hardness and low ionization (nuclear) emission-line regions, respectively. Meanwhile, S322 correlates with [O3]/H + ; we might interpret these morphological features as indicators of spectral hardness and low ionization (nuclear) emission-line regions, respectively. Meanwhile, S322 correlates with [O3]/H \beta but anticorrelates with [N2]/H\alpha -, suggesting that it is associated with harder ionizing spectra. + , suggesting that it is associated with harder ionizing spectra. Performance versus interpretability @@ -203,7 +202,7 @@ dex error. This level of performance suggests that our SFNet is extremely accura 0.085dex error [2019MNRAS.484.4683W]; note that the systematic scatter is \sim 0.03 -dex. Again, this suggests that SFNets do not sacrifice performance in order to gain interpretability. + dex. Again, this suggests that SFNets do not sacrifice performance in order to gain interpretability. Comparison to PCA @@ -223,12 +222,12 @@ dex. Again, this suggests that SFNets do not sacrifice performance in order to g k principal components from dense CNN activations as features, again using the same training and validation split, to predict both the metallicity and spectral line strengths. For comparison, we have also re-trained the SFNet using k \in \{2, 3, 4, 6, 8\} -. We independently re-train the SFNet three times in order to estimate the mean and standard error on the prediction RMSE. + . We independently re-train the SFNet three times in order to estimate the mean and standard error on the prediction RMSE. We use the same training/validation split and re-initialize the model each time for each value of k -. Because we repeat the training process from scratch, the RMSE values presented in this section slightly differ from the ones reported in Section [sec:results]. + . Because we repeat the training process from scratch, the RMSE values presented in this section slightly differ from the ones reported in Section [sec:results]. The results are shown in Figure[fig:pca-comparison], and specific RMSE values are given in Table[tab:dimred].l cc cc[t!] 5 @@ -281,7 +280,7 @@ dex. Again, this suggests that SFNets do not sacrifice performance in order to g k=4 features (with significantly worse performance at k=2 -). + ). Our experiment shows that we can reduce the dimensionality of CNN feature activations via PCA, but the ensuing principal components are not always robust features for recovering the training targets (e.g., for metallicity). These difficulties may arise from superposition and polysemanticity, which cause the most important features to be entangled and spread across multiple CNN activations in highly non-linear ways. Since typical CNNs are not optimized with any sparsity constraint in mind, there is no guarantee that a linear combination of the learned features should be interpretable (although there are non-linear methods for finding optimal summary statistics; e.g., Charnock_2018). By forcing a CNN to be sparse during the training process, we find that SFNets can learn robust features and produce accurate predictions.Comparison to GalaxyZoo features @@ -298,16 +297,16 @@ dex. Again, this suggests that SFNets do not sacrifice performance in order to g First, we fit a linear model to the training dataset, and find poor performance on the validation dataset (error of 0.183 -dex). When we fit on the validation dataseti.e., if we attempt to memorize the answersthe error remains very high ( + dex). When we fit on the validation dataseti.e., if we attempt to memorize the answersthe error remains very high ( 0.181 -dex). This result demonstrates that no linear combination of Zoobot features can reconstruct galaxy metallicity. + dex). This result demonstrates that no linear combination of Zoobot features can reconstruct galaxy metallicity. Second, we fit an gradient-boosted decision tree (XGBoost) model to the training dataset, and achieve only 0.180 dex error on the validation dataset. However, when we cheat by fitting on the validation dataset, we can lower the error down to 0.085 -dex (comparable to the SFNet performance). + dex (comparable to the SFNet performance). Our experiments confirm that the Zoobot features indeed contain enough information to memorize the validation set, but that these features (i) cannot be linearly combined to reconstruct galaxy metallicity, and (ii) cannot generalize across the random training/validation split. We surmise that regular CNN features are not interpretable. Meanwhile, our SFNet is both performant and interpretable. @@ -352,7 +351,7 @@ dex (comparable to the SFNet performance). Polysemanticity means that any given neuron can also have multiple separate meanings. These semantic concepts may not even be correlated with each other! For example, a specific neuron in a regularly trained CNN might activate on features such as three-armed spiral galaxy and r --band light bleed from nearby saturated star. + -band light bleed from nearby saturated star. So rather than a one-to-one mapping of neurons to features, or vice versa, there is actually a many-to-many mapping. Multiple learned features can be distributed and superposed across many different neurons. Superposition and polysemanticity encapsulate why it is so challenging to understand neural networks, even in just a single layer. Sparse autoencoders and SFNets diff --git a/tests/data/latex/groundtruth/2501.00089_main.tex.json b/tests/data/latex/groundtruth/2501.00089_main.tex.json index 1afd99d029..24c6dee72f 100644 --- a/tests/data/latex/groundtruth/2501.00089_main.tex.json +++ b/tests/data/latex/groundtruth/2501.00089_main.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "main", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/latex/groundtruth/2501.00089_main.tex.md b/tests/data/latex/groundtruth/2501.00089_main.tex.md index 10a179d284..9138d69ce7 100644 --- a/tests/data/latex/groundtruth/2501.00089_main.tex.md +++ b/tests/data/latex/groundtruth/2501.00089_main.tex.md @@ -26,33 +26,33 @@ Two major challenges arise when we try to interpret physics from deep neural net Fortunately, there exists a strategy to combat these issues in ML. Sparse coding represents data using a small number of active elements from a larger set of basis functions [Olshausen1996,NIPS2006\_2d71b2ae], making it easier to inspect the individual features that contribute to ML model predictions [olah2017feature]. Recently, sparse ML algorithms have been used in the artificial intelligence community to disentangle the internal activations of large language models [radford2019language], and mitigate the problems of superposition and polysemanticity [makhzani2014ksparseautoencoders,cunningham2023sparseautoencodershighlyinterpretable,2024arXiv240800657O,templeton2024scaling]. Therefore, sparse coding can reveal the mechanics of how deep neural networks learn. -We introduce a novel, interpretable CNN for images: a Sparse Feature Network (SFNet). CNNs encode image data from a high-dimensional pixel space ( $n \sim 10^5$ pixels) into a lower-dimensional latent space ( $d \sim 10^3$ features). To disentangle the learned features, we enforce a $k$ -sparse constraint while training our ML model: only $k \ll d$ features are allowed to have non-zero activations for each image example. By keeping just the top $k$ activating features, sparse algorithms are forced to consolidate features into the fewest possible neurons. Our SFNet activates $k$ features per image in its penultimate layer, and makes predictions by using a linear combination of the sparse activations. Since we only add a top- $k$ constraint to a standard CNN architecture, this modification incurs zero extra computational cost or memory. +We introduce a novel, interpretable CNN for images: a Sparse Feature Network (SFNet). CNNs encode image data from a high-dimensional pixel space ($n \sim 10^5$ pixels) into a lower-dimensional latent space ($d \sim 10^3$ features). To disentangle the learned features, we enforce a $k$-sparse constraint while training our ML model: only $k \ll d$ features are allowed to have non-zero activations for each image example. By keeping just the top $k$ activating features, sparse algorithms are forced to consolidate features into the fewest possible neurons. Our SFNet activates $k$ features per image in its penultimate layer, and makes predictions by using a linear combination of the sparse activations. Since we only add a top-$k$ constraint to a standard CNN architecture, this modification incurs zero extra computational cost or memory. We train the SFNet to predict galaxy properties from image cutouts according to the methodology described in Section[sec:methodology]. In Section[sec:results], we show that the SFNet achieves robust performance while learning interpretable features. We discuss these results further in Section[sec:discussion], and state our conclusions in Section[sec:summary]. -Our SFNet architecture, which resembles a resnet18 modified with a penultimate Top-k layer to ensure interpretable, sparse image features. A 3x3 conv, 128, /2 block denotes a $3\times 3$ 2D convolution layer with 128 channels that downsamples the image size by a factor of 2. Each convolution layer is followed by batch normalization and then a ReLU activation function. Arrows show how inputs flow through the network, and when two inputs are sent as inputs to the same layer, they are concatenated together (i.e. a residual connection). +Our SFNet architecture, which resembles a resnet18 modified with a penultimate Top-k layer to ensure interpretable, sparse image features. A 3x3 conv, 128, /2 block denotes a $3\times 3$ 2D convolution layer with 128 channels that downsamples the image size by a factor of 2. Each convolution layer is followed by batch normalization and then a ReLU activation function. Arrows show how inputs flow through the network, and when two inputs are sent as inputs to the same layer, they are concatenated together (i.e. a residual connection). ## Methodology -We select galaxies from the SDSS Main Galaxy Sample [2002AJ....124.1810S,sdssdr7] that have emission line signal-to-noise ratios greater than 3 for [N2] $\lambda6584$ , H $\alpha$ $\lambda6564$ , [O3] $\lambda5007$ , and H $\beta$ $\lambda4861$ , where each line is designated by its rest wavelength in Angstroms. In addition to galaxy line fluxes, we compile physical properties derived from fitting spectral energy distribution models to SDSS photometry and spectra [2003MNRAS.346.1055K,2004MNRAS.351.1151B,2004ApJ...613..898T]. For all galaxies, we obtain $gri$ -band $144\times 144$ image cutouts resampled at $0.262$ arcsec per pixel resolution from the Legacy Survey website [2019AJ....157..168D]. Our SDSS sample comprises 250,207 galaxies in total. +We select galaxies from the SDSS Main Galaxy Sample [2002AJ....124.1810S,sdssdr7] that have emission line signal-to-noise ratios greater than 3 for [N2] $\lambda6584$, H$\alpha$ $\lambda6564$, [O3] $\lambda5007$, and H$\beta$ $\lambda4861$, where each line is designated by its rest wavelength in Angstroms. In addition to galaxy line fluxes, we compile physical properties derived from fitting spectral energy distribution models to SDSS photometry and spectra [2003MNRAS.346.1055K,2004MNRAS.351.1151B,2004ApJ...613..898T]. For all galaxies, we obtain $gri$-band $144\times 144$ image cutouts resampled at $0.262$ arcsec per pixel resolution from the Legacy Survey website [2019AJ....157..168D]. Our SDSS sample comprises 250,207 galaxies in total. -Our SFNet implementation is shown in Figure[fig:SFNet-architecture]. We use a CNN architecture identical to the resnet18 [he2015deepresiduallearningimage], except that we insert a top- $k$ operation before the final linear layer. This additional top- $k$ layer guarantees that each prediction is a linear combination of $k$ sparse features. We use $d=512$ latent features (after the average pooling layer) and set $k=4$ . Later, in Section[ssec:comparison-pca], we vary $k \in \{2, 3, 4, 6, 8\}$ . Thus, the SFNet learns a representation of each galaxy using just a few features out of a library of 512 possible features. Critically, the features activate directly after the convolution layers, so that morphological features are localized in pixel space. +Our SFNet implementation is shown in Figure[fig:SFNet-architecture]. We use a CNN architecture identical to the resnet18 [he2015deepresiduallearningimage], except that we insert a top-$k$ operation before the final linear layer. This additional top-$k$ layer guarantees that each prediction is a linear combination of $k$ sparse features. We use $d=512$ latent features (after the average pooling layer) and set $k=4$. Later, in Section[ssec:comparison-pca], we vary $k \in \{2, 3, 4, 6, 8\}$. Thus, the SFNet learns a representation of each galaxy using just a few features out of a library of 512 possible features. Critically, the features activate directly after the convolution layers, so that morphological features are localized in pixel space. The resnet18 backbone of the model is initialized to ImageNet-pretrained weights [5206848], and we update model parameters by minimizing the root mean squared error. We randomly designate 20% of objects for validation, and train on the remainder. Random flips are applied for data augmentation. We train for 20 epochs using the ranger optimizer [wright2021ranger21synergisticdeeplearning] and an initial learning rate of 0.1 with a flat+cosine annealing schedule. All code and the trained models presented here can be found in our public Github repository: https://github.com/jwuphysics/sparse-feature-networks. ## Results -Motivated by previous works that connect galaxy imaging with their physical properties [2019MNRAS.484.4683W,2020arXiv200912318W,2021MNRAS.506.3313G,2021ApJ...914..142H], we train the SFNet to predict spectroscopic line fluxes (Section[ssec:ionization]) and gas-phase metallicity ([ssec:metallicity]) directly from image cutouts. We identify the learned features using their sparse activation index, e.g., SL17 for the 17th feature of a SFNet trained to predict spectral lines fluxes, or Z256 for the 256th feature of a SFNet trained to predict gas-phase metallicity. Feature activations are scaled between 0 and 1, and we refer to these example activation strengths as $A_{\tt SL\,17}$ and $A_{\tt Z\,256}$ , respectively. +Motivated by previous works that connect galaxy imaging with their physical properties [2019MNRAS.484.4683W,2020arXiv200912318W,2021MNRAS.506.3313G,2021ApJ...914..142H], we train the SFNet to predict spectroscopic line fluxes (Section[ssec:ionization]) and gas-phase metallicity ([ssec:metallicity]) directly from image cutouts. We identify the learned features using their sparse activation index, e.g., SL17 for the 17th feature of a SFNet trained to predict spectral lines fluxes, or Z256 for the 256th feature of a SFNet trained to predict gas-phase metallicity. Feature activations are scaled between 0 and 1, and we refer to these example activation strengths as $A_{\tt SL\,17}$ and $A_{\tt Z\,256}$, respectively. ### Emission line fluxes -We train a SFNet to predict the spectral line fluxes for [N2], H $\alpha$ , [O3], and H $\beta$ . These lines can diagnose a galaxy's global ionization state; for example, the line ratios [N2]/H $\alpha$ against [O3]/H $\beta$ comprise the BPT diagram [1981PASP...93....5B], which is commonly used to differentiate activate galactic nuclei (AGN) from star-forming galaxies. Other physical processes can also affect these line strengths, including stellar evolution/age, AGN, gas metallicity, gas physical state, and dust attenuation. +We train a SFNet to predict the spectral line fluxes for [N2], H$\alpha$, [O3], and H$\beta$. These lines can diagnose a galaxy's global ionization state; for example, the line ratios [N2]/H$\alpha$ against [O3]/H$\beta$ comprise the BPT diagram [1981PASP...93....5B], which is commonly used to differentiate activate galactic nuclei (AGN) from star-forming galaxies. Other physical processes can also affect these line strengths, including stellar evolution/age, AGN, gas metallicity, gas physical state, and dust attenuation. The eight most frequently activated features explain 99.99% of the variance in the dataset, but there is significant correlation between them. The four most frequently activated features can still explain 91.6% of the variance; therefore, we restrict our investigation to these top four activations that correspond to features SL17, SL138, SL157, and SL322. -In Figure[fig:bpt-interpretation], we show galaxy image examples for the strongest activations, and where they appear in a BPT diagram. The four features reside in overlapping regions of the [O3]/H $\beta$ versus [N2]/H $\alpha$ space, but they all peak in distinct locations. For example, the locus of points for SL17 appear to be at higher [N2]/H $\alpha$ and [O3]/H $\beta$ , indicating harder ionizing radiation and higher gas density [2019ARAA..57..511K]. Meanwhile, the opposite appears to be true for SL138 (or at least, for non-AGN with high $A_{\tt SL\,138}$ ). Additional features contain information about metallicity and stellar populations. In Table[tab:features], we offer physical interpretations for these features. +In Figure[fig:bpt-interpretation], we show galaxy image examples for the strongest activations, and where they appear in a BPT diagram. The four features reside in overlapping regions of the [O3]/H$\beta$ versus [N2]/H$\alpha$ space, but they all peak in distinct locations. For example, the locus of points for SL17 appear to be at higher [N2]/H$\alpha$ and [O3]/H$\beta$, indicating harder ionizing radiation and higher gas density [2019ARAA..57..511K]. Meanwhile, the opposite appears to be true for SL138 (or at least, for non-AGN with high $A_{\tt SL\,138}$). Additional features contain information about metallicity and stellar populations. In Table[tab:features], we offer physical interpretations for these features. SFNet learned features when trained to predict optical emission lines. We show how each feature correlates with optical line ratios (BPT diagrams; left) and examples of the top nine image activations (right). For the BPT diagrams, colors denote scaled activation strength, ranging from black (zero) to dark magenta (low) to bright yellow (high). @@ -68,13 +68,13 @@ lcll[t!] 4 Image features learned by a SFNet to independently predict optical spectral line fluxes and metallicity. We only show features that are most frequently activated. -Feature $f_{\rm activated}$ Morphology Physical interpretation SL17 62.9% very blue, compact or merging extreme star formation, hard ionizing radiation SL138 87.0% low surface brightness, face-on low gas density, soft ionizing radiation SL157 95.8% red, elliptical old stellar populations, high mass, high metallicity SL322 62.9% blue, irregular low mass, low metallicity, star-forming Z61 99.6% red, face-on, bright core high metallicity Z256 87.9% blue, edge-on disks low metallicity +Feature $f_{\rm activated}$ Morphology Physical interpretation SL17 62.9% very blue, compact or merging extreme star formation, hard ionizing radiation SL138 87.0% low surface brightness, face-on low gas density, soft ionizing radiation SL157 95.8% red, elliptical old stellar populations, high mass, high metallicity SL322 62.9% blue, irregular low mass, low metallicity, star-forming Z61 99.6% red, face-on, bright core high metallicity Z256 87.9% blue, edge-on disks low metallicity ### Gas metallicity -We separately train a SFNet to predict the gas-phase metallicity, $Z_{\rm gas} = 12 +$ log(O/H), directly from images. We remove all objects with invalid estimates for metallicity, stellar mass, and star formation rate, leaving 117,223 galaxies from the SDSS Main Galaxy Sample. The scatter of metallicity is $0.207$ dex, and our trained SFNet can predict it to within $0.087$ dex using only two image features, Z61 and Z256, which are activated 99.6% and 87.9% of the time respectively. If we also incorporate the third and fourth most frequent activations (40.2% and 11.9%, respectively), then we can achieve $0.086$ dex error. This level of performance suggests that our SFNet is extremely accurate (see Section[ssec:performance-interpretability] for further discussion). +We separately train a SFNet to predict the gas-phase metallicity, $Z_{\rm gas} = 12 +$log(O/H), directly from images. We remove all objects with invalid estimates for metallicity, stellar mass, and star formation rate, leaving 117,223 galaxies from the SDSS Main Galaxy Sample. The scatter of metallicity is $0.207$dex, and our trained SFNet can predict it to within $0.087$dex using only two image features, Z61 and Z256, which are activated 99.6% and 87.9% of the time respectively. If we also incorporate the third and fourth most frequent activations (40.2% and 11.9%, respectively), then we can achieve $0.086$dex error. This level of performance suggests that our SFNet is extremely accurate (see Section[ssec:performance-interpretability] for further discussion). -In the bottom two rows of Table[tab:features], we describe the two main features used to predict metallicity. Z61 is associated with galaxies with prominent red bulges and is linked to higher metallicity. It activates strongly for red ellipticals or face-on disk galaxies (often with two loosely wound spiral arms; see, e.g., 2019MNRAS.487.1808M for more on the correlations between galaxy properties and spiral arm pitch angle). Feature Z256 is associated with blue, edge-on disk galaxies and lower metallicity. [2004ApJ...613..898T] noted that metal-poor galaxies tended to have highly inclined disk morphologies, and attributed this effect to observational bias. SDSS spectroscopic fibers collect light from lower- $Z_{\rm gas}$ outskirts of disk galaxies observed edge-on, but would miss those regions for the same galaxies observed face-on. Our SFNet now captures this same observational bias, affecting the library of morphological features that it learns. +In the bottom two rows of Table[tab:features], we describe the two main features used to predict metallicity. Z61 is associated with galaxies with prominent red bulges and is linked to higher metallicity. It activates strongly for red ellipticals or face-on disk galaxies (often with two loosely wound spiral arms; see, e.g., 2019MNRAS.487.1808M for more on the correlations between galaxy properties and spiral arm pitch angle). Feature Z256 is associated with blue, edge-on disk galaxies and lower metallicity. [2004ApJ...613..898T] noted that metal-poor galaxies tended to have highly inclined disk morphologies, and attributed this effect to observational bias. SDSS spectroscopic fibers collect light from lower-$Z_{\rm gas}$ outskirts of disk galaxies observed edge-on, but would miss those regions for the same galaxies observed face-on. Our SFNet now captures this same observational bias, affecting the library of morphological features that it learns. ## Discussion @@ -82,11 +82,11 @@ In the bottom two rows of Table[tab:features], we describe the two main features Because the SFNet learns a linear projection from these activations to the final prediction, we can write down a simple equation between learned galaxy features and the physical quantity of interest. In Figure[fig:equations], we present linear equations for predicting gas metallicity and spectral line ratios by using the aforementioned galaxy image features. The maximally activating galaxy examples are shown in the equations (each labeled by their activated feature index). -Linear relationships between galaxy properties and image features learned by the SFNet. We show how the gas metallicity, [N2]/H $\alpha$ , and [O3]/H $\beta$ depend on SFNet feature activations, where SFNet features are represented using the top-activating galaxy image cutout from the validation set. +Linear relationships between galaxy properties and image features learned by the SFNet. We show how the gas metallicity, [N2]/H$\alpha$, and [O3]/H$\beta$ depend on SFNet feature activations, where SFNet features are represented using the top-activating galaxy image cutout from the validation set. -These linear relations are so simple that we can directly interpret them. The Z61 and Z256 features used to predict $Z_{\rm gas}$ directly correspond to higher and lower metallicity. Interestingly, both can be activated at the same timeand in fact, both are non-zero for the majority of galaxies in the validation set, demonstrating the physical interplay between these morphological features and metallicity. For predicting spectral lines, features SL17 and SL157 positively correlate with both [N2]/H $\alpha$ and [O3]/H $\beta$ ; we might interpret these morphological features as indicators of spectral hardness and low ionization (nuclear) emission-line regions, respectively. Meanwhile, S322 correlates with [O3]/H $\beta$ but anticorrelates with [N2]/H $\alpha$ , suggesting that it is associated with harder ionizing spectra. +These linear relations are so simple that we can directly interpret them. The Z61 and Z256 features used to predict $Z_{\rm gas}$ directly correspond to higher and lower metallicity. Interestingly, both can be activated at the same timeand in fact, both are non-zero for the majority of galaxies in the validation set, demonstrating the physical interplay between these morphological features and metallicity. For predicting spectral lines, features SL17 and SL157 positively correlate with both [N2]/H$\alpha$ and [O3]/H$\beta$; we might interpret these morphological features as indicators of spectral hardness and low ionization (nuclear) emission-line regions, respectively. Meanwhile, S322 correlates with [O3]/H$\beta$ but anticorrelates with [N2]/H$\alpha$, suggesting that it is associated with harder ionizing spectra. The model is only able to learn physical laws by leveraging galaxy morphology present within the optical image cutouts. However, galaxy evolution is governed by the complex interplay between multiple physical processes [2015ARAA..53...51S,2017MNRAS.471.2687B], which are not always imprinted in galaxy morphology, or perhaps not at the scales or wavelengths probed by our imaging surveys. Nonetheless, CNNs are surprisingly powerful at predicting the spectroscopic tracers of galaxy evolution. [2019AA...624A.102D] and [2019MNRAS.484.4683W] showed that galaxies' stellar masses can be estimated directly from image cutouts, and [2021MNRAS.501.4359Z] suggest that CNNs are sensitive to small-scale morphological perturbations due to dust in galaxies. Even information outside of the image cutout can be indirectly probed; [2020ApJ...900..142W] measure impact of galaxy environment on CNN-predicted gas properties, suggesting that the well-known density-morphology relation [1980ApJ...236..351D] can be implicitly learned via ML models. In summary, SFNets can learn a limited (but still powerful) set of physical relationships that govern galaxy evolution. @@ -98,19 +98,19 @@ If we use all non-zero SFNet features, then the best-fit linear SVM validates at In comparison, the highly tuned CNN from [2022arXiv221207881G] achieves an accuracy of 0.89 and F1 score of 0.75, and the conditional diffusion model by [Doorenbos+2024] results in an accuracy of 0.82 and F1 score of 0.73 (although we note that they use a slightly different AGN classification scheme). Our experiments demonstrate that a linear combination of our interpretable features can distinguish AGN from star-forming galaxies at a level comparable to state-of-the-art ML algorithms. -In Section[ssec:metallicity], we estimate gas metallicity to within 0.087dex using a linear combination of two features (and 0.086dex using four features). For comparison, a typical CNN only achieves $0.085$ dex error [2019MNRAS.484.4683W]; note that the systematic scatter is $\sim 0.03$ dex. Again, this suggests that SFNets do not sacrifice performance in order to gain interpretability. +In Section[ssec:metallicity], we estimate gas metallicity to within 0.087dex using a linear combination of two features (and 0.086dex using four features). For comparison, a typical CNN only achieves $0.085$dex error [2019MNRAS.484.4683W]; note that the systematic scatter is $\sim 0.03$dex. Again, this suggests that SFNets do not sacrifice performance in order to gain interpretability. ### Comparison to PCA -While the SFNet produces interpretable features by imposing a sparsity constraint during the training process, other techniques are frequently used to reduce the number of learned features. Here we compare SFNet features against another common approach: dimensionality reduction of learned model features via principal components analysis (PCA). Given feature activations in the penultimate layer of a regularly trained CNN, we can obtain the principal components by computing eigenvectors of the dense activation's covariance matrix. They are listed in descending order of how much variance is accounted for by each principal component (i.e., ordered by descending eigenvalues). By selecting the top $k$ principal components, we can project dense feature activations into a smaller space of sparse activations. +While the SFNet produces interpretable features by imposing a sparsity constraint during the training process, other techniques are frequently used to reduce the number of learned features. Here we compare SFNet features against another common approach: dimensionality reduction of learned model features via principal components analysis (PCA). Given feature activations in the penultimate layer of a regularly trained CNN, we can obtain the principal components by computing eigenvectors of the dense activation's covariance matrix. They are listed in descending order of how much variance is accounted for by each principal component (i.e., ordered by descending eigenvalues). By selecting the top $k$ principal components, we can project dense feature activations into a smaller space of sparse activations. -SFNet comparison against a CNN with dimensionality-reduced features. Using the SFNet model (blue) and a dense CNN with top principal components as features (red), we report RMSE values (lower is better) for models trained to predict metallicity (left) and spectral line fluxes (right) for several values of $k$ (i.e., sparsity or number of PCA components). +SFNet comparison against a CNN with dimensionality-reduced features. Using the SFNet model (blue) and a dense CNN with top principal components as features (red), we report RMSE values (lower is better) for models trained to predict metallicity (left) and spectral line fluxes (right) for several values of $k$ (i.e., sparsity or number of PCA components). -We test whether this smaller set of principal components are as robust as the SFNet features. We train a multivariate linear regression model using the first $k$ principal components from dense CNN activations as features, again using the same training and validation split, to predict both the metallicity and spectral line strengths. For comparison, we have also re-trained the SFNet using $k \in \{2, 3, 4, 6, 8\}$ . We independently re-train the SFNet three times in order to estimate the mean and standard error on the prediction RMSE. +We test whether this smaller set of principal components are as robust as the SFNet features. We train a multivariate linear regression model using the first $k$ principal components from dense CNN activations as features, again using the same training and validation split, to predict both the metallicity and spectral line strengths. For comparison, we have also re-trained the SFNet using $k \in \{2, 3, 4, 6, 8\}$. We independently re-train the SFNet three times in order to estimate the mean and standard error on the prediction RMSE. -We use the same training/validation split and re-initialize the model each time for each value of $k$ . Because we repeat the training process from scratch, the RMSE values presented in this section slightly differ from the ones reported in Section [sec:results]. +We use the same training/validation split and re-initialize the model each time for each value of $k$. Because we repeat the training process from scratch, the RMSE values presented in this section slightly differ from the ones reported in Section [sec:results]. The results are shown in Figure[fig:pca-comparison], and specific RMSE values are given in Table[tab:dimred]. @@ -118,29 +118,29 @@ l cc cc[t!] 5 Comparison of performance using a SFNet and a CNN with PCA-based dimensionality reduction. -2cRMSE: Metallicity 2cRMSE: Spectral Lines (lr)2-3(lr)4-5 $k$ SFNet PCA SFNet PCA 2 $0.0858 \pm 0.0004$ 0.1753 $0.2418 \pm 0.0002$ 0.2806 3 $0.0862 \pm 0.0011$ 0.2032 $0.2395 \pm 0.0014$ 0.2646 4 $0.0862 \pm 0.0013$ 0.1034 $0.2383 \pm 0.0003$ 0.2646 6 $0.0875 \pm 0.0007$ 0.1020 $0.2394 \pm 0.0009$ 0.2419 8 $0.0852 \pm 0.0004$ 0.0921 $0.2389 \pm 0.0012$ 0.2396 +2cRMSE: Metallicity 2cRMSE: Spectral Lines (lr)2-3(lr)4-5 $k$ SFNet PCA SFNet PCA 2 $0.0858 \pm 0.0004$ 0.1753 $0.2418 \pm 0.0002$ 0.2806 3 $0.0862 \pm 0.0011$ 0.2032 $0.2395 \pm 0.0014$ 0.2646 4 $0.0862 \pm 0.0013$ 0.1034 $0.2383 \pm 0.0003$ 0.2646 6 $0.0875 \pm 0.0007$ 0.1020 $0.2394 \pm 0.0009$ 0.2419 8 $0.0852 \pm 0.0004$ 0.0921 $0.2389 \pm 0.0012$ 0.2396 -For both metallicity and spectral line fluxes, $>95\%$ of the variance is explained using the top $k=8$ principal components. For metallicity (left panel of Figure[fig:pca-comparison]), we find that the CNN + PCA performs poorly on the validation set for all values of $k$ . Meanwhile, the SFNet can reconstruct metallicity with only $k=2$ explainable features, reinforcing our results found in Section[ssec:metallicity]. We interpret this as evidence that the metallicity cannot be linearly combined using a small number of principal components of features extracted via a typical CNN. +For both metallicity and spectral line fluxes, $>95\%$ of the variance is explained using the top $k=8$ principal components. For metallicity (left panel of Figure[fig:pca-comparison]), we find that the CNN + PCA performs poorly on the validation set for all values of $k$. Meanwhile, the SFNet can reconstruct metallicity with only $k=2$ explainable features, reinforcing our results found in Section[ssec:metallicity]. We interpret this as evidence that the metallicity cannot be linearly combined using a small number of principal components of features extracted via a typical CNN. -The non-monotonic decrease in RMSE with increasing $k$ suggests that PCAwhile able to reduce dimensionalitydoes not optimally distill morphological features into the ones most relevant for predicting galaxy properties. +The non-monotonic decrease in RMSE with increasing $k$ suggests that PCAwhile able to reduce dimensionalitydoes not optimally distill morphological features into the ones most relevant for predicting galaxy properties. -We turn our attention to spectral line fluxes (right panel of Figure[fig:pca-comparison]), and find that performance is poor for small values of $k$ , but if we use 8 principal components, then the RMSE becomes comparable to that of the SFNet. The SFNet can accurately estimate spectral line fluxes using only $k=4$ features (with significantly worse performance at $k=2$ ). +We turn our attention to spectral line fluxes (right panel of Figure[fig:pca-comparison]), and find that performance is poor for small values of $k$, but if we use 8 principal components, then the RMSE becomes comparable to that of the SFNet. The SFNet can accurately estimate spectral line fluxes using only $k=4$ features (with significantly worse performance at $k=2$). Our experiment shows that we can reduce the dimensionality of CNN feature activations via PCA, but the ensuing principal components are not always robust features for recovering the training targets (e.g., for metallicity). These difficulties may arise from superposition and polysemanticity, which cause the most important features to be entangled and spread across multiple CNN activations in highly non-linear ways. Since typical CNNs are not optimized with any sparsity constraint in mind, there is no guarantee that a linear combination of the learned features should be interpretable (although there are non-linear methods for finding optimal summary statistics; e.g., Charnock\_2018). By forcing a CNN to be sparse during the training process, we find that SFNets can learn robust features and produce accurate predictions. ### Comparison to GalaxyZoo features -Do regular CNNs also learn interpretable features? We compare the SFNet against Zoobot, a CNN trained to classify GalaxyZoo morphologies [2008MNRAS.389.1179L,2023JOSS....8.5312W,Walmsley+2024]. We consider the resnet18 variant of Zoobot, which has the same architecture as our SFNet modulo the top- $k$ sparsity constraint (Figure[fig:SFNet-architecture]). Zoobot predicts citizen scientist vote fractions for GalaxyZoo morphological labels. We hypothesize that Zoobot's 512-dimensional features directly after the pooling layer suffer from superposition and polysemanticity, and thereby produce an uninterpretable combination of morphology and color. +Do regular CNNs also learn interpretable features? We compare the SFNet against Zoobot, a CNN trained to classify GalaxyZoo morphologies [2008MNRAS.389.1179L,2023JOSS....8.5312W,Walmsley+2024]. We consider the resnet18 variant of Zoobot, which has the same architecture as our SFNet modulo the top-$k$ sparsity constraint (Figure[fig:SFNet-architecture]). Zoobot predicts citizen scientist vote fractions for GalaxyZoo morphological labels. We hypothesize that Zoobot's 512-dimensional features directly after the pooling layer suffer from superposition and polysemanticity, and thereby produce an uninterpretable combination of morphology and color. -Using morphological features from Zoobot, we train a regression model to predict galaxy metallicity. This experiment allows us to assess whether traditional CNNs can also be used to learn astrophysical relationships between image features and galaxy properties. We use the same training/validation datasets from Section[ssec:metallicity], and independently test two models that use Zoobot-extracted features as inputs and $Z_{\rm gas}$ as training targets. +Using morphological features from Zoobot, we train a regression model to predict galaxy metallicity. This experiment allows us to assess whether traditional CNNs can also be used to learn astrophysical relationships between image features and galaxy properties. We use the same training/validation datasets from Section[ssec:metallicity], and independently test two models that use Zoobot-extracted features as inputs and $Z_{\rm gas}$ as training targets. -First, we fit a linear model to the training dataset, and find poor performance on the validation dataset (error of $0.183$ dex). When we fit on the validation dataseti.e., if we attempt to memorize the answersthe error remains very high ( $0.181$ dex). This result demonstrates that no linear combination of Zoobot features can reconstruct galaxy metallicity. +First, we fit a linear model to the training dataset, and find poor performance on the validation dataset (error of $0.183$dex). When we fit on the validation dataseti.e., if we attempt to memorize the answersthe error remains very high ($0.181$dex). This result demonstrates that no linear combination of Zoobot features can reconstruct galaxy metallicity. -Second, we fit an gradient-boosted decision tree (XGBoost) model to the training dataset, and achieve only $0.180$ dex error on the validation dataset. However, when we cheat by fitting on the validation dataset, we can lower the error down to $0.085$ dex (comparable to the SFNet performance). +Second, we fit an gradient-boosted decision tree (XGBoost) model to the training dataset, and achieve only $0.180$dex error on the validation dataset. However, when we cheat by fitting on the validation dataset, we can lower the error down to $0.085$dex (comparable to the SFNet performance). Our experiments confirm that the Zoobot features indeed contain enough information to memorize the validation set, but that these features (i) cannot be linearly combined to reconstruct galaxy metallicity, and (ii) cannot generalize across the random training/validation split. We surmise that regular CNN features are not interpretable. Meanwhile, our SFNet is both performant and interpretable. -Finally, we check whether the SFNet can capture information not found within the 512-dimensional Zoobot feature vector. We optimize a ridge regression model to predict SFNet feature values using the Zoobot features, finding $R^2$ values of $0.253$ and $0.107$ for the two primary SFNet features, Z61 and Z256, respectively. These low coefficients of determination suggest that our SFNet extracts different morphological features than Zoobot. +Finally, we check whether the SFNet can capture information not found within the 512-dimensional Zoobot feature vector. We optimize a ridge regression model to predict SFNet feature values using the Zoobot features, finding $R^2$ values of $0.253$ and $0.107$ for the two primary SFNet features, Z61 and Z256, respectively. These low coefficients of determination suggest that our SFNet extracts different morphological features than Zoobot. ### Limitations of previous interpretability methods @@ -154,11 +154,11 @@ Other interpretability methods like saliency mapping [simonyan2014deepinsideconv ## Conclusions -We present a novel method for learning the relationship between the physical properties and interpretable morphologies of galaxies. Our sparse feature network (SFNet; Figure[fig:SFNet-architecture]) maps galaxy features onto galaxies' physical properties such as spectroscopic line fluxes and gas-phase metallicity. We identify features that correspond to hard ionizing radiation (starbursts), low gas density, old stellar populations/high metallicities, and star-forming regions/low metallicity (e.g., Table[tab:features] and Figure[fig:bpt-interpretation]). Critically, our method does not substantially sacrifice ML performance in order to gain interpretability. We can write down equations (Figure[fig:equations]) that reveal the robust linear connection between galaxy properties and their appearances. Optimizing a SFNet yields more robust and interpretable features than training a CNN and then using PCA to consolidate the dense features: we find that a linear combination of $k$ interpretable morphological features produces more accurate predictions than by using the top $k$ principal components of a regular CNN's features (see Figure[fig:pca-comparison]). +We present a novel method for learning the relationship between the physical properties and interpretable morphologies of galaxies. Our sparse feature network (SFNet; Figure[fig:SFNet-architecture]) maps galaxy features onto galaxies' physical properties such as spectroscopic line fluxes and gas-phase metallicity. We identify features that correspond to hard ionizing radiation (starbursts), low gas density, old stellar populations/high metallicities, and star-forming regions/low metallicity (e.g., Table[tab:features] and Figure[fig:bpt-interpretation]). Critically, our method does not substantially sacrifice ML performance in order to gain interpretability. We can write down equations (Figure[fig:equations]) that reveal the robust linear connection between galaxy properties and their appearances. Optimizing a SFNet yields more robust and interpretable features than training a CNN and then using PCA to consolidate the dense features: we find that a linear combination of $k$ interpretable morphological features produces more accurate predictions than by using the top $k$ principal components of a regular CNN's features (see Figure[fig:pca-comparison]). We do not imply that astrophysics can or should be automated by machines. As we discuss in Section [sec:discussion], astronomers are still necessary for interpreting image features. While the SFNet can highlight what ML algorithms are capable of learning, they cannot replace domain experts, who are essential for scrutinizing the physical interplay between learned features and predicted quantities. -This work represents important progress toward developing explainable deep learning algorithms for the physical sciences. While we find strong results by incorporating a simple top- $k$ sparsity layer into a resnet18, we have not comprehensively varied the optimization procedure or model hyperparameters. However, we have tested a few values of $k$ and found that the SFNet performance is robust. Additional sparsity constraints, such as decorrelation layers (e.g. zero-phase component analysis or Cholesky whitening) or regularization terms (e.g., L1 norm) in the loss function, may encourage the SFNet to learn improved features. Using a CNN architecture with a smaller receptive field (i.e., by eschewing pooling layers), which guarantees that learned features are localized to a small number of pixels, may also enhance interpretability of SFNets. To aid the physical interpretation of features, we could also deploy an activation maximization model to specifically hone in on activating features [olah2017feature]. +This work represents important progress toward developing explainable deep learning algorithms for the physical sciences. While we find strong results by incorporating a simple top-$k$ sparsity layer into a resnet18, we have not comprehensively varied the optimization procedure or model hyperparameters. However, we have tested a few values of $k$ and found that the SFNet performance is robust. Additional sparsity constraints, such as decorrelation layers (e.g. zero-phase component analysis or Cholesky whitening) or regularization terms (e.g., L1 norm) in the loss function, may encourage the SFNet to learn improved features. Using a CNN architecture with a smaller receptive field (i.e., by eschewing pooling layers), which guarantees that learned features are localized to a small number of pixels, may also enhance interpretability of SFNets. To aid the physical interpretation of features, we could also deploy an activation maximization model to specifically hone in on activating features [olah2017feature]. ###### Acknowledgments. @@ -173,7 +173,7 @@ Modern deep neural networks are composed of many layers, each with many neurons. However, it is challenging to decipher what features are represented by specific neurons, primarily due to two phenomena: superposition and polysemanticity [superposition]. - Superposition is where semantic concepts (i.e., features) become distributed across many neurons. For example, a single feature like three-armed spiral galaxy can be spread out across multiple neurons (in one or even multiple layers). -- Polysemanticity means that any given neuron can also have multiple separate meanings. These semantic concepts may not even be correlated with each other! For example, a specific neuron in a regularly trained CNN might activate on features such as three-armed spiral galaxy and $r$ -band light bleed from nearby saturated star. +- Polysemanticity means that any given neuron can also have multiple separate meanings. These semantic concepts may not even be correlated with each other! For example, a specific neuron in a regularly trained CNN might activate on features such as three-armed spiral galaxy and $r$-band light bleed from nearby saturated star. So rather than a one-to-one mapping of neurons to features, or vice versa, there is actually a many-to-many mapping. Multiple learned features can be distributed and superposed across many different neurons. Superposition and polysemanticity encapsulate why it is so challenging to understand neural networks, even in just a single layer. diff --git a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.dclg b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.dclg index 75386a2565..f4a791eb67 100644 --- a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.dclg +++ b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass[a4paper,fleqn]{cas-dc} @@ -48,7 +48,7 @@ T_{pc} , arising due to the disappearance of some hadronic states, will also liberate light quark degrees of freedom, although in the chiral limit this may not directly be related to the universal aspects of the chiral phase transition. The partial charm hadronic pressures start to deviate from the HRG model prediction, but not all charmed hadrons dissociate at T_{pc} -. Furthermore, recent lattice QCD studies provide compelling evidence for the survival of charmed hadrons above the chiral crossover temperature [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf]. In this paper, we investigate the gradual deconfinement of charmed hadrons by analyzing continuum extrapolated proxies for partial pressures of charmed baryons and mesons across the chiral crossover. + . Furthermore, recent lattice QCD studies provide compelling evidence for the survival of charmed hadrons above the chiral crossover temperature [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf]. In this paper, we investigate the gradual deconfinement of charmed hadrons by analyzing continuum extrapolated proxies for partial pressures of charmed baryons and mesons across the chiral crossover. Calculating generalized susceptibilities on the lattice @@ -62,7 +62,7 @@ S , and charm, C -. This involves taking appropriate derivatives of the total pressure, + . This involves taking appropriate derivatives of the total pressure, \begin{equation} @@ -78,7 +78,7 @@ {\hat{\mu}_X = \mu_X/T} , {\forall X \in \{B, Q, S, C\}} -, of the quantum number combinations one is interested in, + , of the quantum number combinations one is interested in, \begin{equation} @@ -93,7 +93,7 @@ {\chi^{BQSC}_{klmn}} will be non-zero only for {(k+l+m+n) \in \text{even}} -. In the following, if the subscript corresponding to a conserved charge is zero in the left hand side of Eq. [eq:chi], then both the corresponding superscript as well the zero subscript will be suppressed. + . In the following, if the subscript corresponding to a conserved charge is zero in the left hand side of Eq. [eq:chi], then both the corresponding superscript as well the zero subscript will be suppressed. Generalized susceptibilities up to fourth order have been calculated on the (2+1)-flavor HISQ (Highly Improved Staggered Quark) gauge configurations generated by the HotQCD collaboration [Bollweg:2021vqf] for the physical strange to light quark mass ratio, @@ -106,7 +106,7 @@ \chi^{BQSC}_{klmn} involves derivatives of the pressure and on the lattice this is achieved by the unbiased stochastic estimation of various traces consisting of inversions and derivatives of the fermion matrices ( D -) using the random noise method [Mitra:2022vtf]. + ) using the random noise method [Mitra:2022vtf]. Lattice cutoff effects cancel to a large extent in the ratios of various generalized susceptibilities [Bazavov:2023xzm]. These ratios, even though calculated on lattices with a finite lattice spacing, @@ -119,11 +119,11 @@ N_\tau=(aT)^{-1} . In order to understand the cut-off effects due to heavier charm quark, we used two different Lines of Constant Physics (LCPs) to tune the bare charm quark mass am_c -. The first LCP (LCP + . The first LCP (LCP _{[a]} ) corresponds to keeping the spin-averaged charmonium mass, {(3m_{J/\psi}+m_{\eta_{c\bar{c}}})/4} -, fixed to its physical value [Sharma:2022ztl]. The second LCP (LCP + , fixed to its physical value [Sharma:2022ztl]. The second LCP (LCP _{[b]} ) is defined by the physical (PDG) charm to strange quark mass ratio, m_c/m_s=11.76 @@ -135,7 +135,7 @@ \chi^C_4 into absolute numbers we use continuum extrapolated results for \chi^C_4 -. Details of the continuum extrapolation will be given in a forthcoming publication. + . Details of the continuum extrapolation will be given in a forthcoming publication. Boltzmann Approximation @@ -156,7 +156,7 @@ {P^C_{M}}, and the charmed baryon, {P^C_{B}} -, sectors take the following forms [Allton:2005gk]: + , sectors take the following forms [Allton:2005gk]: T_{pc} , the Boltzmann approximation works for an ideal massive quark-antiquark gas [Allton:2005gk,BAZAVOV2014210]. Therefore, in this approximation, the dimensionless partial charm quark pressure, P^C_{q} -, is given by, + , is given by, To investigate the nature of charm degrees of freedom above T_{pc} -, we extend the simple hadron gas model allowing the presence of partial charm quark pressure based on Ref.[Mukherjee:2015mxc], + , we extend the simple hadron gas model allowing the presence of partial charm quark pressure based on Ref.[Mukherjee:2015mxc], \begin{align} @@ -291,7 +291,7 @@ \chi^{BC}_{13} and \chi^4_C-\chi^{BC}_{13} -, respectively. + , respectively. Continuum estimates for charmed baryon and meson partial pressures shown in Fig. [fig:enhan] are obtained by multiplying continuum extrapolated diff --git a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.json b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.json index fd53548e8c..1b6f3190b6 100644 --- a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.json +++ b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "main", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.md b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.md index 532256204f..436aa14771 100644 --- a/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.md +++ b/tests/data/latex/groundtruth/arXiv-2501.01300v2_main.tex.md @@ -16,7 +16,7 @@ Thermodynamics of charmed hadrons across chiral crossover from lattice QCD S.Sha ## Abstract -We use up to fourth-order charm fluctuations and their correlations with net baryon number, electric charge, and strangeness fluctuations, calculated within the framework of lattice QCD, to study the continuum partial pressure contributions of charmed baryons and mesons. We show that, at and below the chiral crossover temperature, these partial pressures receive enhanced contributions from experimentally unobserved charmed hadrons predicted by the Quark Model. Additionally, we demonstrate that at the chiral crossover, the Hadron Resonance Gas description breaks down, signaling the modification of open charm hadrons and thereby implying the onset of charm deconfinement. We present evidence for the survival of low-lying non-radial $1S$ and $1P$ hadron-like excitations above the chiral crossover, which hints at the sequential melting of charmed hadrons. Finally, we investigate the continuum partial pressure contribution of charm quark-like excitation that emerges at the chiral crossover and calculate its temperature-dependent in-medium mass. +We use up to fourth-order charm fluctuations and their correlations with net baryon number, electric charge, and strangeness fluctuations, calculated within the framework of lattice QCD, to study the continuum partial pressure contributions of charmed baryons and mesons. We show that, at and below the chiral crossover temperature, these partial pressures receive enhanced contributions from experimentally unobserved charmed hadrons predicted by the Quark Model. Additionally, we demonstrate that at the chiral crossover, the Hadron Resonance Gas description breaks down, signaling the modification of open charm hadrons and thereby implying the onset of charm deconfinement. We present evidence for the survival of low-lying non-radial $1S$ and $1P$ hadron-like excitations above the chiral crossover, which hints at the sequential melting of charmed hadrons. Finally, we investigate the continuum partial pressure contribution of charm quark-like excitation that emerges at the chiral crossover and calculate its temperature-dependent in-medium mass. \_set:nn stm / mktitle nologo @@ -24,13 +24,13 @@ We use up to fourth-order charm fluctuations and their correlations with net bar Lattice studies in the recent years have predicted the existence of experimentally unobserved charmed resonances by calculating charm fluctuations and their correlations with other conserved quantum numbers a.k.a. generalized charm susceptibilities [BAZAVOV2014210, Sharma:2022ztl, Bazavov:2023xzm]. Recently, analysis of experimental open charm hadron yields using the extended Statistical Hadronization Model for charm (SHMc) [ANDRONIC2019759], showed enhanced yields in the charmed baryon sector [Braun-Munzinger:2024ybd]. This enhancement is relative to the experimentally known charmed hadronic states tabulated in the Particle Data Group (PDG) records, and therefore corroborates the existence of missing resonances in the open charm sector. -Until now, lattice QCD predictions of missing resonances have been based solely on the ratios of generalized charm susceptibilities. This approach, however, could not provide a quantitative measure of enhancement in individual quantum number channels. The reason lattice QCD studies had to resort to ratios of generalized susceptibilities rather then the susceptibilities themselves is because controlling the cutoff effects in the latter is challenging due to the relatively large charm quark mass. In this study, for the first time, we use our continuum extrapolated lattice QCD results to explicitly determine enhancement factors at the chiral crossover temperature, ${T_{pc}=(156.5\pm1.5)}$ MeV [HotQCD:2018pds, Borsanyi:2020fev], for both the charmed baryonic and mesonic sectors. +Until now, lattice QCD predictions of missing resonances have been based solely on the ratios of generalized charm susceptibilities. This approach, however, could not provide a quantitative measure of enhancement in individual quantum number channels. The reason lattice QCD studies had to resort to ratios of generalized susceptibilities rather then the susceptibilities themselves is because controlling the cutoff effects in the latter is challenging due to the relatively large charm quark mass. In this study, for the first time, we use our continuum extrapolated lattice QCD results to explicitly determine enhancement factors at the chiral crossover temperature, ${T_{pc}=(156.5\pm1.5)}$ MeV [HotQCD:2018pds, Borsanyi:2020fev], for both the charmed baryonic and mesonic sectors. -The chiral crossover also exhibits deconfining feature in the charm quark sector, i.e. charm quarks as new degrees of freedom start appearing at or close to the pseudo-critical temperature of chiral symmetry restoration (Bazavov et al. (2024)). Clearly the appearance of charm quark degrees of freedom at $T_{pc}$ , arising due to the disappearance of some hadronic states, will also liberate light quark degrees of freedom, although in the chiral limit this may not directly be related to the universal aspects of the chiral phase transition. The partial charm hadronic pressures start to deviate from the HRG model prediction, but not all charmed hadrons dissociate at $T_{pc}$ . Furthermore, recent lattice QCD studies provide compelling evidence for the survival of charmed hadrons above the chiral crossover temperature [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf]. In this paper, we investigate the gradual deconfinement of charmed hadrons by analyzing continuum extrapolated proxies for partial pressures of charmed baryons and mesons across the chiral crossover. +The chiral crossover also exhibits deconfining feature in the charm quark sector, i.e. charm quarks as new degrees of freedom start appearing at or close to the pseudo-critical temperature of chiral symmetry restoration (Bazavov et al. (2024)). Clearly the appearance of charm quark degrees of freedom at $T_{pc}$, arising due to the disappearance of some hadronic states, will also liberate light quark degrees of freedom, although in the chiral limit this may not directly be related to the universal aspects of the chiral phase transition. The partial charm hadronic pressures start to deviate from the HRG model prediction, but not all charmed hadrons dissociate at $T_{pc}$. Furthermore, recent lattice QCD studies provide compelling evidence for the survival of charmed hadrons above the chiral crossover temperature [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf]. In this paper, we investigate the gradual deconfinement of charmed hadrons by analyzing continuum extrapolated proxies for partial pressures of charmed baryons and mesons across the chiral crossover. ## Calculating generalized susceptibilities on the lattice -To project out the relevant degrees of freedom in the charm sector, one calculates the generalized susceptibilities, ${\chi^{BQSC}_{klmn}}$ , of the conserved charges: baryon number, $B$ , electric charge, $Q$ , strangeness, $S$ , and charm, $C$ . This involves taking appropriate derivatives of the total pressure, +To project out the relevant degrees of freedom in the charm sector, one calculates the generalized susceptibilities, ${\chi^{BQSC}_{klmn}}$, of the conserved charges: baryon number, $B$, electric charge, $Q$, strangeness, $S$, and charm, $C$. This involves taking appropriate derivatives of the total pressure, $$\begin{equation} P=\frac{T}{V}\ln Z(T,V,\hat{\mu}_B,\hat{\mu}_Q,\hat{\mu}_S,\hat{\mu}_C) @@ -38,22 +38,22 @@ $$\begin{equation} \end{equation}$$ -which contains contributions from the total charm pressure, $P_C$ . These derivatives are taken with respect to the chemical potentials, ${\hat{\mu}_X = \mu_X/T}$ , ${\forall X \in \{B, Q, S, C\}}$ , of the quantum number combinations one is interested in, +which contains contributions from the total charm pressure, $P_C$. These derivatives are taken with respect to the chemical potentials, ${\hat{\mu}_X = \mu_X/T}$, ${\forall X \in \{B, Q, S, C\}}$, of the quantum number combinations one is interested in, $$\begin{equation} {\chi^{BQSC}_{klmn}=\dfrac{\partial^{(k+l+m+n)}\;\;[P\;(\hat{\mu}_B,\hat{\mu}_Q,\hat{\mu}_S,\hat{\mu}_C)\;/T^4]}{\partial\hat{\mu}^{k}_B\;\;\partial\hat{\mu}^{l}_Q\;\;\partial\hat{\mu}^{m}_S\;\;\partial\hat{\mu}^{n}_C}}\bigg|_{\overrightarrow{\mu}=0}\text{,} \end{equation}$$ -where $\vec{\mu}=(\mu_B, \mu_Q, \mu_S, \mu_C)$ . Note that ${\chi^{BQSC}_{klmn}}$ will be non-zero only for ${(k+l+m+n) \in \text{even}}$ . In the following, if the subscript corresponding to a conserved charge is zero in the left hand side of Eq. [eq:chi], then both the corresponding superscript as well the zero subscript will be suppressed. +where $\vec{\mu}=(\mu_B, \mu_Q, \mu_S, \mu_C)$. Note that ${\chi^{BQSC}_{klmn}}$ will be non-zero only for ${(k+l+m+n) \in \text{even}}$. In the following, if the subscript corresponding to a conserved charge is zero in the left hand side of Eq. [eq:chi], then both the corresponding superscript as well the zero subscript will be suppressed. -Generalized susceptibilities up to fourth order have been calculated on the (2+1)-flavor HISQ (Highly Improved Staggered Quark) gauge configurations generated by the HotQCD collaboration [Bollweg:2021vqf] for the physical strange to light quark mass ratio, ${m_s/m_{l}}=27$ . The temperature scale was set using the $f_K$ scale [Bollweg:2021vqf]. The charm-quark sector has been treated in the quenched approximation. We use HISQ action with epsilon term for charm quark to remove $\mathcal{O}((am_c)^4)$ tree-level lattice artifacts [Follana:2006rc]. This setup is known to have small discretization effects for charm quark related observables [Follana:2006rc,MILC:2010pul]. The calculation of $\chi^{BQSC}_{klmn}$ involves derivatives of the pressure and on the lattice this is achieved by the unbiased stochastic estimation of various traces consisting of inversions and derivatives of the fermion matrices ( $D$ ) using the random noise method [Mitra:2022vtf]. +Generalized susceptibilities up to fourth order have been calculated on the (2+1)-flavor HISQ (Highly Improved Staggered Quark) gauge configurations generated by the HotQCD collaboration [Bollweg:2021vqf] for the physical strange to light quark mass ratio, ${m_s/m_{l}}=27$. The temperature scale was set using the $f_K$ scale [Bollweg:2021vqf]. The charm-quark sector has been treated in the quenched approximation. We use HISQ action with epsilon term for charm quark to remove $\mathcal{O}((am_c)^4)$ tree-level lattice artifacts [Follana:2006rc]. This setup is known to have small discretization effects for charm quark related observables [Follana:2006rc,MILC:2010pul]. The calculation of $\chi^{BQSC}_{klmn}$ involves derivatives of the pressure and on the lattice this is achieved by the unbiased stochastic estimation of various traces consisting of inversions and derivatives of the fermion matrices ($D$) using the random noise method [Mitra:2022vtf]. -Lattice cutoff effects cancel to a large extent in the ratios of various generalized susceptibilities [Bazavov:2023xzm]. These ratios, even though calculated on lattices with a finite lattice spacing, $a$ , are close to the continuum limit results. Therefore, in this work we use generalized susceptibilities normalized by $\chi^C_4$ calculated on lattices with a fixed temporal extent, $N_\tau=8$ , where $N_\tau=(aT)^{-1}$ . In order to understand the cut-off effects due to heavier charm quark, we used two different Lines of Constant Physics (LCPs) to tune the bare charm quark mass $am_c$ . The first LCP (LCP $_{[a]}$ ) corresponds to keeping the spin-averaged charmonium mass, ${(3m_{J/\psi}+m_{\eta_{c\bar{c}}})/4}$ , fixed to its physical value [Sharma:2022ztl]. The second LCP (LCP $_{[b]}$ ) is defined by the physical (PDG) charm to strange quark mass ratio, $m_c/m_s=11.76$ [ParticleDataGroup:2022pth]. Further details of the charm-quark mass tuning and parametrization can be found in [Sharma:2024ucs]. Here we use ratios of generalized susceptibilities calculated on lattices with temporal extent $N_\tau=8$ on LCP $_{[b]}$ because of their relatively smaller errors. To convert generalized susceptibilities normalized by $\chi^C_4$ into absolute numbers we use continuum extrapolated results for $\chi^C_4$ . Details of the continuum extrapolation will be given in a forthcoming publication. +Lattice cutoff effects cancel to a large extent in the ratios of various generalized susceptibilities [Bazavov:2023xzm]. These ratios, even though calculated on lattices with a finite lattice spacing, $a$, are close to the continuum limit results. Therefore, in this work we use generalized susceptibilities normalized by $\chi^C_4$ calculated on lattices with a fixed temporal extent, $N_\tau=8$, where $N_\tau=(aT)^{-1}$. In order to understand the cut-off effects due to heavier charm quark, we used two different Lines of Constant Physics (LCPs) to tune the bare charm quark mass $am_c$. The first LCP (LCP$_{[a]}$) corresponds to keeping the spin-averaged charmonium mass, ${(3m_{J/\psi}+m_{\eta_{c\bar{c}}})/4}$, fixed to its physical value [Sharma:2022ztl]. The second LCP (LCP$_{[b]}$) is defined by the physical (PDG) charm to strange quark mass ratio, $m_c/m_s=11.76$ [ParticleDataGroup:2022pth]. Further details of the charm-quark mass tuning and parametrization can be found in [Sharma:2024ucs]. Here we use ratios of generalized susceptibilities calculated on lattices with temporal extent $N_\tau=8$ on LCP$_{[b]}$ because of their relatively smaller errors. To convert generalized susceptibilities normalized by $\chi^C_4$ into absolute numbers we use continuum extrapolated results for $\chi^C_4$. Details of the continuum extrapolation will be given in a forthcoming publication. ## Boltzmann Approximation -Comparison of QM-HRG and PDG-HRG predictions for charmed baryons [Left] and charmed mesons [Right]. $\Delta=100 |1-\text{QM-HRG}/\text{PDG-HRG}|_{T_{pc}}$ . The yellow bands represent $T_{pc}$ with its uncertainty. +Comparison of QM-HRG and PDG-HRG predictions for charmed baryons [Left] and charmed mesons [Right]. $\Delta=100 |1-\text{QM-HRG}/\text{PDG-HRG}|_{T_{pc}}$. The yellow bands represent $T_{pc}$ with its uncertainty. @@ -61,7 +61,7 @@ Comparison of QM-HRG and PDG-HRG predictions for charmed baryons [Left] and char ### Charmed Hadrons -Hadron resonance gas model (HRG) has been successful in describing the particle abundance ratios measured in the heavy-ion experiments. It describes a non-interacting gas of hadron resonances, and therefore can be used to calculate the hadronic pressure below ${T_{pc}}$ [ANDRONIC2019759]. In the Boltzmann approximation, the dimensionless partial pressures from the charmed meson, ${P^C_{M}},$ and the charmed baryon, ${P^C_{B}}$ , sectors take the following forms [Allton:2005gk]: +Hadron resonance gas model (HRG) has been successful in describing the particle abundance ratios measured in the heavy-ion experiments. It describes a non-interacting gas of hadron resonances, and therefore can be used to calculate the hadronic pressure below ${T_{pc}}$ [ANDRONIC2019759]. In the Boltzmann approximation, the dimensionless partial pressures from the charmed meson, ${P^C_{M}},$ and the charmed baryon, ${P^C_{B}}$, sectors take the following forms [Allton:2005gk]: $$\begin{gather} \begin{aligned} @@ -73,13 +73,13 @@ $$\begin{gather} \end{aligned} \end{gather}$$ -In above equations, at a given temperature, the summation is over all charmed mesons/baryons (C-mesons/baryons) with masses given by ${m_i}$ ; degeneracy factors of the states with equal mass and same quantum numbers are represented by ${g_i}$ ; ${K_2(x)}$ is a modified Bessel function, which for a large argument can be approximated by ${K_2(x)}\sim\sqrt{\pi/2x}\;e^{-x}\;[1+\mathbb{O}(x^{-1})]$ . Consequently, if a charmed state under consideration is much heavier than the relevant temperature scale, such that ${m_i\gg T}$ , then the contribution to ${P_C}$ from that particular state will be exponentially suppressed, e.g., the singly-charmed ${\Lambda}_c^{+}$ baryon has a PDG mass of about $2286$ MeV, whereas the doubly-charmed ${\Xi_{cc}^{++}}$ baryon's mass as tabulated in PDG records is about $3621$ MeV, hence at ${T_{pc}}$ , the contribution to ${P^C_{B}}$ from ${\Xi_{cc}^{++}}$ will be suppressed by a factor of $10^{-4}$ in relation to ${\Lambda}_c^{+}$ contribution. Therefore, in the validity regime of Boltzmann approximation, substituting Eq. [eq:McBc] in Eq. [eq:chi] implies $P_C(T,\vec{\mu})\approx\chi_2^C\approx\chi_n^C$ , for $n$ even. +In above equations, at a given temperature, the summation is over all charmed mesons/baryons (C-mesons/baryons) with masses given by ${m_i}$; degeneracy factors of the states with equal mass and same quantum numbers are represented by ${g_i}$; ${K_2(x)}$ is a modified Bessel function, which for a large argument can be approximated by ${K_2(x)}\sim\sqrt{\pi/2x}\;e^{-x}\;[1+\mathbb{O}(x^{-1})]$. Consequently, if a charmed state under consideration is much heavier than the relevant temperature scale, such that ${m_i\gg T}$, then the contribution to ${P_C}$ from that particular state will be exponentially suppressed, e.g., the singly-charmed ${\Lambda}_c^{+}$ baryon has a PDG mass of about $2286$MeV, whereas the doubly-charmed ${\Xi_{cc}^{++}}$ baryon's mass as tabulated in PDG records is about $3621$ MeV, hence at ${T_{pc}}$, the contribution to ${P^C_{B}}$ from ${\Xi_{cc}^{++}}$ will be suppressed by a factor of $10^{-4}$ in relation to ${\Lambda}_c^{+}$ contribution. Therefore, in the validity regime of Boltzmann approximation, substituting Eq. [eq:McBc] in Eq. [eq:chi] implies $P_C(T,\vec{\mu})\approx\chi_2^C\approx\chi_n^C$, for $n$ even. -Charm fluctuations calculated in the framework of lattice QCD can receive enhanced contributions due the existence of not-yet-discovered open-charm states. It is possible to compare this enhancement to the HRG calculations performed with two data sets. The first scenario, denoted by PDG-HRG, is based on the experimentally established states tabulated in the PDG records. The second scenario, denoted by QM-HRG, in addition to PDG states, takes into account states predicted via Quark-Model calculations [Ebert:2009ua, Ebert:2011kk, Chen:2022asf]. In the validity regime of HRG, $\chi^{nm}_{BC}\approx P^C_{B}$ , and $P^C_{M} = P_C-P^C_{B}$ . Fig. [fig:barCmesC] [Left] shows that the QM-HRG predicts a $92\%$ enhancement of the partial charmed baryon pressure at $T_{pc}$ compared to the PDG-HRG expectation, whereas the predicted enhancement in the partial charmed meson pressure is only $15\%$ . These results suggest that, based on the QM-HRG predictions, the charmed baryonic sector is significantly more incomplete than the charmed mesonic sector. In recent years, the experimental discovery of various $\Lambda_C$ and $\Omega_C$ resonances, in particular by LHCb and Belle collaborations [Belle:2016tai,LHCb:2017uwr,LHCb:2017jym,Chen:2017gnu] have confirmed this. +Charm fluctuations calculated in the framework of lattice QCD can receive enhanced contributions due the existence of not-yet-discovered open-charm states. It is possible to compare this enhancement to the HRG calculations performed with two data sets. The first scenario, denoted by PDG-HRG, is based on the experimentally established states tabulated in the PDG records. The second scenario, denoted by QM-HRG, in addition to PDG states, takes into account states predicted via Quark-Model calculations [Ebert:2009ua, Ebert:2011kk, Chen:2022asf]. In the validity regime of HRG, $\chi^{nm}_{BC}\approx P^C_{B}$, and $P^C_{M} = P_C-P^C_{B}$. Fig. [fig:barCmesC] [Left] shows that the QM-HRG predicts a $92\%$ enhancement of the partial charmed baryon pressure at $T_{pc}$ compared to the PDG-HRG expectation, whereas the predicted enhancement in the partial charmed meson pressure is only $15\%$. These results suggest that, based on the QM-HRG predictions, the charmed baryonic sector is significantly more incomplete than the charmed mesonic sector. In recent years, the experimental discovery of various $\Lambda_C$ and $\Omega_C$ resonances, in particular by LHCb and Belle collaborations [Belle:2016tai,LHCb:2017uwr,LHCb:2017jym,Chen:2017gnu] have confirmed this. ### Charm Quarks -Charm quarks offer an advantage over the light quarks because for temperatures a few times $T_{pc}$ , the Boltzmann approximation works for an ideal massive quark-antiquark gas [Allton:2005gk,BAZAVOV2014210]. Therefore, in this approximation, the dimensionless partial charm quark pressure, $P^C_{q}$ , is given by, +Charm quarks offer an advantage over the light quarks because for temperatures a few times $T_{pc}$, the Boltzmann approximation works for an ideal massive quark-antiquark gas [Allton:2005gk,BAZAVOV2014210]. Therefore, in this approximation, the dimensionless partial charm quark pressure, $P^C_{q}$, is given by, $$\begin{eqnarray} P^C_{q}(T,\overrightarrow{\mu})&=&\dfrac{3}{\pi^2}\bigg(\dfrac{m_q^C}{T}\bigg)^2K_2(m_q^C/T)\cdot \nonumber \\ @@ -87,24 +87,24 @@ $$\begin{eqnarray} \end{eqnarray}$$ -where $m_q^C$ is the pole mass of the charm quark, and the degeneracy factor is 6. +where $m_q^C$ is the pole mass of the charm quark, and the degeneracy factor is 6. ## Enhancement of charmed hadrons -Shown are partial charmed baryon pressure [Left] and partial charmed meson pressure [Right] along with the respective QM-HRG, PDG-HRG and 1S1P-HRG (see text) predictions. The yellow bands represent $T_{pc}$ with its uncertainty. +Shown are partial charmed baryon pressure [Left] and partial charmed meson pressure [Right] along with the respective QM-HRG, PDG-HRG and 1S1P-HRG (see text) predictions. The yellow bands represent $T_{pc}$ with its uncertainty. -To investigate the nature of charm degrees of freedom above $T_{pc}$ , we extend the simple hadron gas model allowing the presence of partial charm quark pressure based on Ref.[Mukherjee:2015mxc], +To investigate the nature of charm degrees of freedom above $T_{pc}$, we extend the simple hadron gas model allowing the presence of partial charm quark pressure based on Ref.[Mukherjee:2015mxc], $$\begin{align} P_C(T,\vec{\mu})=P^C_{M}(T,\vec{\mu})+P^C_{B}(T,\vec{\mu})+P^C_{q}(T,\vec{\mu}) \, . \end{align}$$ -In our recent works [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf], we show that this model successfully passes numerous validity tests and satisfies various constraints [Bazavov:2023xzm]. In this quasi-particle model, the partial pressures of quark-, baryon- and meson-like excitations for $\vec{\mu}=0$ can be expressed in terms of the generalized susceptibilities as follows, +In our recent works [Bazavov:2023xzm, Sharma:2024ucs, Sharma:2024edf], we show that this model successfully passes numerous validity tests and satisfies various constraints [Bazavov:2023xzm]. In this quasi-particle model, the partial pressures of quark-, baryon- and meson-like excitations for $\vec{\mu}=0$ can be expressed in terms of the generalized susceptibilities as follows, $$\begin{align} P^C_{q}&=9(\chi^{BC}_{13}-\chi^{BC}_{22})/2\; , @@ -115,29 +115,29 @@ $$\begin{align} \end{align}$$ -Note that in the validity regime of HRG, $\chi^{BC}_{22}\approx\chi^{BC}_{13}$ . Hence, in this phase the partial pressure contribution from quark-like excitations, $P^C_q$ is, by construction, zero, and $P^C_B$ and $P^C_M$ reduce to $\chi^{BC}_{13}$ and $\chi^4_C-\chi^{BC}_{13}$ , respectively. +Note that in the validity regime of HRG, $\chi^{BC}_{22}\approx\chi^{BC}_{13}$. Hence, in this phase the partial pressure contribution from quark-like excitations, $P^C_q$ is, by construction, zero, and $P^C_B$ and $P^C_M$ reduce to $\chi^{BC}_{13}$ and $\chi^4_C-\chi^{BC}_{13}$, respectively. -Continuum estimates for charmed baryon and meson partial pressures shown in Fig. [fig:enhan] are obtained by multiplying continuum extrapolated $\chi^C_4$ values to ratios $P^C_B/P_C$ and $P^C_M/P_C$ shown in our previous work [Bazavov:2023xzm]. As mentioned earlier, these ratios, despite being calculated on a finite temporal lattice extent, are largely cut-off independent. For $T -Fig. [fig:Pq] [Left] shows that the partial pressure contribution to $P_C$ from charm quark-like excitation becomes non-zero at $T_{pc}$ , and starts increasing as a function of temperature. This increasing $P^C_q$ results in a decreasing relative partial pressure contribution to $P_C$ from hadron-like excitations. At the highest temperature shown in Figs. [fig:enhan] and [fig:Pq] [Left], i.e., $175$ MeV, the relative partial pressure contributions from hadron and quark-like excitations cross. Based on this trend, it is expected that above $T\sim175$ MeV, $P^C_q$ will become the dominant contribution. Therefore, eventually $P^C_B$ and $P^C_M$ shown in Fig. [fig:enhan] will turn around and start decreasing. At sufficiently high temperatures partial pressure contribution from charmed hadron-like excitations will go to zero. +Fig. [fig:Pq] [Left] shows that the partial pressure contribution to $P_C$ from charm quark-like excitation becomes non-zero at $T_{pc}$, and starts increasing as a function of temperature. This increasing $P^C_q$ results in a decreasing relative partial pressure contribution to $P_C$ from hadron-like excitations. At the highest temperature shown in Figs. [fig:enhan] and [fig:Pq] [Left], i.e., $175$ MeV, the relative partial pressure contributions from hadron and quark-like excitations cross. Based on this trend, it is expected that above $T\sim175$ MeV, $P^C_q$ will become the dominant contribution. Therefore, eventually $P^C_B$ and $P^C_M$ shown in Fig. [fig:enhan] will turn around and start decreasing. At sufficiently high temperatures partial pressure contribution from charmed hadron-like excitations will go to zero. -Departure of charmed hadronic pressures from their respective QM-HRG predictions hints at a sequential melting pattern. This means that the higher excited charmed hadrons start dissociating at $T_{pc}$ , whereas the ground state charmed hadrons survive inside the QGP. To put this on more solid grounds, we performed another HRG model calculation based on the low-lying, $1S$ and $1P$ , charmed hadrons tabulated in [Chen:2022asf] we label this as 1S1P-HRG. For $T_{pc} + \documentclass{article} diff --git a/tests/data/latex/groundtruth/example_02.tex.dclg b/tests/data/latex/groundtruth/example_02.tex.dclg index 6ab9fd8484..6d431a4d20 100644 --- a/tests/data/latex/groundtruth/example_02.tex.dclg +++ b/tests/data/latex/groundtruth/example_02.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass{article} diff --git a/tests/data/latex/groundtruth/example_02.tex.json b/tests/data/latex/groundtruth/example_02.tex.json index 81578bf59b..c1343d004a 100644 --- a/tests/data/latex/groundtruth/example_02.tex.json +++ b/tests/data/latex/groundtruth/example_02.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "example_02", "furniture": { "self_ref": "#/furniture", diff --git a/tests/data/latex/groundtruth/example_02.tex.md b/tests/data/latex/groundtruth/example_02.tex.md index d8eb56069b..1d95505c9c 100644 --- a/tests/data/latex/groundtruth/example_02.tex.md +++ b/tests/data/latex/groundtruth/example_02.tex.md @@ -1,6 +1,6 @@ ## Math Examples -Inline math: $E = mc^2$ +Inline math: $E = mc^2$ Display math: diff --git a/tests/data/md/groundtruth/escaped_characters.md.json b/tests/data/md/groundtruth/escaped_characters.md.json index 287450224f..4e6a271c10 100644 --- a/tests/data/md/groundtruth/escaped_characters.md.json +++ b/tests/data/md/groundtruth/escaped_characters.md.json @@ -1,10 +1,10 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "escaped_characters", "origin": { "mimetype": "text/html", - "binary_hash": 18124772015084648739, + "binary_hash": 2475516137608523292, "filename": "escaped_characters.md" }, "furniture": { @@ -167,7 +167,7 @@ "orig": "& < > \" '", "text": "& < > \" '", "enumerated": true, - "marker": "" + "marker": "1." }, { "self_ref": "#/texts/5", @@ -275,8 +275,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The pipe symbol (| or", - "text": "The pipe symbol (| or" + "orig": "The pipe symbol (| or ", + "text": "The pipe symbol (| or " }, { "self_ref": "#/texts/12", diff --git a/tests/data/md/groundtruth/inline_and_formatting.md.yaml b/tests/data/md/groundtruth/inline_and_formatting.md.yaml index c6181a41cb..75b046b965 100644 --- a/tests/data/md/groundtruth/inline_and_formatting.md.yaml +++ b/tests/data/md/groundtruth/inline_and_formatting.md.yaml @@ -5,14 +5,14 @@ body: - $ref: '#/groups/0' - $ref: '#/groups/1' - $ref: '#/groups/2' - - $ref: '#/texts/32' + - $ref: '#/texts/34' - $ref: '#/groups/8' - $ref: '#/groups/11' - - $ref: '#/texts/43' + - $ref: '#/texts/45' - $ref: '#/groups/13' - - $ref: '#/texts/50' - - $ref: '#/texts/51' - $ref: '#/texts/52' + - $ref: '#/texts/53' + - $ref: '#/texts/54' - $ref: '#/tables/0' content_layer: body label: unspecified @@ -32,6 +32,8 @@ groups: - $ref: '#/texts/4' - $ref: '#/texts/5' - $ref: '#/texts/6' + - $ref: '#/texts/7' + - $ref: '#/texts/8' content_layer: body label: inline name: group @@ -39,9 +41,9 @@ groups: $ref: '#/body' self_ref: '#/groups/0' - children: - - $ref: '#/texts/7' - - $ref: '#/texts/8' - $ref: '#/texts/9' + - $ref: '#/texts/10' + - $ref: '#/texts/11' content_layer: body label: inline name: group @@ -49,13 +51,13 @@ groups: $ref: '#/body' self_ref: '#/groups/1' - children: - - $ref: '#/texts/10' - - $ref: '#/texts/14' - - $ref: '#/texts/18' - - $ref: '#/texts/22' - - $ref: '#/texts/26' - - $ref: '#/texts/27' + - $ref: '#/texts/12' + - $ref: '#/texts/16' + - $ref: '#/texts/20' + - $ref: '#/texts/24' - $ref: '#/texts/28' + - $ref: '#/texts/29' + - $ref: '#/texts/30' content_layer: body label: list name: list @@ -63,58 +65,58 @@ groups: $ref: '#/body' self_ref: '#/groups/2' - children: - - $ref: '#/texts/11' - - $ref: '#/texts/12' - $ref: '#/texts/13' + - $ref: '#/texts/14' + - $ref: '#/texts/15' content_layer: body label: inline name: group parent: - $ref: '#/texts/10' + $ref: '#/texts/12' self_ref: '#/groups/3' - children: - - $ref: '#/texts/15' - - $ref: '#/texts/16' - $ref: '#/texts/17' + - $ref: '#/texts/18' + - $ref: '#/texts/19' content_layer: body label: inline name: group parent: - $ref: '#/texts/14' + $ref: '#/texts/16' self_ref: '#/groups/4' - children: - - $ref: '#/texts/19' - - $ref: '#/texts/20' - $ref: '#/texts/21' + - $ref: '#/texts/22' + - $ref: '#/texts/23' content_layer: body label: inline name: group parent: - $ref: '#/texts/18' + $ref: '#/texts/20' self_ref: '#/groups/5' - children: - - $ref: '#/texts/23' - - $ref: '#/texts/24' - $ref: '#/texts/25' + - $ref: '#/texts/26' + - $ref: '#/texts/27' content_layer: body label: inline name: group parent: - $ref: '#/texts/22' + $ref: '#/texts/24' self_ref: '#/groups/6' - children: - - $ref: '#/texts/29' - - $ref: '#/texts/30' - $ref: '#/texts/31' + - $ref: '#/texts/32' + - $ref: '#/texts/33' content_layer: body label: inline name: group parent: - $ref: '#/texts/28' + $ref: '#/texts/30' self_ref: '#/groups/7' - children: - - $ref: '#/texts/33' - - $ref: '#/texts/36' + - $ref: '#/texts/35' + - $ref: '#/texts/38' content_layer: body label: list name: list @@ -122,28 +124,28 @@ groups: $ref: '#/body' self_ref: '#/groups/8' - children: - - $ref: '#/texts/34' - - $ref: '#/texts/35' + - $ref: '#/texts/36' + - $ref: '#/texts/37' content_layer: body label: inline name: group parent: - $ref: '#/texts/33' + $ref: '#/texts/35' self_ref: '#/groups/9' - children: - - $ref: '#/texts/37' - - $ref: '#/texts/38' - $ref: '#/texts/39' - $ref: '#/texts/40' + - $ref: '#/texts/41' + - $ref: '#/texts/42' content_layer: body label: inline name: group parent: - $ref: '#/texts/36' + $ref: '#/texts/38' self_ref: '#/groups/10' - children: - - $ref: '#/texts/41' - - $ref: '#/texts/42' + - $ref: '#/texts/43' + - $ref: '#/texts/44' content_layer: body label: inline name: group @@ -151,19 +153,19 @@ groups: $ref: '#/body' self_ref: '#/groups/11' - children: - - $ref: '#/texts/44' - - $ref: '#/texts/45' - $ref: '#/texts/46' + - $ref: '#/texts/47' + - $ref: '#/texts/48' content_layer: body label: inline name: group parent: - $ref: '#/texts/43' + $ref: '#/texts/45' self_ref: '#/groups/12' - children: - - $ref: '#/texts/47' - - $ref: '#/texts/48' - $ref: '#/texts/49' + - $ref: '#/texts/50' + - $ref: '#/texts/51' content_layer: body label: inline name: group @@ -171,54 +173,45 @@ groups: $ref: '#/body' self_ref: '#/groups/13' - children: - - $ref: '#/texts/53' - content_layer: body - label: inline - name: group - parent: - $ref: '#/groups/15' - self_ref: '#/groups/14' -- children: - - $ref: '#/groups/14' + - $ref: '#/groups/15' content_layer: body label: unspecified name: rich_cell_group_0_0_0 parent: $ref: '#/tables/0' - self_ref: '#/groups/15' + self_ref: '#/groups/14' - children: - - $ref: '#/texts/54' + - $ref: '#/texts/55' content_layer: body label: inline name: group parent: - $ref: '#/groups/17' - self_ref: '#/groups/16' + $ref: '#/groups/14' + self_ref: '#/groups/15' - children: - - $ref: '#/groups/16' + - $ref: '#/groups/17' content_layer: body label: unspecified name: rich_cell_group_0_1_0 parent: $ref: '#/tables/0' - self_ref: '#/groups/17' + self_ref: '#/groups/16' - children: - - $ref: '#/texts/55' - $ref: '#/texts/56' content_layer: body label: inline name: group parent: - $ref: '#/groups/19' - self_ref: '#/groups/18' + $ref: '#/groups/16' + self_ref: '#/groups/17' - children: - - $ref: '#/groups/18' + - $ref: '#/groups/19' content_layer: body label: unspecified name: rich_cell_group_0_0_2 parent: $ref: '#/tables/0' - self_ref: '#/groups/19' + self_ref: '#/groups/18' - children: - $ref: '#/texts/57' - $ref: '#/texts/58' @@ -226,16 +219,16 @@ groups: label: inline name: group parent: - $ref: '#/groups/21' - self_ref: '#/groups/20' + $ref: '#/groups/18' + self_ref: '#/groups/19' - children: - - $ref: '#/groups/20' + - $ref: '#/groups/21' content_layer: body label: unspecified name: rich_cell_group_0_0_3 parent: $ref: '#/tables/0' - self_ref: '#/groups/21' + self_ref: '#/groups/20' - children: - $ref: '#/texts/59' - $ref: '#/texts/60' @@ -243,37 +236,37 @@ groups: label: inline name: group parent: - $ref: '#/groups/23' - self_ref: '#/groups/22' + $ref: '#/groups/20' + self_ref: '#/groups/21' - children: - - $ref: '#/groups/22' + - $ref: '#/groups/23' content_layer: body label: unspecified name: rich_cell_group_0_0_4 parent: $ref: '#/tables/0' - self_ref: '#/groups/23' + self_ref: '#/groups/22' - children: - $ref: '#/texts/61' - $ref: '#/texts/62' - $ref: '#/texts/63' - - $ref: '#/texts/64' - - $ref: '#/texts/65' content_layer: body label: inline name: group parent: - $ref: '#/groups/25' - self_ref: '#/groups/24' + $ref: '#/groups/22' + self_ref: '#/groups/23' - children: - - $ref: '#/groups/24' + - $ref: '#/groups/25' content_layer: body label: unspecified name: rich_cell_group_0_0_5 parent: $ref: '#/tables/0' - self_ref: '#/groups/25' + self_ref: '#/groups/24' - children: + - $ref: '#/texts/64' + - $ref: '#/texts/65' - $ref: '#/texts/66' - $ref: '#/texts/67' - $ref: '#/texts/68' @@ -281,32 +274,42 @@ groups: label: inline name: group parent: - $ref: '#/groups/27' - self_ref: '#/groups/26' + $ref: '#/groups/24' + self_ref: '#/groups/25' - children: - - $ref: '#/groups/26' + - $ref: '#/groups/27' content_layer: body label: unspecified name: rich_cell_group_0_0_6 parent: $ref: '#/tables/0' - self_ref: '#/groups/27' + self_ref: '#/groups/26' - children: - $ref: '#/texts/69' - $ref: '#/texts/70' + - $ref: '#/texts/71' content_layer: body label: inline name: group parent: - $ref: '#/groups/29' - self_ref: '#/groups/28' + $ref: '#/groups/26' + self_ref: '#/groups/27' - children: - - $ref: '#/groups/28' + - $ref: '#/groups/29' content_layer: body label: unspecified name: rich_cell_group_0_0_7 parent: $ref: '#/tables/0' + self_ref: '#/groups/28' +- children: + - $ref: '#/texts/72' + - $ref: '#/texts/73' + content_layer: body + label: inline + name: group + parent: + $ref: '#/groups/28' self_ref: '#/groups/29' key_value_items: [] name: inline_and_formatting @@ -321,14 +324,14 @@ tables: - annotations: [] captions: [] children: - - $ref: '#/groups/15' - - $ref: '#/groups/17' - - $ref: '#/groups/19' - - $ref: '#/groups/21' - - $ref: '#/groups/23' - - $ref: '#/groups/25' - - $ref: '#/groups/27' - - $ref: '#/groups/29' + - $ref: '#/groups/14' + - $ref: '#/groups/16' + - $ref: '#/groups/18' + - $ref: '#/groups/20' + - $ref: '#/groups/22' + - $ref: '#/groups/24' + - $ref: '#/groups/26' + - $ref: '#/groups/28' content_layer: body data: grid: @@ -518,7 +521,7 @@ tables: end_row_offset_idx: 1 fillable: false ref: - $ref: '#/groups/15' + $ref: '#/groups/14' row_header: false row_section: false row_span: 1 @@ -531,7 +534,7 @@ tables: end_row_offset_idx: 1 fillable: false ref: - $ref: '#/groups/17' + $ref: '#/groups/16' row_header: false row_section: false row_span: 1 @@ -566,7 +569,7 @@ tables: end_row_offset_idx: 3 fillable: false ref: - $ref: '#/groups/19' + $ref: '#/groups/18' row_header: false row_section: false row_span: 1 @@ -590,7 +593,7 @@ tables: end_row_offset_idx: 4 fillable: false ref: - $ref: '#/groups/21' + $ref: '#/groups/20' row_header: false row_section: false row_span: 1 @@ -614,7 +617,7 @@ tables: end_row_offset_idx: 5 fillable: false ref: - $ref: '#/groups/23' + $ref: '#/groups/22' row_header: false row_section: false row_span: 1 @@ -638,7 +641,7 @@ tables: end_row_offset_idx: 6 fillable: false ref: - $ref: '#/groups/25' + $ref: '#/groups/24' row_header: false row_section: false row_span: 1 @@ -662,7 +665,7 @@ tables: end_row_offset_idx: 7 fillable: false ref: - $ref: '#/groups/27' + $ref: '#/groups/26' row_header: false row_section: false row_span: 1 @@ -686,7 +689,7 @@ tables: end_row_offset_idx: 8 fillable: false ref: - $ref: '#/groups/29' + $ref: '#/groups/28' row_header: false row_section: false row_span: 1 @@ -733,12 +736,12 @@ texts: - children: [] content_layer: body label: text - orig: Foo + orig: 'Foo ' parent: $ref: '#/groups/0' prov: [] self_ref: '#/texts/2' - text: Foo + text: 'Foo ' - children: [] content_layer: body formatting: @@ -754,6 +757,15 @@ texts: prov: [] self_ref: '#/texts/3' text: emphasis +- children: [] + content_layer: body + label: text + orig: ' ' + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/4' + text: ' ' - children: [] content_layer: body formatting: @@ -767,8 +779,17 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/4' + self_ref: '#/texts/5' text: strong emphasis +- children: [] + content_layer: body + label: text + orig: ' ' + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/6' + text: ' ' - children: [] content_layer: body formatting: @@ -782,7 +803,7 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/5' + self_ref: '#/texts/7' text: both - children: [] content_layer: body @@ -791,17 +812,17 @@ texts: parent: $ref: '#/groups/0' prov: [] - self_ref: '#/texts/6' + self_ref: '#/texts/8' text: . - children: [] content_layer: body label: text - orig: 'Create your feature branch:' + orig: 'Create your feature branch: ' parent: $ref: '#/groups/1' prov: [] - self_ref: '#/texts/7' - text: 'Create your feature branch:' + self_ref: '#/texts/9' + text: 'Create your feature branch: ' - captions: [] children: [] code_language: unknown @@ -813,7 +834,7 @@ texts: $ref: '#/groups/1' prov: [] references: [] - self_ref: '#/texts/8' + self_ref: '#/texts/10' text: git checkout -b feature/AmazingFeature - children: [] content_layer: body @@ -822,7 +843,7 @@ texts: parent: $ref: '#/groups/1' prov: [] - self_ref: '#/texts/9' + self_ref: '#/texts/11' text: . - children: - $ref: '#/groups/3' @@ -834,17 +855,17 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/10' + self_ref: '#/texts/12' text: '' - children: [] content_layer: body label: text - orig: Pull the + orig: 'Pull the ' parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/11' - text: Pull the + self_ref: '#/texts/13' + text: 'Pull the ' - children: [] content_layer: body formatting: @@ -859,7 +880,7 @@ texts: parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/12' + self_ref: '#/texts/14' text: repository - children: [] content_layer: body @@ -868,7 +889,7 @@ texts: parent: $ref: '#/groups/3' prov: [] - self_ref: '#/texts/13' + self_ref: '#/texts/15' text: . - children: - $ref: '#/groups/4' @@ -880,7 +901,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/14' + self_ref: '#/texts/16' text: '' - children: [] content_layer: body @@ -889,7 +910,7 @@ texts: parent: $ref: '#/groups/4' prov: [] - self_ref: '#/texts/15' + self_ref: '#/texts/17' text: Create your feature branch ( - captions: [] children: [] @@ -902,7 +923,7 @@ texts: $ref: '#/groups/4' prov: [] references: [] - self_ref: '#/texts/16' + self_ref: '#/texts/18' text: git checkout -b feature/AmazingFeature - children: [] content_layer: body @@ -911,7 +932,7 @@ texts: parent: $ref: '#/groups/4' prov: [] - self_ref: '#/texts/17' + self_ref: '#/texts/19' text: ) - children: - $ref: '#/groups/5' @@ -923,7 +944,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/18' + self_ref: '#/texts/20' text: '' - children: [] content_layer: body @@ -932,7 +953,7 @@ texts: parent: $ref: '#/groups/5' prov: [] - self_ref: '#/texts/19' + self_ref: '#/texts/21' text: Commit your changes ( - captions: [] children: [] @@ -945,7 +966,7 @@ texts: $ref: '#/groups/5' prov: [] references: [] - self_ref: '#/texts/20' + self_ref: '#/texts/22' text: git commit -m 'Add some AmazingFeature' - children: [] content_layer: body @@ -954,7 +975,7 @@ texts: parent: $ref: '#/groups/5' prov: [] - self_ref: '#/texts/21' + self_ref: '#/texts/23' text: ) - children: - $ref: '#/groups/6' @@ -966,7 +987,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/22' + self_ref: '#/texts/24' text: '' - children: [] content_layer: body @@ -975,7 +996,7 @@ texts: parent: $ref: '#/groups/6' prov: [] - self_ref: '#/texts/23' + self_ref: '#/texts/25' text: Push to the branch ( - captions: [] children: [] @@ -988,7 +1009,7 @@ texts: $ref: '#/groups/6' prov: [] references: [] - self_ref: '#/texts/24' + self_ref: '#/texts/26' text: git push origin feature/AmazingFeature - children: [] content_layer: body @@ -997,7 +1018,7 @@ texts: parent: $ref: '#/groups/6' prov: [] - self_ref: '#/texts/25' + self_ref: '#/texts/27' text: ) - children: [] content_layer: body @@ -1008,7 +1029,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/26' + self_ref: '#/texts/28' text: Open a Pull Request - children: [] content_layer: body @@ -1025,7 +1046,7 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/27' + self_ref: '#/texts/29' text: Whole list item has same formatting - children: - $ref: '#/groups/7' @@ -1037,17 +1058,17 @@ texts: parent: $ref: '#/groups/2' prov: [] - self_ref: '#/texts/28' + self_ref: '#/texts/30' text: '' - children: [] content_layer: body label: text - orig: List item has + orig: 'List item has ' parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/29' - text: List item has + self_ref: '#/texts/31' + text: 'List item has ' - children: [] content_layer: body formatting: @@ -1061,17 +1082,17 @@ texts: parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/30' + self_ref: '#/texts/32' text: mixed or partial - children: [] content_layer: body label: text - orig: formatting + orig: ' formatting' parent: $ref: '#/groups/7' prov: [] - self_ref: '#/texts/31' - text: formatting + self_ref: '#/texts/33' + text: ' formatting' - children: [] content_layer: body formatting: @@ -1085,7 +1106,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/32' + self_ref: '#/texts/34' text: Whole heading is italic - children: - $ref: '#/groups/9' @@ -1097,7 +1118,7 @@ texts: parent: $ref: '#/groups/8' prov: [] - self_ref: '#/texts/33' + self_ref: '#/texts/35' text: '' - children: [] content_layer: body @@ -1112,7 +1133,7 @@ texts: parent: $ref: '#/groups/9' prov: [] - self_ref: '#/texts/34' + self_ref: '#/texts/36' text: First - children: [] content_layer: body @@ -1121,7 +1142,7 @@ texts: parent: $ref: '#/groups/9' prov: [] - self_ref: '#/texts/35' + self_ref: '#/texts/37' text: ': Lorem ipsum.' - children: - $ref: '#/groups/10' @@ -1133,7 +1154,7 @@ texts: parent: $ref: '#/groups/8' prov: [] - self_ref: '#/texts/36' + self_ref: '#/texts/38' text: '' - children: [] content_layer: body @@ -1148,17 +1169,17 @@ texts: parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/37' + self_ref: '#/texts/39' text: Second - children: [] content_layer: body label: text - orig: ': Dolor' + orig: ': Dolor ' parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/38' - text: ': Dolor' + self_ref: '#/texts/40' + text: ': Dolor ' - captions: [] children: [] code_language: unknown @@ -1170,26 +1191,26 @@ texts: $ref: '#/groups/10' prov: [] references: [] - self_ref: '#/texts/39' + self_ref: '#/texts/41' text: sit - children: [] content_layer: body label: text - orig: amet. + orig: ' amet.' parent: $ref: '#/groups/10' prov: [] - self_ref: '#/texts/40' - text: amet. + self_ref: '#/texts/42' + text: ' amet.' - children: [] content_layer: body label: text - orig: Some + orig: 'Some ' parent: $ref: '#/groups/11' prov: [] - self_ref: '#/texts/41' - text: Some + self_ref: '#/texts/43' + text: 'Some ' - captions: [] children: [] code_language: unknown @@ -1207,7 +1228,7 @@ texts: $ref: '#/groups/11' prov: [] references: [] - self_ref: '#/texts/42' + self_ref: '#/texts/44' text: formatted_code - children: - $ref: '#/groups/12' @@ -1218,7 +1239,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/43' + self_ref: '#/texts/45' text: '' - children: [] content_layer: body @@ -1233,17 +1254,17 @@ texts: parent: $ref: '#/groups/12' prov: [] - self_ref: '#/texts/44' + self_ref: '#/texts/46' text: Partially formatted - children: [] content_layer: body label: text - orig: heading to_escape + orig: ' heading to_escape ' parent: $ref: '#/groups/12' prov: [] - self_ref: '#/texts/45' - text: heading to_escape + self_ref: '#/texts/47' + text: ' heading to_escape ' - captions: [] children: [] code_language: unknown @@ -1255,17 +1276,17 @@ texts: $ref: '#/groups/12' prov: [] references: [] - self_ref: '#/texts/46' + self_ref: '#/texts/48' text: not_to_escape - children: [] content_layer: body label: text - orig: This is + orig: 'This is ' parent: $ref: '#/groups/13' prov: [] - self_ref: '#/texts/47' - text: This is + self_ref: '#/texts/49' + text: 'This is ' - children: [] content_layer: body formatting: @@ -1279,17 +1300,17 @@ texts: parent: $ref: '#/groups/13' prov: [] - self_ref: '#/texts/48' + self_ref: '#/texts/50' text: old - children: [] content_layer: body label: text - orig: new. + orig: ' new.' parent: $ref: '#/groups/13' prov: [] - self_ref: '#/texts/49' - text: new. + self_ref: '#/texts/51' + text: ' new.' - children: [] content_layer: body label: text @@ -1297,7 +1318,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/50' + self_ref: '#/texts/52' text: Approx ~5 items and ~10 more. - children: [] content_layer: body @@ -1307,7 +1328,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/51' + self_ref: '#/texts/53' text: $$E=mc^2$$ - children: [] content_layer: body @@ -1317,7 +1338,7 @@ texts: parent: $ref: '#/body' prov: [] - self_ref: '#/texts/52' + self_ref: '#/texts/54' text: Table Heading - children: [] content_layer: body @@ -1330,9 +1351,9 @@ texts: label: text orig: Bold Heading parent: - $ref: '#/groups/14' + $ref: '#/groups/15' prov: [] - self_ref: '#/texts/53' + self_ref: '#/texts/55' text: Bold Heading - children: [] content_layer: body @@ -1345,9 +1366,9 @@ texts: label: text orig: Italic Heading parent: - $ref: '#/groups/16' + $ref: '#/groups/17' prov: [] - self_ref: '#/texts/54' + self_ref: '#/texts/56' text: Italic Heading - children: [] content_layer: body @@ -1360,28 +1381,28 @@ texts: label: text orig: C parent: - $ref: '#/groups/18' + $ref: '#/groups/19' prov: [] - self_ref: '#/texts/55' + self_ref: '#/texts/57' text: C - children: [] content_layer: body label: text - orig: Cadre + orig: ' Cadre' parent: - $ref: '#/groups/18' + $ref: '#/groups/19' prov: [] - self_ref: '#/texts/56' - text: Cadre + self_ref: '#/texts/58' + text: ' Cadre' - children: [] content_layer: body label: text - orig: foo + orig: 'foo ' parent: - $ref: '#/groups/20' + $ref: '#/groups/21' prov: [] - self_ref: '#/texts/57' - text: foo + self_ref: '#/texts/59' + text: 'foo ' - children: [] content_layer: body formatting: @@ -1393,9 +1414,9 @@ texts: label: text orig: bar parent: - $ref: '#/groups/20' + $ref: '#/groups/21' prov: [] - self_ref: '#/texts/58' + self_ref: '#/texts/60' text: bar - children: [] content_layer: body @@ -1408,10 +1429,19 @@ texts: label: text orig: A parent: - $ref: '#/groups/22' + $ref: '#/groups/23' prov: [] - self_ref: '#/texts/59' + self_ref: '#/texts/61' text: A +- children: [] + content_layer: body + label: text + orig: ' ' + parent: + $ref: '#/groups/23' + prov: [] + self_ref: '#/texts/62' + text: ' ' - children: [] content_layer: body formatting: @@ -1423,9 +1453,9 @@ texts: label: text orig: B parent: - $ref: '#/groups/22' + $ref: '#/groups/23' prov: [] - self_ref: '#/texts/60' + self_ref: '#/texts/63' text: B - children: [] content_layer: body @@ -1438,19 +1468,19 @@ texts: label: text orig: italic parent: - $ref: '#/groups/24' + $ref: '#/groups/25' prov: [] - self_ref: '#/texts/61' + self_ref: '#/texts/64' text: italic - children: [] content_layer: body label: text - orig: and + orig: ' and ' parent: - $ref: '#/groups/24' + $ref: '#/groups/25' prov: [] - self_ref: '#/texts/62' - text: and + self_ref: '#/texts/65' + text: ' and ' - children: [] content_layer: body formatting: @@ -1462,19 +1492,19 @@ texts: label: text orig: bold parent: - $ref: '#/groups/24' + $ref: '#/groups/25' prov: [] - self_ref: '#/texts/63' + self_ref: '#/texts/66' text: bold - children: [] content_layer: body label: text - orig: and + orig: ' and ' parent: - $ref: '#/groups/24' + $ref: '#/groups/25' prov: [] - self_ref: '#/texts/64' - text: and + self_ref: '#/texts/67' + text: ' and ' - children: [] content_layer: body formatting: @@ -1486,19 +1516,19 @@ texts: label: text orig: strikethrough parent: - $ref: '#/groups/24' + $ref: '#/groups/25' prov: [] - self_ref: '#/texts/65' + self_ref: '#/texts/68' text: strikethrough - children: [] content_layer: body label: text - orig: run + orig: 'run ' parent: - $ref: '#/groups/26' + $ref: '#/groups/27' prov: [] - self_ref: '#/texts/66' - text: run + self_ref: '#/texts/69' + text: 'run ' - captions: [] children: [] code_language: unknown @@ -1507,37 +1537,37 @@ texts: label: code orig: build parent: - $ref: '#/groups/26' + $ref: '#/groups/27' prov: [] references: [] - self_ref: '#/texts/67' + self_ref: '#/texts/70' text: build - children: [] content_layer: body label: text - orig: now + orig: ' now' parent: - $ref: '#/groups/26' + $ref: '#/groups/27' prov: [] - self_ref: '#/texts/68' - text: now + self_ref: '#/texts/71' + text: ' now' - children: [] content_layer: body label: text - orig: visit + orig: 'visit ' parent: - $ref: '#/groups/28' + $ref: '#/groups/29' prov: [] - self_ref: '#/texts/69' - text: visit + self_ref: '#/texts/72' + text: 'visit ' - children: [] content_layer: body hyperlink: https://github.com/docling-project/docling label: text orig: Docling parent: - $ref: '#/groups/28' + $ref: '#/groups/29' prov: [] - self_ref: '#/texts/70' + self_ref: '#/texts/73' text: Docling -version: 1.10.0 +version: 1.11.0 diff --git a/tests/data/md/groundtruth/line_breaks.md.json b/tests/data/md/groundtruth/line_breaks.md.json index d67300612b..e4b0d52710 100644 --- a/tests/data/md/groundtruth/line_breaks.md.json +++ b/tests/data/md/groundtruth/line_breaks.md.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "line_breaks", "origin": { "mimetype": "text/markdown", @@ -360,8 +360,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Author", - "text": "Author" + "orig": "Author ", + "text": "Author " }, { "self_ref": "#/texts/14", diff --git a/tests/data/md/groundtruth/line_breaks.md.md b/tests/data/md/groundtruth/line_breaks.md.md index 51ca20bdaa..98588044a9 100644 --- a/tests/data/md/groundtruth/line_breaks.md.md +++ b/tests/data/md/groundtruth/line_breaks.md.md @@ -26,7 +26,7 @@ Affiliation ## Hard break between formatted runs (different formatting) -Author **John** +Author **John** University XYZ ## Multiple hard breaks in one paragraph diff --git a/tests/data/pages/groundtruth/pages_iwork09_formatted.pages.json b/tests/data/pages/groundtruth/pages_iwork09_formatted.pages.json index 0bdb702868..f9e0718fe4 100644 --- a/tests/data/pages/groundtruth/pages_iwork09_formatted.pages.json +++ b/tests/data/pages/groundtruth/pages_iwork09_formatted.pages.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pages_iwork09_formatted", "origin": { "mimetype": "application/vnd.apple.pages", diff --git a/tests/data/xbrl/groundtruth/mlac-20251231.xml.json b/tests/data/xbrl/groundtruth/mlac-20251231.xml.json index f13014d920..52c1bf292d 100644 --- a/tests/data/xbrl/groundtruth/mlac-20251231.xml.json +++ b/tests/data/xbrl/groundtruth/mlac-20251231.xml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "mlac-20251231", "furniture": { "self_ref": "#/furniture", @@ -3499,8 +3499,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Preference Shares", - "text": "Preference Shares", + "orig": "Preference Shares ", + "text": "Preference Shares ", "formatting": { "bold": true, "italic": true, @@ -3518,8 +3518,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "—", - "text": "-", + "orig": "— ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3549,8 +3549,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Class A Ordinary Shares", - "text": "Class A Ordinary Shares", + "orig": "Class A Ordinary Shares ", + "text": "Class A Ordinary Shares ", "formatting": { "bold": true, "italic": true, @@ -3568,8 +3568,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "—", - "text": "-", + "orig": "— ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3599,8 +3599,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Class B Ordinary Shares", - "text": "Class B Ordinary Shares", + "orig": "Class B Ordinary Shares ", + "text": "Class B Ordinary Shares ", "formatting": { "bold": true, "italic": true, @@ -3618,8 +3618,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "—", - "text": "-", + "orig": "— ", + "text": "- ", "formatting": { "bold": true, "italic": false, @@ -3943,8 +3943,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Company’s CODM has been identified as the Chief Executive Officer , who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment.", - "text": "The Company's CODM has been identified as the Chief Executive Officer , who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment." + "orig": "The Company’s CODM has been identified as the Chief Executive Officer, who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment.", + "text": "The Company's CODM has been identified as the Chief Executive Officer, who reviews the operating results for the Company as a whole to make decisions about allocating resources and assessing financial performance. Accordingly, management has determined that the Company only has one reportable segment." }, { "self_ref": "#/texts/201",
    Column AColumn B
    Simple cell upper left

    Simple cell with

    +
    Column AColumn B
    Simple cell upper left

    Simple cell with

    bold

    -

    and

    +

    and

    italic

    -

    text

    ABC

    Cell 1

    Cell 2

    Cell 3

    +

    text

    ABC

    Cell 1

    Cell 2

    Cell 3

    Rich cell
    A nested table

    ABC

    Cell 1

    Cell 2

    Cell 3

    -After table with bold , underline , strikethrough , and italic formatting +After table with bold, underline, strikethrough, and italic formatting

    Table with pictures

    diff --git a/tests/data/docx/groundtruth/docx_rich_cells.docx.md b/tests/data/docx/groundtruth/docx_rich_cells.docx.md index 2f6760c9a4..02c34b5851 100644 --- a/tests/data/docx/groundtruth/docx_rich_cells.docx.md +++ b/tests/data/docx/groundtruth/docx_rich_cells.docx.md @@ -3,7 +3,7 @@ | Column A | Column B | | - | - | | This is a list: - A First - A Second - A Third | This is a formatted list: - B **First** - B *Second* - B Third | -| First Paragraph Second Paragraph Third paragraph before a numbered list 1. Number one 2. Number two 3. Number three | This is simple text with **bold** , ~~strikethrough~~ and *italic* formatting with x 2 and H 2 O | +| First Paragraph Second Paragraph Third paragraph before a numbered list 1. Number one 2. Number two 3. Number three | This is simple text with **bold** , ~~strikethrough~~ and *italic* formatting with x 2 and H 2 O | | This is a paragraph This is another paragraph | | ### Table with nested table @@ -12,10 +12,10 @@ Before table | Column A | Column B | | - | - | -| Simple cell upper left | Simple cell with **bold** and *italic* text | +| Simple cell upper left | Simple cell with **bold** and *italic* text | | A B C Cell 1 Cell 2 Cell 3 | Rich cell A nested table A B C Cell 1 Cell 2 Cell 3 | -After table with **bold** , underline , ~~strikethrough~~ , and *italic* formatting +After table with **bold**, underline, ~~strikethrough~~, and *italic* formatting ### Table with pictures diff --git a/tests/data/docx/groundtruth/list_after_num_headers.docx.md b/tests/data/docx/groundtruth/list_after_num_headers.docx.md index ee749e6678..cff9cb01dd 100644 --- a/tests/data/docx/groundtruth/list_after_num_headers.docx.md +++ b/tests/data/docx/groundtruth/list_after_num_headers.docx.md @@ -7,11 +7,11 @@ ### 1 Glosario -- **Term 1** : Definition 1 -- **Term 2** : Definition 2 -- **Term 3** : Definition 3 -- **Term 4** : Definition 4 -- **Term 5** : Definition 5 +- **Term 1**: Definition 1 +- **Term 2**: Definition 2 +- **Term 3**: Definition 3 +- **Term 4**: Definition 4 +- **Term 5**: Definition 5 #### Subsection with an open list diff --git a/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt b/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt index eaa3130609..da0dd9de8f 100644 --- a/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt +++ b/tests/data/docx/groundtruth/unit_test_formatting.docx.itxt @@ -5,13 +5,13 @@ item-0 at level 0: unspecified: group _root_ item-4 at level 1: text: hyperlink item-5 at level 1: text: italic and bold hyperlink item-6 at level 1: inline: group group - item-7 at level 2: text: Normal - item-8 at level 2: text: italic - item-9 at level 2: text: bold - item-10 at level 2: text: underline - item-11 at level 2: text: and + item-7 at level 2: text: Normal + item-8 at level 2: text: italic + item-9 at level 2: text: bold + item-10 at level 2: text: underline + item-11 at level 2: text: and item-12 at level 2: text: hyperlink - item-13 at level 2: text: on the same line + item-13 at level 2: text: on the same line item-14 at level 1: text: item-15 at level 1: list: group list item-16 at level 2: list_item: Italic bullet 1 @@ -19,24 +19,24 @@ item-0 at level 0: unspecified: group _root_ item-18 at level 2: list_item: Underline bullet 3 item-19 at level 2: list_item: item-20 at level 3: inline: group group - item-21 at level 4: text: Some - item-22 at level 4: text: italic - item-23 at level 4: text: bold + item-21 at level 4: text: Some + item-22 at level 4: text: italic + item-23 at level 4: text: bold item-24 at level 4: text: underline item-25 at level 3: list: group list item-26 at level 4: list_item: item-27 at level 5: inline: group group - item-28 at level 6: text: Nested - item-29 at level 6: text: italic + item-28 at level 6: text: Nested + item-29 at level 6: text: italic item-30 at level 6: text: bold item-31 at level 1: text: item-32 at level 1: text: item-33 at level 1: text: item-34 at level 1: text: Indexation item-35 at level 1: inline: group group - item-36 at level 2: text: This text carries a + item-36 at level 2: text: This text carries a item-37 at level 2: text: complex-script bold - item-38 at level 2: text: property in OOXML but it should not be bold. + item-38 at level 2: text: property in OOXML but it should not be bold. item-39 at level 1: text: item-40 at level 1: text: The second page of the document with same header and footer item-41 at level 1: text: diff --git a/tests/data/docx/groundtruth/unit_test_formatting.docx.json b/tests/data/docx/groundtruth/unit_test_formatting.docx.json index e4155fd9d3..29e3e9f337 100644 --- a/tests/data/docx/groundtruth/unit_test_formatting.docx.json +++ b/tests/data/docx/groundtruth/unit_test_formatting.docx.json @@ -850,8 +850,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This text carries a", - "text": "This text carries a", + "orig": "This text carries a ", + "text": "This text carries a ", "formatting": { "bold": false, "italic": false, @@ -888,8 +888,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "property in OOXML but it should not be bold.", - "text": "property in OOXML but it should not be bold.", + "orig": " property in OOXML but it should not be bold.", + "text": " property in OOXML but it should not be bold.", "formatting": { "bold": false, "italic": false, diff --git a/tests/data/docx/groundtruth/word_image_anchors.docx.md b/tests/data/docx/groundtruth/word_image_anchors.docx.md index 29c0d58e86..332ba85025 100644 --- a/tests/data/docx/groundtruth/word_image_anchors.docx.md +++ b/tests/data/docx/groundtruth/word_image_anchors.docx.md @@ -6,7 +6,7 @@ February 20, 2025, 8:32PM -**This is test 1** 0:08 +**This is test 1** 0:08 Correct, he is not. diff --git a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json index 1e221bebb3..827d1d2686 100644 --- a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json +++ b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.json @@ -828,7 +828,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The cold storms of winter shall chill him no more,\nHis woes and his sorrows, his pains are all o'er;\nThe sod of the valley now covers his form,\nHe is safe in his last home, he feels not the storm.", + "orig": "The cold storms of winter shall chill him no more,\nHis woes and his sorrows, his pains are all o’er;\nThe sod of the valley now covers his form,\nHe is safe in his last home, he feels not the storm.", "text": "The cold storms of winter shall chill him no more,\nHis woes and his sorrows, his pains are all o'er;\nThe sod of the valley now covers his form,\nHe is safe in his last home, he feels not the storm." }, { @@ -905,7 +905,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh! mother, weep not, though our lot be hard,\nAnd we are helpless-God will be our guard:\nFor He our heavenly guardian doth not sleep;\nHe watches o'er us-mother, do not weep.", + "orig": "Oh! mother, weep not, though our lot be hard,\nAnd we are helpless—God will be our guard:\nFor He our heavenly guardian doth not sleep;\nHe watches o’er us—mother, do not weep.", "text": "Oh! mother, weep not, though our lot be hard,\nAnd we are helpless-God will be our guard:\nFor He our heavenly guardian doth not sleep;\nHe watches o'er us-mother, do not weep." }, { @@ -917,7 +917,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And grieve not for that dear loved home no more;\nOur sufferings and our wrongs, ah! why deplore?\nFor though we feel the stern oppressor's rod,\nYet he must yield, as well as we, to God.", + "orig": "And grieve not for that dear loved home no more;\nOur sufferings and our wrongs, ah! why deplore?\nFor though we feel the stern oppressor’s rod,\nYet he must yield, as well as we, to God.", "text": "And grieve not for that dear loved home no more;\nOur sufferings and our wrongs, ah! why deplore?\nFor though we feel the stern oppressor's rod,\nYet he must yield, as well as we, to God." }, { @@ -929,7 +929,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Torn from our home, our kindred and our friends,\nAnd in a stranger's land our days to end,\nNo heart feels for the poor, the bleeding slave;\nNo arm is stretched to rescue, and to save.", + "orig": "Torn from our home, our kindred and our friends,\nAnd in a stranger’s land our days to end,\nNo heart feels for the poor, the bleeding slave;\nNo arm is stretched to rescue, and to save.", "text": "Torn from our home, our kindred and our friends,\nAnd in a stranger's land our days to end,\nNo heart feels for the poor, the bleeding slave;\nNo arm is stretched to rescue, and to save." }, { @@ -941,7 +941,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless ", + "orig": "Oh! ye who boast of Freedom’s sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word—“that all are free”—\nWhen thousands groan in hopeless ", "text": "Oh! ye who boast of Freedom's sacred claims,\nDo ye not blush to see our galling chains;\nTo hear that sounding word-\"that all are free\"-\nWhen thousands groan in hopeless " }, { @@ -984,7 +984,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Upon your land it is a cruel stain-\nFreedom, what art thou?-nothing but a name.\nNo more, no more! Oh God, this cannot be;\nThou to thy children's aid wilt surely flee:\nIn thine own time deliverance thou wilt give,\nAnd bid us rise from slavery, and live.", + "orig": "Upon your land it is a cruel stain—\nFreedom, what art thou?—nothing but a name.\nNo more, no more! Oh God, this cannot be;\nThou to thy children’s aid wilt surely flee:\nIn thine own time deliverance thou wilt give,\nAnd bid us rise from slavery, and live.", "text": "Upon your land it is a cruel stain-\nFreedom, what art thou?-nothing but a name.\nNo more, no more! Oh God, this cannot be;\nThou to thy children's aid wilt surely flee:\nIn thine own time deliverance thou wilt give,\nAnd bid us rise from slavery, and live." }, { @@ -1031,7 +1031,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The friends we've loved, the home we've left,\nWill ofttimes claim a tear;\nAnd though of these we are bereft,\nStill memory makes them dear.", + "orig": "The friends we’ve loved, the home we’ve left,\nWill ofttimes claim a tear;\nAnd though of these we are bereft,\nStill memory makes them dear.", "text": "The friends we've loved, the home we've left,\nWill ofttimes claim a tear;\nAnd though of these we are bereft,\nStill memory makes them dear." }, { @@ -1043,7 +1043,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And deep we feel each trifling ill,\nEach sorrow of the soul:\nBut care we for the painful thrill,\nThat o'er some breasts doth roll?", + "orig": "And deep we feel each trifling ill,\nEach sorrow of the soul:\nBut care we for the painful thrill,\nThat o’er some breasts doth roll?", "text": "And deep we feel each trifling ill,\nEach sorrow of the soul:\nBut care we for the painful thrill,\nThat o'er some breasts doth roll?" }, { @@ -1055,7 +1055,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Poor Afric's son-ah! he must feel\nHow hard it is to part\nFrom all he lov'd-from all that life\nHad twined around his heart.", + "orig": "Poor Afric’s son—ah! he must feel\nHow hard it is to part\nFrom all he lov’d—from all that life\nHad twined around his heart.", "text": "Poor Afric's son-ah! he must feel\nHow hard it is to part\nFrom all he lov'd-from all that life\nHad twined around his heart." }, { @@ -1067,7 +1067,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "His is a sorrow deeper far,\nThan all that we can show;\nHis is a lasting grief, o'er which\nNo healing balm can flow.", + "orig": "His is a sorrow deeper far,\nThan all that we can show;\nHis is a lasting grief, o’er which\nNo healing balm can flow.", "text": "His is a sorrow deeper far,\nThan all that we can show;\nHis is a lasting grief, o'er which\nNo healing balm can flow." }, { @@ -1079,7 +1079,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The mother, wife, or child he loved,\nHe ne'er shall see again;\nTo him they're lost-ay, dead indeed:\nWhat for him doth remain?", + "orig": "The mother, wife, or child he loved,\nHe ne’er shall see again;\nTo him they’re lost—ay, dead indeed:\nWhat for him doth remain?", "text": "The mother, wife, or child he loved,\nHe ne'er shall see again;\nTo him they're lost-ay, dead indeed:\nWhat for him doth remain?" }, { @@ -1091,7 +1091,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A feeling of deep wretchedness\nComes o'er his troubled soul;\nThe thoughts of home-of other days,\nIn painful visions roll.", + "orig": "A feeling of deep wretchedness\nComes o’er his troubled soul;\nThe thoughts of home—of other days,\nIn painful visions roll.", "text": "A feeling of deep wretchedness\nComes o'er his troubled soul;\nThe thoughts of home-of other days,\nIn painful visions roll." }, { @@ -1103,7 +1103,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut ", + "orig": "His home—ah! that lov’d name recalls\nAll that was dear to him;\nBut ", "text": "His home-ah! that lov'd name recalls\nAll that was dear to him;\nBut " }, { @@ -1134,7 +1134,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "were scenes he'll know no more-\nHe only ", + "orig": "were scenes he’ll know no more—\nHe only ", "text": "were scenes he'll know no more-\nHe only " }, { @@ -1165,7 +1165,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "they've been.", + "orig": "they’ve been.", "text": "they've been." }, { @@ -1215,7 +1215,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Yes, free to ask of Him, whate'er\nThe fainting heart alone can cheer;\nTo worship at that holy shrine,\nWhere beams thy Spirit, Lord, divine.", + "orig": "Yes, free to ask of Him, whate’er\nThe fainting heart alone can cheer;\nTo worship at that holy shrine,\nWhere beams thy Spirit, Lord, divine.", "text": "Yes, free to ask of Him, whate'er\nThe fainting heart alone can cheer;\nTo worship at that holy shrine,\nWhere beams thy Spirit, Lord, divine." }, { @@ -1227,7 +1227,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And Afric's children they are free,\nTo breathe their vows, their prayers to Thee;\nWith thought of future joy and gain,\nThe slave forgets his grief and pain;", + "orig": "And Afric’s children they are free,\nTo breathe their vows, their prayers to Thee;\nWith thought of future joy and gain,\nThe slave forgets his grief and pain;", "text": "And Afric's children they are free,\nTo breathe their vows, their prayers to Thee;\nWith thought of future joy and gain,\nThe slave forgets his grief and pain;" }, { @@ -1239,7 +1239,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Forgets awhile his slavish fear;\nForgets-that fetters bind him here;\nAnd in that sweet communion rest\nHis hopes, his fears-for he is blest.", + "orig": "Forgets awhile his slavish fear;\nForgets—that fetters bind him here;\nAnd in that sweet communion rest\nHis hopes, his fears—for he is blest.", "text": "Forgets awhile his slavish fear;\nForgets-that fetters bind him here;\nAnd in that sweet communion rest\nHis hopes, his fears-for he is blest." }, { @@ -1268,7 +1268,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that ", + "orig": "Our sires who once in freedom’s cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died—\nOr while the captive is oppressed,\nThink of the wrongs they once redress’d?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive’s woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom’s side,\nNor dare he own a freeman’s pride,\nHis soul is dark, ay dark as night,\nO’er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO’er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne’er be free;\nTo feel that ", "text": "Our sires who once in freedom's cause,\nTheir boasted freedom sought and won,\nFor deeds of glory gained applause,\nWhen patriot feelings led them on.\nAnd can their sons now speak with pride,\nOf rights for which they bled and died-\nOr while the captive is oppressed,\nThink of the wrongs they once redress'd?\nOh, surely they have quite forgot,\nThat bondage once had been their lot;\nThe sweets of freedom now they know,\nThey care not for the captive's woe.\nThe poor wronged slave can bear no part\nIn feelings dearest to his heart;\nHe cannot speak on freedom's side,\nNor dare he own a freeman's pride,\nHis soul is dark, ay dark as night,\nO'er which is shed no gleam of light;\nA cloud of error, doubt and fear,\nO'er him is ever hovering near;\nAnd sad and hard his lot must be,\nTo know that he can ne'er be free;\nTo feel that " }, { @@ -1340,7 +1340,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Farewell!-but thou wilt soon forget\nThe stranger thou hast seen,\nAnd in the gay and busy world,\nForget that I have been.", + "orig": "Farewell!—but thou wilt soon forget\nThe stranger thou hast seen,\nAnd in the gay and busy world,\nForget that I have been.", "text": "Farewell!-but thou wilt soon forget\nThe stranger thou hast seen,\nAnd in the gay and busy world,\nForget that I have been." }, { @@ -1352,7 +1352,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And thought of me will scarce intrude,\nWhen other forms are nigh;\nWho, decked in beauty's bright array,\nShall pass before thine eye.", + "orig": "And thought of me will scarce intrude,\nWhen other forms are nigh;\nWho, decked in beauty’s bright array,\nShall pass before thine eye.", "text": "And thought of me will scarce intrude,\nWhen other forms are nigh;\nWho, decked in beauty's bright array,\nShall pass before thine eye." }, { @@ -1364,7 +1364,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Another's lips will charm thee then,\nAnother's voice will praise;\nThou wilt forget we e'er have met\nIn past and happy days.", + "orig": "Another’s lips will charm thee then,\nAnother’s voice will praise;\nThou wilt forget we e’er have met\nIn past and happy days.", "text": "Another's lips will charm thee then,\nAnother's voice will praise;\nThou wilt forget we e'er have met\nIn past and happy days." }, { @@ -1376,7 +1376,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And thou wilt scarcely deign to think\nOf friendship's early dream,\nOr cast one glance, in after years,\nOn this poor offering.", + "orig": "And thou wilt scarcely deign to think\nOf friendship’s early dream,\nOr cast one glance, in after years,\nOn this poor offering.", "text": "And thou wilt scarcely deign to think\nOf friendship's early dream,\nOr cast one glance, in after years,\nOn this poor offering." }, { @@ -1388,7 +1388,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Farewell-farewell!-'twere better far\nThat we had never met,\nThan meeting one brief moment here,\nTo part-and then forget.", + "orig": "Farewell—farewell!—’twere better far\nThat we had never met,\nThan meeting one brief moment here,\nTo part—and then forget.", "text": "Farewell-farewell!-'twere better far\nThat we had never met,\nThan meeting one brief moment here,\nTo part-and then forget." }, { @@ -1432,7 +1432,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "There lies the sole remaining hope\nOf all my coming years;\nThe treasure of my widow'd heart,\nThe tie that bound me here.", + "orig": "There lies the sole remaining hope\nOf all my coming years;\nThe treasure of my widow’d heart,\nThe tie that bound me here.", "text": "There lies the sole remaining hope\nOf all my coming years;\nThe treasure of my widow'd heart,\nThe tie that bound me here." }, { @@ -1444,7 +1444,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "He was the last-the loveliest,\nAnd can you blame my grief,\nOr chide the falling tears which give\nThis bursting heart relief?", + "orig": "He was the last—the loveliest,\nAnd can you blame my grief,\nOr chide the falling tears which give\nThis bursting heart relief?", "text": "He was the last-the loveliest,\nAnd can you blame my grief,\nOr chide the falling tears which give\nThis bursting heart relief?" }, { @@ -1456,7 +1456,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince ", + "orig": "There’s nothing left for me to love\nThis earth holds nothing dear,\nSince ", "text": "There's nothing left for me to love\nThis earth holds nothing dear,\nSince " }, { @@ -1487,7 +1487,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", my sweet-my gentle one,\nIs now no longer here.", + "orig": ", my sweet—my gentle one,\nIs now no longer here.", "text": ", my sweet-my gentle one,\nIs now no longer here." }, { @@ -1511,7 +1511,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Perchance 'twas wrong to love him thus,\nAnd I have been chastised-\nFor He who gave him to my trust,\nHath called him to the skies.", + "orig": "Perchance ’twas wrong to love him thus,\nAnd I have been chastised—\nFor He who gave him to my trust,\nHath called him to the skies.", "text": "Perchance 'twas wrong to love him thus,\nAnd I have been chastised-\nFor He who gave him to my trust,\nHath called him to the skies." }, { @@ -1523,7 +1523,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "He was too dear-oh! far too dear,\nThe idol of my soul-\nThen blame me not-this burst of grief\nI cannot now control.", + "orig": "He was too dear—oh! far too dear,\nThe idol of my soul—\nThen blame me not—this burst of grief\nI cannot now control.", "text": "He was too dear-oh! far too dear,\nThe idol of my soul-\nThen blame me not-this burst of grief\nI cannot now control." }, { @@ -1564,7 +1564,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "O, speed thee! speed thee! gallant bark,\nAcross the bounding wave;\nThou bearest to old Britain's shores,\nThe Champion of the slave.", + "orig": "O, speed thee! speed thee! gallant bark,\nAcross the bounding wave;\nThou bearest to old Britain’s shores,\nThe Champion of the slave.", "text": "O, speed thee! speed thee! gallant bark,\nAcross the bounding wave;\nThou bearest to old Britain's shores,\nThe Champion of the slave." }, { @@ -1576,7 +1576,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Propitious breezes waft thee on,\nSafe o'er Atlantic's sea;\nFor many a heart with fervor sends\nA benizon to thee.", + "orig": "Propitious breezes waft thee on,\nSafe o’er Atlantic’s sea;\nFor many a heart with fervor sends\nA benizon to thee.", "text": "Propitious breezes waft thee on,\nSafe o'er Atlantic's sea;\nFor many a heart with fervor sends\nA benizon to thee." }, { @@ -1600,7 +1600,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "He goes to raise the standard high,\nAnd freedom's flag unfurl,\nAnd to proclaim the rallying cry\nOf freedom to the world.", + "orig": "He goes to raise the standard high,\nAnd freedom’s flag unfurl,\nAnd to proclaim the rallying cry\nOf freedom to the world.", "text": "He goes to raise the standard high,\nAnd freedom's flag unfurl,\nAnd to proclaim the rallying cry\nOf freedom to the world." }, { @@ -1656,7 +1656,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To see our pathway strewn with flowers,\nWhile 'neath their sunny hue,\nWe fear that many a rankling care\nLies hidden from our view;", + "orig": "To see our pathway strewn with flowers,\nWhile ’neath their sunny hue,\nWe fear that many a rankling care\nLies hidden from our view;", "text": "To see our pathway strewn with flowers,\nWhile 'neath their sunny hue,\nWe fear that many a rankling care\nLies hidden from our view;" }, { @@ -1668,7 +1668,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To cull the flowers, to love their bloom,\nA season to enjoy;\nTo mark the blast that rudely comes\nTheir beauties to destroy:-", + "orig": "To cull the flowers, to love their bloom,\nA season to enjoy;\nTo mark the blast that rudely comes\nTheir beauties to destroy:—", "text": "To cull the flowers, to love their bloom,\nA season to enjoy;\nTo mark the blast that rudely comes\nTheir beauties to destroy:-" }, { @@ -1692,7 +1692,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To see the cherished things of earth,\nOn which we placed the heart,\nFade, one by one, before our eyes,\nAnd silently depart;-", + "orig": "To see the cherished things of earth,\nOn which we placed the heart,\nFade, one by one, before our eyes,\nAnd silently depart;—", "text": "To see the cherished things of earth,\nOn which we placed the heart,\nFade, one by one, before our eyes,\nAnd silently depart;-" }, { @@ -1704,7 +1704,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This is our life-and who can tell\nWhat future hours may bring?\nWhat hopes will cheer the panting heart,\nWhile close to earth we cling?", + "orig": "This is our life—and who can tell\nWhat future hours may bring?\nWhat hopes will cheer the panting heart,\nWhile close to earth we cling?", "text": "This is our life-and who can tell\nWhat future hours may bring?\nWhat hopes will cheer the panting heart,\nWhile close to earth we cling?" }, { @@ -1716,7 +1716,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The morning of our days are bright,\nAnd could the vision last-\nBut 'tis forbid-oh! changeful life,\nHow soon the dream is past!", + "orig": "The morning of our days are bright,\nAnd could the vision last—\nBut ’tis forbid—oh! changeful life,\nHow soon the dream is past!", "text": "The morning of our days are bright,\nAnd could the vision last-\nBut 'tis forbid-oh! changeful life,\nHow soon the dream is past!" }, { @@ -1760,7 +1760,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Friend after friend departs.\"", + "orig": "“Friend after friend departs.”", "text": "\"Friend after friend departs.\"" }, { @@ -1772,7 +1772,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And they are gone-that little band\nOf friends-the firm and true!\nWe feel the void which absence makes,\nWith joy, and sorrow too.", + "orig": "And they are gone—that little band\nOf friends—the firm and true!\nWe feel the void which absence makes,\nWith joy, and sorrow too.", "text": "And they are gone-that little band\nOf friends-the firm and true!\nWe feel the void which absence makes,\nWith joy, and sorrow too." }, { @@ -1796,7 +1796,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We bid God speed their parting steps,\nAnd bless the righteous cause:-\nWhere'er the path of duty points,\nMay duty never pause.", + "orig": "We bid God speed their parting steps,\nAnd bless the righteous cause:—\nWhere’er the path of duty points,\nMay duty never pause.", "text": "We bid God speed their parting steps,\nAnd bless the righteous cause:-\nWhere'er the path of duty points,\nMay duty never pause." }, { @@ -1820,7 +1820,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Their works shall live when other deeds,\nWhich ask a nation's fame,\nHave sank beneath Time's whelming wave,\nUnhonored and unnamed.", + "orig": "Their works shall live when other deeds,\nWhich ask a nation’s fame,\nHave sank beneath Time’s whelming wave,\nUnhonored and unnamed.", "text": "Their works shall live when other deeds,\nWhich ask a nation's fame,\nHave sank beneath Time's whelming wave,\nUnhonored and unnamed." }, { @@ -1849,7 +1849,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh! speak not of heathenish darkness again,\nNor tell me of lands held in error's dread chain!\nWhere-where is the nation so erring as we,\nWho claim the proud name of the \"", + "orig": "Oh! speak not of heathenish darkness again,\nNor tell me of lands held in error’s dread chain!\nWhere—where is the nation so erring as we,\nWho claim the proud name of the “", "text": "Oh! speak not of heathenish darkness again,\nNor tell me of lands held in error's dread chain!\nWhere-where is the nation so erring as we,\nWho claim the proud name of the \"" }, { @@ -1880,7 +1880,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"!\nWhat a throb do the lov'd ties of country awake\nIn the heart of the exile!-for time cannot break\nThe sweet vision of home, and all he loved well,\nWhich has thrown o'er his pathway a magical spell.\nCan the name of \"", + "orig": "”!\nWhat a throb do the lov’d ties of country awake\nIn the heart of the exile!—for time cannot break\nThe sweet vision of home, and all he loved well,\nWhich has thrown o’er his pathway a magical spell.\nCan the name of “", "text": "\"!\nWhat a throb do the lov'd ties of country awake\nIn the heart of the exile!-for time cannot break\nThe sweet vision of home, and all he loved well,\nWhich has thrown o'er his pathway a magical spell.\nCan the name of \"" }, { @@ -1911,7 +1911,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"-the deeds which we sing-\nBe honored-revered-'midst pollution and sin?\nCan the names of our fathers who perished in fight,\nBe hallowed in story, midst slavery's blight?\nWhen America's standard is floating so fair,\nI blush that the impress of falsehood is there;\nThat oppression and mockery dim the high fame,\nThat seeks from all nations a patriot's name.\nSpeak not of \"my country,\" unless she shall be,\nIn truth, the bright home of the \"brave and the free!\"\nTill the dark stain of slavery is washed from her hand,\nA tribute of homage she cannot command.", + "orig": "”—the deeds which we sing—\nBe honored—revered—’midst pollution and sin?\nCan the names of our fathers who perished in fight,\nBe hallowed in story, midst slavery’s blight?\nWhen America’s standard is floating so fair,\nI blush that the impress of falsehood is there;\nThat oppression and mockery dim the high fame,\nThat seeks from all nations a patriot’s name.\nSpeak not of “my country,” unless she shall be,\nIn truth, the bright home of the “brave and the free!”\nTill the dark stain of slavery is washed from her hand,\nA tribute of homage she cannot command.", "text": "\"-the deeds which we sing-\nBe honored-revered-'midst pollution and sin?\nCan the names of our fathers who perished in fight,\nBe hallowed in story, midst slavery's blight?\nWhen America's standard is floating so fair,\nI blush that the impress of falsehood is there;\nThat oppression and mockery dim the high fame,\nThat seeks from all nations a patriot's name.\nSpeak not of \"my country,\" unless she shall be,\nIn truth, the bright home of the \"brave and the free!\"\nTill the dark stain of slavery is washed from her hand,\nA tribute of homage she cannot command." }, { @@ -1949,7 +1949,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Blest hours of childhood! then, and then alone,\nDance we the revels gay round pleasure's throne.\"", + "orig": "“Blest hours of childhood! then, and then alone,\nDance we the revels gay round pleasure’s throne.”", "text": "\"Blest hours of childhood! then, and then alone,\nDance we the revels gay round pleasure's throne.\"" }, { @@ -1961,7 +1961,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dear cherished hours, how much ye tell\nOf all we've known, and loved so well!\nOn memory's page there is a leaf,\nBearing a trace of pleasures brief;\nOf schoolday mirth, of pastime gay,\nWith which we whiled those hours away.", + "orig": "Dear cherished hours, how much ye tell\nOf all we’ve known, and loved so well!\nOn memory’s page there is a leaf,\nBearing a trace of pleasures brief;\nOf schoolday mirth, of pastime gay,\nWith which we whiled those hours away.", "text": "Dear cherished hours, how much ye tell\nOf all we've known, and loved so well!\nOn memory's page there is a leaf,\nBearing a trace of pleasures brief;\nOf schoolday mirth, of pastime gay,\nWith which we whiled those hours away." }, { @@ -1973,7 +1973,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "And those we loved in early youth,\nWith all the fervency of truth-\nThey seem to live, and pass us by,\nWith laughing lip and beaming eye.\nEach favorite spot, each winding stream,\nWhere we have watched the bright sunbeam,\nAppears at memory's magic spell-\nAnd joys, to which we bid farewell.", + "orig": "And those we loved in early youth,\nWith all the fervency of truth—\nThey seem to live, and pass us by,\nWith laughing lip and beaming eye.\nEach favorite spot, each winding stream,\nWhere we have watched the bright sunbeam,\nAppears at memory’s magic spell—\nAnd joys, to which we bid farewell.", "text": "And those we loved in early youth,\nWith all the fervency of truth-\nThey seem to live, and pass us by,\nWith laughing lip and beaming eye.\nEach favorite spot, each winding stream,\nWhere we have watched the bright sunbeam,\nAppears at memory's magic spell-\nAnd joys, to which we bid farewell." }, { @@ -1985,7 +1985,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "When grief and bliss are in the train\nOf hours we ne'er shall live again;\nWhen sorrow clouds our after years,\nAnd fills our cup with bitter tears;\n'Tis then we wait a sigh to ye\nO by-gone days of memory.", + "orig": "When grief and bliss are in the train\nOf hours we ne’er shall live again;\nWhen sorrow clouds our after years,\nAnd fills our cup with bitter tears;\n’Tis then we wait a sigh to ye\nO by-gone days of memory.", "text": "When grief and bliss are in the train\nOf hours we ne'er shall live again;\nWhen sorrow clouds our after years,\nAnd fills our cup with bitter tears;\n'Tis then we wait a sigh to ye\nO by-gone days of memory." }, { @@ -2020,7 +2020,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh, woman, woman, in thy brightest hour\nOf conscious worth, of pride, of conscious power,\nOh, nobly dare to act a Christian's part,\nThat well befits a lovely woman's heart!\nDare to be good, as thou canst dare be great;\nDespise the taunts of envy, scorn and hate;\nOur \"skins may differ,\" but from thee we claim\nA sister's privilege, in a sister's name.", + "orig": "Oh, woman, woman, in thy brightest hour\nOf conscious worth, of pride, of conscious power,\nOh, nobly dare to act a Christian’s part,\nThat well befits a lovely woman’s heart!\nDare to be good, as thou canst dare be great;\nDespise the taunts of envy, scorn and hate;\nOur “skins may differ,” but from thee we claim\nA sister’s privilege, in a sister’s name.", "text": "Oh, woman, woman, in thy brightest hour\nOf conscious worth, of pride, of conscious power,\nOh, nobly dare to act a Christian's part,\nThat well befits a lovely woman's heart!\nDare to be good, as thou canst dare be great;\nDespise the taunts of envy, scorn and hate;\nOur \"skins may differ,\" but from thee we claim\nA sister's privilege, in a sister's name." }, { @@ -2032,7 +2032,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We are thy sisters-God has truly said,\nThat of one blood, the nations he has made.\nOh, Christian woman, in a Christian land,\nCanst thou unblushing read this great command?\nSuffer the wrongs which wring our inmost heart\nTo draw one throb of pity on thy part;\nOur \"skins may differ,\" but from thee we claim\nA sister's privilege, in a sister's name.", + "orig": "We are thy sisters—God has truly said,\nThat of one blood, the nations he has made.\nOh, Christian woman, in a Christian land,\nCanst thou unblushing read this great command?\nSuffer the wrongs which wring our inmost heart\nTo draw one throb of pity on thy part;\nOur “skins may differ,” but from thee we claim\nA sister’s privilege, in a sister’s name.", "text": "We are thy sisters-God has truly said,\nThat of one blood, the nations he has made.\nOh, Christian woman, in a Christian land,\nCanst thou unblushing read this great command?\nSuffer the wrongs which wring our inmost heart\nTo draw one throb of pity on thy part;\nOur \"skins may differ,\" but from thee we claim\nA sister's privilege, in a sister's name." }, { @@ -2044,7 +2044,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Oh, woman!-though upon thy fairer brow\nThe hues of roses and of lilies glow-\nThese soon must wither in their kindred earth,\nFrom whence the fair and dark have equal birth.\nLet a bright halo o'er thy virtues shed\nA lustre, that shall live when thou art dead;\nLet coming ages learn to bless thy name\nUpon the altar of immortal fame.", + "orig": "Oh, woman!—though upon thy fairer brow\nThe hues of roses and of lilies glow—\nThese soon must wither in their kindred earth,\nFrom whence the fair and dark have equal birth.\nLet a bright halo o’er thy virtues shed\nA lustre, that shall live when thou art dead;\nLet coming ages learn to bless thy name\nUpon the altar of immortal fame.", "text": "Oh, woman!-though upon thy fairer brow\nThe hues of roses and of lilies glow-\nThese soon must wither in their kindred earth,\nFrom whence the fair and dark have equal birth.\nLet a bright halo o'er thy virtues shed\nA lustre, that shall live when thou art dead;\nLet coming ages learn to bless thy name\nUpon the altar of immortal fame." }, { @@ -2097,7 +2097,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The incident which suggested the following lines is this:-A young girl was living with her mother in one of the West Indian Islands, quite unconscious of her being a slave. Her master, on leaving the Island for a permanent residence in Louisiana, cruelly separated the girl from her parent forever.", + "orig": "The incident which suggested the following lines is this:—A young girl was living with her mother in one of the West Indian Islands, quite unconscious of her being a slave. Her master, on leaving the Island for a permanent residence in Louisiana, cruelly separated the girl from her parent forever.", "text": "The incident which suggested the following lines is this:-A young girl was living with her mother in one of the West Indian Islands, quite unconscious of her being a slave. Her master, on leaving the Island for a permanent residence in Louisiana, cruelly separated the girl from her parent forever." }, { @@ -2109,7 +2109,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Mother, I leave thee-thou hast been,\nThrough long, long years of pain,\nThe only hope my fond heart knew;\nOr e'er shall know again.", + "orig": "Mother, I leave thee—thou hast been,\nThrough long, long years of pain,\nThe only hope my fond heart knew;\nOr e’er shall know again.", "text": "Mother, I leave thee-thou hast been,\nThrough long, long years of pain,\nThe only hope my fond heart knew;\nOr e'er shall know again." }, { @@ -2121,7 +2121,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The sails are set-my master waits\nTo bear me far from thee;\nI linger-can I give thee up,\nAnd cross the fearful sea?", + "orig": "The sails are set—my master waits\nTo bear me far from thee;\nI linger—can I give thee up,\nAnd cross the fearful sea?", "text": "The sails are set-my master waits\nTo bear me far from thee;\nI linger-can I give thee up,\nAnd cross the fearful sea?" }, { @@ -2145,7 +2145,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The little hut where I have played\nIn childhood's fearless hours-\nThe murmuring stream-the mossy bank,\nWhere I have gathered flowers.", + "orig": "The little hut where I have played\nIn childhood’s fearless hours—\nThe murmuring stream—the mossy bank,\nWhere I have gathered flowers.", "text": "The little hut where I have played\nIn childhood's fearless hours-\nThe murmuring stream-the mossy bank,\nWhere I have gathered flowers." }, { @@ -2188,7 +2188,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "I was a slave,\nOr that another's will,\nSave thine, could bend my spirit's pride;\nOr bid my lips be still.", + "orig": "I was a slave,\nOr that another’s will,\nSave thine, could bend my spirit’s pride;\nOr bid my lips be still.", "text": "I was a slave,\nOr that another's will,\nSave thine, could bend my spirit's pride;\nOr bid my lips be still." }, { @@ -2212,7 +2212,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Thy fond arms press me-and I feel\nThy tears upon my cheek;\nTears are the only language now,\nA mother's love can speak.", + "orig": "Thy fond arms press me—and I feel\nThy tears upon my cheek;\nTears are the only language now,\nA mother’s love can speak.", "text": "Thy fond arms press me-and I feel\nThy tears upon my cheek;\nTears are the only language now,\nA mother's love can speak." }, { @@ -2265,7 +2265,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Father, we lift the suppliant eye,\nTo where thou reigns't above;\nWe feel that thou canst not deny\nThe children of thy love.", + "orig": "Father, we lift the suppliant eye,\nTo where thou reigns’t above;\nWe feel that thou canst not deny\nThe children of thy love.", "text": "Father, we lift the suppliant eye,\nTo where thou reigns't above;\nWe feel that thou canst not deny\nThe children of thy love." }, { @@ -2301,7 +2301,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We feel the chains that bind us all,\nAnd bend us to man's will;\nBut can they hold our souls enthrall'd,\nOr bid our voice be still?", + "orig": "We feel the chains that bind us all,\nAnd bend us to man’s will;\nBut can they hold our souls enthrall’d,\nOr bid our voice be still?", "text": "We feel the chains that bind us all,\nAnd bend us to man's will;\nBut can they hold our souls enthrall'd,\nOr bid our voice be still?" }, { @@ -2313,7 +2313,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "No:-for thy power is all supreme,\nThy word shall yet stand firm;\nAnd master and the slave shall e'en\nTo thee for mercy turn.", + "orig": "No:—for thy power is all supreme,\nThy word shall yet stand firm;\nAnd master and the slave shall e’en\nTo thee for mercy turn.", "text": "No:-for thy power is all supreme,\nThy word shall yet stand firm;\nAnd master and the slave shall e'en\nTo thee for mercy turn." }, { @@ -2853,7 +2853,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "can't ", + "orig": "can’t ", "text": "can't ", "formatting": { "bold": false, @@ -2884,7 +2884,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Copyright laws are different all over the world, and the source text or artwork in this ebook may still be copyrighted in other countries. If you're not located in the United States, you must check your local laws before using this ebook. Standard Ebooks makes no representations regarding the copyright status of the source text or artwork in this ebook in any country other than the United States.", + "orig": "Copyright laws are different all over the world, and the source text or artwork in this ebook may still be copyrighted in other countries. If you’re not located in the United States, you must check your local laws before using this ebook. Standard Ebooks makes no representations regarding the copyright status of the source text or artwork in this ebook in any country other than the United States.", "text": "Copyright laws are different all over the world, and the source text or artwork in this ebook may still be copyrighted in other countries. If you're not located in the United States, you must check your local laws before using this ebook. Standard Ebooks makes no representations regarding the copyright status of the source text or artwork in this ebook in any country other than the United States." }, { @@ -2896,7 +2896,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the ", + "orig": "Non-authorship activities performed on items that are in the public domain—so-called “sweat of the brow” work—don’t create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the ", "text": "Non-authorship activities performed on items that are in the public domain-so-called \"sweat of the brow\" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the " }, { @@ -2921,7 +2921,7 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much.", + "orig": ", thus dedicating to the worldwide public domain all of the work they’ve done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn’t change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much.", "text": ", thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much." } ], diff --git a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md index 103bb53cc5..0c80065d83 100644 --- a/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md +++ b/tests/data/epub/groundtruth/epub_purvis_poetry.epub.md @@ -1,6 +1,6 @@ # Poetry -By **Sarah Louisa Forten Purvis** . +By **Sarah Louisa Forten Purvis**. @@ -10,13 +10,13 @@ The Standard Ebooks logo. -This ebook is the product of many hours of hard work by volunteers for [Standard Ebooks](https://standardebooks.org/) , and builds on the hard work of other literature lovers made possible by the public domain. +This ebook is the product of many hours of hard work by volunteers for [Standard Ebooks](https://standardebooks.org/), and builds on the hard work of other literature lovers made possible by the public domain. -This particular ebook is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans) . +This particular ebook is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans). -The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/) . For full license information, see the [Uncopyright](uncopyright.xhtml) at the end of this ebook. +The source text and artwork in this ebook are believed to be in the United States public domain; that is, they are believed to be free of copyright restrictions in the United States. They may still be copyrighted in other countries, so users located outside of the United States must check their local laws before using this ebook. The creators of, and contributors to, this ebook dedicate their contributions to the worldwide public domain via the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/). For full license information, see the [Uncopyright](uncopyright.xhtml) at the end of this ebook. -Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at [standardebooks.org](https://standardebooks.org/) . +Standard Ebooks is a volunteer-driven project that produces ebook editions of public domain literature using modern typography, technology, and editorial standards, and distributes them free of cost. You can download this and other ebooks carefully produced for true book lovers at [standardebooks.org](https://standardebooks.org/). ## The Grave of the Slave @@ -60,7 +60,7 @@ No arm is stretched to rescue, and to save. Oh! ye who boast of Freedom's sacred claims, Do ye not blush to see our galling chains; To hear that sounding word-"that all are free"- -When thousands groan in hopeless *slavery* ? +When thousands groan in hopeless *slavery*? Upon your land it is a cruel stain- Freedom, what art thou?-nothing but a name. @@ -200,7 +200,7 @@ This bursting heart relief? There's nothing left for me to love This earth holds nothing dear, -Since *he* , my sweet-my gentle one, +Since *he*, my sweet-my gentle one, Is now no longer here. My poor fond heart had counted on @@ -311,12 +311,12 @@ Unhonored and unnamed. Oh! speak not of heathenish darkness again, Nor tell me of lands held in error's dread chain! Where-where is the nation so erring as we, -Who claim the proud name of the " **home of the free** "! +Who claim the proud name of the "**home of the free**"! What a throb do the lov'd ties of country awake In the heart of the exile!-for time cannot break The sweet vision of home, and all he loved well, Which has thrown o'er his pathway a magical spell. -Can the name of " **my country** "-the deeds which we sing- +Can the name of "**my country**"-the deeds which we sing- Be honored-revered-'midst pollution and sin? Can the names of our fathers who perished in fight, Be hallowed in story, midst slavery's blight? @@ -463,21 +463,21 @@ The Standard Ebooks logo. -*Poetry* was compiled from poems published between 1831 and 1836 by [Sarah Louisa Forten Purvis](https://en.wikipedia.org/wiki/Sarah_Louisa_Forten_Purvis) . +*Poetry* was compiled from poems published between 1831 and 1836 by [Sarah Louisa Forten Purvis](https://en.wikipedia.org/wiki/Sarah_Louisa_Forten_Purvis). -This ebook was transcribed and produced for [Standard Ebooks](https://standardebooks.org/) by [Weijia Cheng](https://weijiarhymeswith.asia/) , -and is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans) . +This ebook was transcribed and produced for [Standard Ebooks](https://standardebooks.org/) by [Weijia Cheng](https://weijiarhymeswith.asia/), +and is based on digital scans from the [Internet Archive](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry#page-scans). -The cover page is adapted from *Sunday Morning* , -a painting completed in 1877 by [Thomas Waterman Wood](https://en.wikipedia.org/wiki/Thomas_Waterman_Wood) . -The cover and title pages feature the **League Spartan** and **Sorts Mill Goudy** typefaces created in 2014 and 2009 by [The League of Moveable Type](https://www.theleagueofmoveabletype.com/) . +The cover page is adapted from *Sunday Morning*, +a painting completed in 1877 by [Thomas Waterman Wood](https://en.wikipedia.org/wiki/Thomas_Waterman_Wood). +The cover and title pages feature the **League Spartan** and **Sorts Mill Goudy** typefaces created in 2014 and 2009 by [The League of Moveable Type](https://www.theleagueofmoveabletype.com/). -This edition was released on **May 21, 2026, 6:29 p.m.** and is based on **revision 936122b** . +This edition was released on **May 21, 2026, 6:29 p.m.** and is based on **revision 936122b**. The first edition of this ebook was released on December 6, 2023, 8:52 p.m. -You can check for updates to this ebook, view its revision history, or download it for different ereading systems at [standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry) . +You can check for updates to this ebook, view its revision history, or download it for different ereading systems at [standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry](https://standardebooks.org/ebooks/sarah-louisa-forten-purvis/poetry). -The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at [standardebooks.org](https://standardebooks.org/) . +The volunteer-driven Standard Ebooks project relies on readers like you to submit typos, corrections, and other improvements. Anyone can contribute at [standardebooks.org](https://standardebooks.org/). ## Uncopyright @@ -489,4 +489,4 @@ Copyright pages exist to tell you that you *can't* do something. Unlike them, th Copyright laws are different all over the world, and the source text or artwork in this ebook may still be copyrighted in other countries. If you're not located in the United States, you must check your local laws before using this ebook. Standard Ebooks makes no representations regarding the copyright status of the source text or artwork in this ebook in any country other than the United States. -Non-authorship activities performed on items that are in the public domain-so-called "sweat of the brow" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/) , thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much. \ No newline at end of file +Non-authorship activities performed on items that are in the public domain-so-called "sweat of the brow" work-don't create a new copyright. That means that nobody can claim a new copyright on an item that is in the public domain for, among other things, work like digitization, markup, or typography. Regardless, the contributors to this ebook release their contributions under the terms in the [CC0 1.0 Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/), thus dedicating to the worldwide public domain all of the work they've done on this ebook, including but not limited to metadata, the titlepage, imprint, colophon, this Uncopyright, and any changes or enhancements to, or markup on, the original text and artwork. This dedication doesn't change the copyright status of the source text or artwork. We make this dedication in the interest of enriching our global cultural heritage, to promote free and libre culture around the world, and to give back to the unrestricted culture that has given all of us so much. \ No newline at end of file diff --git a/tests/data/html/groundtruth/html_rich_table_cells.html.itxt b/tests/data/html/groundtruth/html_rich_table_cells.html.itxt index 362806f22b..18ff5420df 100644 --- a/tests/data/html/groundtruth/html_rich_table_cells.html.itxt +++ b/tests/data/html/groundtruth/html_rich_table_cells.html.itxt @@ -6,11 +6,11 @@ item-0 at level 0: unspecified: group _root_ item-4 at level 3: unspecified: group rich_cell_group_1_1_3 item-5 at level 4: inline: group group item-6 at level 5: text: Large - item-7 at level 5: text: , + item-7 at level 5: text: , item-8 at level 5: text: loud - item-9 at level 5: text: , + item-9 at level 5: text: , item-10 at level 5: text: noisy - item-11 at level 5: text: , + item-11 at level 5: text: , item-12 at level 5: text: small item-13 at level 3: unspecified: group rich_cell_group_1_0_4 item-14 at level 4: list: group list diff --git a/tests/data/html/groundtruth/wiki_duck.html.itxt b/tests/data/html/groundtruth/wiki_duck.html.itxt index 0a1d83d638..4b2396273a 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.itxt +++ b/tests/data/html/groundtruth/wiki_duck.html.itxt @@ -15,7 +15,7 @@ item-0 at level 0: unspecified: group _root_ item-14 at level 5: list: group list item-15 at level 4: list_item: item-16 at level 5: inline: group group - item-17 at level 6: text: 5 Behaviour + item-17 at level 6: text: 5 Behaviour item-18 at level 6: text: Toggle Behaviour subsection item-19 at level 5: list: group list item-20 at level 6: list_item: 5.1 Feeding @@ -28,7 +28,7 @@ item-0 at level 0: unspecified: group _root_ item-27 at level 7: list: group list item-28 at level 4: list_item: item-29 at level 5: inline: group group - item-30 at level 6: text: 6 Relationship with humans + item-30 at level 6: text: 6 Relationship with humans item-31 at level 6: text: Toggle Relationship with humans subsection item-32 at level 5: list: group list item-33 at level 6: list_item: 6.1 Hunting @@ -43,7 +43,7 @@ item-0 at level 0: unspecified: group _root_ item-42 at level 5: list: group list item-43 at level 4: list_item: item-44 at level 5: inline: group group - item-45 at level 6: text: 8 Notes + item-45 at level 6: text: 8 Notes item-46 at level 6: text: Toggle Notes subsection item-47 at level 5: list: group list item-48 at level 6: list_item: 8.1 Citations @@ -238,17 +238,17 @@ item-0 at level 0: unspecified: group _root_ item-236 at level 3: caption: Page semi-protected item-237 at level 2: text: From Wikipedia, the free encyclopedia item-238 at level 2: inline: group group - item-239 at level 3: text: (Redirected from + item-239 at level 3: text: (Redirected from item-240 at level 3: text: Duckling item-241 at level 3: text: ) item-242 at level 2: inline: group group - item-243 at level 3: text: This article is about the bird. For duck as a food, see + item-243 at level 3: text: This article is about the bird. For duck as a food, see item-244 at level 3: text: Duck as food - item-245 at level 3: text: . For other uses, see + item-245 at level 3: text: . For other uses, see item-246 at level 3: text: Duck (disambiguation) item-247 at level 3: text: . item-248 at level 2: inline: group group - item-249 at level 3: text: "Duckling" redirects here. For other uses, see + item-249 at level 3: text: "Duckling" redirects here. For other uses, see item-250 at level 3: text: Duckling (disambiguation) item-251 at level 3: text: . item-252 at level 2: table with [13x2] @@ -256,7 +256,7 @@ item-0 at level 0: unspecified: group _root_ item-254 at level 4: picture item-255 at level 3: unspecified: group rich_cell_group_1_0_2 item-256 at level 4: inline: group group - item-257 at level 5: text: Bufflehead + item-257 at level 5: text: Bufflehead item-258 at level 5: text: ( item-259 at level 5: text: Bucephala albeola item-260 at level 5: text: ) @@ -279,547 +279,547 @@ item-0 at level 0: unspecified: group _root_ item-276 at level 3: unspecified: group rich_cell_group_1_0_10 item-277 at level 4: text: Anatidae item-278 at level 2: inline: group group - item-279 at level 3: text: Duck - item-280 at level 3: text: is the common name for numerous species of - item-281 at level 3: text: waterfowl - item-282 at level 3: text: in the - item-283 at level 3: text: family + item-279 at level 3: text: Duck + item-280 at level 3: text: is the common name for numerous species of + item-281 at level 3: text: waterfowl + item-282 at level 3: text: in the + item-283 at level 3: text: family item-284 at level 3: text: Anatidae - item-285 at level 3: text: . Ducks are generally smaller and shorter-necked than - item-286 at level 3: text: swans - item-287 at level 3: text: and + item-285 at level 3: text: . Ducks are generally smaller and shorter-necked than + item-286 at level 3: text: swans + item-287 at level 3: text: and item-288 at level 3: text: geese - item-289 at level 3: text: , which are members of the same ... among several subfamilies, they are a + item-289 at level 3: text: , which are members of the same ... among several subfamilies, they are a item-290 at level 3: text: form taxon - item-291 at level 3: text: ; they do not represent a - item-292 at level 3: text: monophyletic group - item-293 at level 3: text: (the group of all descendants of ... not considered ducks. Ducks are mostly + item-291 at level 3: text: ; they do not represent a + item-292 at level 3: text: monophyletic group + item-293 at level 3: text: (the group of all descendants of ... ot considered ducks. Ducks are mostly item-294 at level 3: text: aquatic birds item-295 at level 3: text: , and may be found in both fresh water and sea water. item-296 at level 2: inline: group group - item-297 at level 3: text: Ducks are sometimes confused wit ... ater birds with similar forms, such as - item-298 at level 3: text: loons - item-299 at level 3: text: or divers, + item-297 at level 3: text: Ducks are sometimes confused wit ... ter birds with similar forms, such as + item-298 at level 3: text: loons + item-299 at level 3: text: or divers, item-300 at level 3: text: grebes - item-301 at level 3: text: , - item-302 at level 3: text: gallinules - item-303 at level 3: text: and + item-301 at level 3: text: , + item-302 at level 3: text: gallinules + item-303 at level 3: text: and item-304 at level 3: text: coots item-305 at level 3: text: . item-306 at level 2: section_header: Etymology item-307 at level 3: inline: group group - item-308 at level 4: text: The word - item-309 at level 4: text: duck - item-310 at level 4: text: comes from - item-311 at level 4: text: Old English - item-312 at level 4: text: dūce + item-308 at level 4: text: The word + item-309 at level 4: text: duck + item-310 at level 4: text: comes from + item-311 at level 4: text: Old English + item-312 at level 4: text: dūce item-313 at level 4: text: 'diver', a derivative of the verb * - item-314 at level 4: text: dūcan - item-315 at level 4: text: 'to duck, bend down low as if to ... because of the way many species in the - item-316 at level 4: text: dabbling duck - item-317 at level 4: text: group feed by upending; compare with - item-318 at level 4: text: Dutch - item-319 at level 4: text: duiken - item-320 at level 4: text: and - item-321 at level 4: text: German - item-322 at level 4: text: tauchen + item-314 at level 4: text: dūcan + item-315 at level 4: text: 'to duck, bend down low as if to ... ecause of the way many species in the + item-316 at level 4: text: dabbling duck + item-317 at level 4: text: group feed by upending; compare with + item-318 at level 4: text: Dutch + item-319 at level 4: text: duiken + item-320 at level 4: text: and + item-321 at level 4: text: German + item-322 at level 4: text: tauchen item-323 at level 4: text: 'to dive'. item-324 at level 3: picture item-324 at level 4: caption: Pacific black duck displaying the characteristic upending "duck" item-325 at level 3: inline: group group - item-326 at level 4: text: This word replaced Old English - item-327 at level 4: text: ened + item-326 at level 4: text: This word replaced Old English + item-327 at level 4: text: ened item-328 at level 4: text: / - item-329 at level 4: text: ænid - item-330 at level 4: text: 'duck', possibly to avoid confusion with other words, such as - item-331 at level 4: text: ende - item-332 at level 4: text: 'end' with similar forms. Other ... languages still have similar words for + item-329 at level 4: text: ænid + item-330 at level 4: text: 'duck', possibly to avoid confusion with other words, such as + item-331 at level 4: text: ende + item-332 at level 4: text: 'end' with similar forms. Other ... anguages still have similar words for item-333 at level 4: text: duck - item-334 at level 4: text: , for example, Dutch + item-334 at level 4: text: , for example, Dutch item-335 at level 4: text: eend - item-336 at level 4: text: , German - item-337 at level 4: text: Ente - item-338 at level 4: text: and - item-339 at level 4: text: Norwegian + item-336 at level 4: text: , German + item-337 at level 4: text: Ente + item-338 at level 4: text: and + item-339 at level 4: text: Norwegian item-340 at level 4: text: and - item-341 at level 4: text: . The word - item-342 at level 4: text: ened + item-341 at level 4: text: . The word + item-342 at level 4: text: ened item-343 at level 4: text: / - item-344 at level 4: text: ænid - item-345 at level 4: text: was inherited from + item-344 at level 4: text: ænid + item-345 at level 4: text: was inherited from item-346 at level 4: text: Proto-Indo-European - item-347 at level 4: text: ; - item-348 at level 4: text: cf. - item-349 at level 4: text: Latin - item-350 at level 4: text: anas - item-351 at level 4: text: "duck", - item-352 at level 4: text: Lithuanian - item-353 at level 4: text: ántis - item-354 at level 4: text: 'duck', - item-355 at level 4: text: Ancient Greek - item-356 at level 4: text: νῆσσα / νῆττα ( - item-357 at level 4: text: nēssa + item-347 at level 4: text: ; + item-348 at level 4: text: cf. + item-349 at level 4: text: Latin + item-350 at level 4: text: anas + item-351 at level 4: text: "duck", + item-352 at level 4: text: Lithuanian + item-353 at level 4: text: ántis + item-354 at level 4: text: 'duck', + item-355 at level 4: text: Ancient Greek + item-356 at level 4: text: νῆσσα /νῆττα ( + item-357 at level 4: text: nēssa item-358 at level 4: text: / item-359 at level 4: text: nētta - item-360 at level 4: text: ) 'duck', and - item-361 at level 4: text: Sanskrit - item-362 at level 4: text: ātí + item-360 at level 4: text: ) 'duck', and + item-361 at level 4: text: Sanskrit + item-362 at level 4: text: ātí item-363 at level 4: text: 'water bird', among others. item-364 at level 3: inline: group group item-365 at level 4: text: A duckling is a young duck in downy plumage - item-366 at level 4: text: [ 1 ] + item-366 at level 4: text: [1] item-367 at level 4: text: or baby duck, - item-368 at level 4: text: [ 2 ] + item-368 at level 4: text: [2] item-369 at level 4: text: but in the food trade a young do ... , is sometimes labelled as a duckling. item-370 at level 3: inline: group group - item-371 at level 4: text: A male is called a - item-372 at level 4: text: drake - item-373 at level 4: text: and the female is called a duck, or in - item-374 at level 4: text: ornithology + item-371 at level 4: text: A male is called a + item-372 at level 4: text: drake + item-373 at level 4: text: and the female is called a duck, or in + item-374 at level 4: text: ornithology item-375 at level 4: text: a hen. - item-376 at level 4: text: [ 3 ] - item-377 at level 4: text: [ 4 ] + item-376 at level 4: text: [3] + item-377 at level 4: text: [4] item-378 at level 3: picture - item-378 at level 4: caption: Male mallard . + item-378 at level 4: caption: Male mallard. item-379 at level 3: picture - item-379 at level 4: caption: Wood ducks . + item-379 at level 4: caption: Wood ducks. item-380 at level 2: section_header: Taxonomy item-381 at level 3: inline: group group - item-382 at level 4: text: All ducks belong to the - item-383 at level 4: text: biological order + item-382 at level 4: text: All ducks belong to the + item-383 at level 4: text: biological order item-384 at level 4: text: Anseriformes - item-385 at level 4: text: , a group that contains the ducks, geese and swans, as well as the + item-385 at level 4: text: , a group that contains the ducks, geese and swans, as well as the item-386 at level 4: text: screamers - item-387 at level 4: text: , and the + item-387 at level 4: text: , and the item-388 at level 4: text: magpie goose item-389 at level 4: text: . - item-390 at level 4: text: [ 5 ] - item-391 at level 4: text: All except the screamers belong to the - item-392 at level 4: text: biological family + item-390 at level 4: text: [5] + item-391 at level 4: text: All except the screamers belong to the + item-392 at level 4: text: biological family item-393 at level 4: text: Anatidae item-394 at level 4: text: . - item-395 at level 4: text: [ 5 ] + item-395 at level 4: text: [5] item-396 at level 4: text: Within the family, ducks are spl ... erable disagreement among taxonomists. - item-397 at level 4: text: [ 5 ] - item-398 at level 4: text: Some base their decisions on + item-397 at level 4: text: [5] + item-398 at level 4: text: Some base their decisions on item-399 at level 4: text: morphological characteristics item-400 at level 4: text: , others on shared behaviours or genetic studies. - item-401 at level 4: text: [ 6 ] - item-402 at level 4: text: [ 7 ] + item-401 at level 4: text: [6] + item-402 at level 4: text: [7] item-403 at level 4: text: The number of suggested subfamil ... taining ducks ranges from two to five. - item-404 at level 4: text: [ 8 ] - item-405 at level 4: text: [ 9 ] - item-406 at level 4: text: The significant level of - item-407 at level 4: text: hybridisation + item-404 at level 4: text: [8] + item-405 at level 4: text: [9] + item-406 at level 4: text: The significant level of + item-407 at level 4: text: hybridisation item-408 at level 4: text: that occurs among wild ducks com ... relationships between various species. - item-409 at level 4: text: [ 9 ] + item-409 at level 4: text: [9] item-410 at level 3: picture item-410 at level 4: caption: Mallard landing in approach item-411 at level 3: inline: group group item-412 at level 4: text: In most modern classifications, ... split into a varying number of tribes. - item-413 at level 4: text: [ 10 ] + item-413 at level 4: text: [10] item-414 at level 4: text: The largest of these, the Anatin ... imarily at the surface of fresh water. - item-415 at level 4: text: [ 11 ] + item-415 at level 4: text: [11] item-416 at level 4: text: The 'diving ducks', also named f ... ng method, make up the tribe Aythyini. - item-417 at level 4: text: [ 12 ] + item-417 at level 4: text: [12] item-418 at level 4: text: The 'sea ducks' of the tribe Mer ... majority of their lives in saltwater. - item-419 at level 4: text: [ 13 ] + item-419 at level 4: text: [13] item-420 at level 4: text: The tribe Oxyurini contains the ... r small size and stiff, upright tails. - item-421 at level 4: text: [ 14 ] + item-421 at level 4: text: [14] item-422 at level 3: inline: group group - item-423 at level 4: text: A number of other species called ... ed in other subfamilies or tribes. The - item-424 at level 4: text: whistling ducks + item-423 at level 4: text: A number of other species called ... d in other subfamilies or tribes. The + item-424 at level 4: text: whistling ducks item-425 at level 4: text: are assigned either to a tribe ( ... y Anatinae or the subfamily Anserinae, - item-426 at level 4: text: [ 15 ] + item-426 at level 4: text: [15] item-427 at level 4: text: or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae). - item-428 at level 4: text: [ 9 ] - item-429 at level 4: text: [ 16 ] - item-430 at level 4: text: The - item-431 at level 4: text: freckled duck + item-428 at level 4: text: [9] + item-429 at level 4: text: [16] + item-430 at level 4: text: The + item-431 at level 4: text: freckled duck item-432 at level 4: text: of Australia is either the sole ... ctonettini in the subfamily Anserinae, - item-433 at level 4: text: [ 15 ] + item-433 at level 4: text: [15] item-434 at level 4: text: or in its own family, the Stictonettinae. - item-435 at level 4: text: [ 9 ] - item-436 at level 4: text: The - item-437 at level 4: text: shelducks + item-435 at level 4: text: [9] + item-436 at level 4: text: The + item-437 at level 4: text: shelducks item-438 at level 4: text: make up the tribe Tadornini in t ... ily Anserinae in some classifications, - item-439 at level 4: text: [ 15 ] + item-439 at level 4: text: [15] item-440 at level 4: text: and their own subfamily, Tadorninae, in others, - item-441 at level 4: text: [ 17 ] - item-442 at level 4: text: while the - item-443 at level 4: text: steamer ducks + item-441 at level 4: text: [17] + item-442 at level 4: text: while the + item-443 at level 4: text: steamer ducks item-444 at level 4: text: are either placed in the family Anserinae in the tribe Tachyerini - item-445 at level 4: text: [ 15 ] + item-445 at level 4: text: [15] item-446 at level 4: text: or lumped with the shelducks in the tribe Tadorini. - item-447 at level 4: text: [ 9 ] - item-448 at level 4: text: The - item-449 at level 4: text: perching ducks + item-447 at level 4: text: [9] + item-448 at level 4: text: The + item-449 at level 4: text: perching ducks item-450 at level 4: text: make up in the tribe Cairinini i ... members assigned to the tribe Anatini. - item-451 at level 4: text: [ 9 ] - item-452 at level 4: text: The - item-453 at level 4: text: torrent duck + item-451 at level 4: text: [9] + item-452 at level 4: text: The + item-453 at level 4: text: torrent duck item-454 at level 4: text: is generally included in the sub ... e in the monotypic tribe Merganettini, - item-455 at level 4: text: [ 15 ] + item-455 at level 4: text: [15] item-456 at level 4: text: but is sometimes included in the tribe Tadornini. - item-457 at level 4: text: [ 18 ] - item-458 at level 4: text: The - item-459 at level 4: text: pink-eared duck + item-457 at level 4: text: [18] + item-458 at level 4: text: The + item-459 at level 4: text: pink-eared duck item-460 at level 4: text: is sometimes included as a true duck either in the tribe Anatini - item-461 at level 4: text: [ 15 ] + item-461 at level 4: text: [15] item-462 at level 4: text: or the tribe Malacorhynchini, - item-463 at level 4: text: [ 19 ] + item-463 at level 4: text: [19] item-464 at level 4: text: and other times is included with the shelducks in the tribe Tadornini. - item-465 at level 4: text: [ 15 ] + item-465 at level 4: text: [15] item-466 at level 2: section_header: Morphology item-467 at level 3: picture item-467 at level 4: caption: Male Mandarin duck item-468 at level 3: inline: group group - item-469 at level 4: text: The overall - item-470 at level 4: text: body plan - item-471 at level 4: text: of ducks is elongated and broad, ... t from this in being more rounded. The - item-472 at level 4: text: bill - item-473 at level 4: text: is usually broad and contains serrated + item-469 at level 4: text: The overall + item-470 at level 4: text: body plan + item-471 at level 4: text: of ducks is elongated and broad, ... from this in being more rounded. The + item-472 at level 4: text: bill + item-473 at level 4: text: is usually broad and contains serrated item-474 at level 4: text: pectens - item-475 at level 4: text: , which are particularly well de ... e generally short and pointed, and the - item-476 at level 4: text: flight - item-477 at level 4: text: of ducks requires fast continuou ... strong wing muscles. Three species of - item-478 at level 4: text: steamer duck - item-479 at level 4: text: are almost flightless, however. ... duck are temporarily flightless while + item-475 at level 4: text: , which are particularly well de ... generally short and pointed, and the + item-476 at level 4: text: flight + item-477 at level 4: text: of ducks requires fast continuou ... strong wing muscles. Three species of + item-478 at level 4: text: steamer duck + item-479 at level 4: text: are almost flightless, however. ... duck are temporarily flightless while item-480 at level 4: text: moulting - item-481 at level 4: text: ; they seek out protected habita ... period. This moult typically precedes + item-481 at level 4: text: ; they seek out protected habita ... period. This moult typically precedes item-482 at level 4: text: migration item-483 at level 4: text: . item-484 at level 3: inline: group group - item-485 at level 4: text: The drakes of northern species often have extravagant + item-485 at level 4: text: The drakes of northern species often have extravagant item-486 at level 4: text: plumage - item-487 at level 4: text: , but that is - item-488 at level 4: text: moulted - item-489 at level 4: text: in summer to give a more female- ... n resident species typically show less + item-487 at level 4: text: , but that is + item-488 at level 4: text: moulted + item-489 at level 4: text: in summer to give a more female- ... resident species typically show less item-490 at level 4: text: sexual dimorphism - item-491 at level 4: text: , although there are exceptions such as the - item-492 at level 4: text: paradise shelduck - item-493 at level 4: text: of + item-491 at level 4: text: , although there are exceptions such as the + item-492 at level 4: text: paradise shelduck + item-493 at level 4: text: of item-494 at level 4: text: New Zealand item-495 at level 4: text: , which is both strikingly sexua ... rkscrew shaped vagina to prevent rape. item-496 at level 2: section_header: Distribution and habitat item-497 at level 3: inline: group group - item-498 at level 4: text: See also: + item-498 at level 4: text: See also: item-499 at level 4: text: List of Anseriformes by population item-500 at level 3: picture - item-500 at level 4: caption: Flying steamer ducks in Ushuaia , Argentina + item-500 at level 4: caption: Flying steamer ducks in Ushuaia, Argentina item-501 at level 3: inline: group group - item-502 at level 4: text: Ducks have a + item-502 at level 4: text: Ducks have a item-503 at level 4: text: cosmopolitan distribution item-504 at level 4: text: , and are found on every continent except Antarctica. - item-505 at level 4: text: [ 5 ] - item-506 at level 4: text: Several species manage to live on subantarctic islands, including - item-507 at level 4: text: South Georgia - item-508 at level 4: text: and the + item-505 at level 4: text: [5] + item-506 at level 4: text: Several species manage to live on subantarctic islands, including + item-507 at level 4: text: South Georgia + item-508 at level 4: text: and the item-509 at level 4: text: Auckland Islands item-510 at level 4: text: . - item-511 at level 4: text: [ 20 ] - item-512 at level 4: text: Ducks have reached a number of isolated oceanic islands, including the + item-511 at level 4: text: [20] + item-512 at level 4: text: Ducks have reached a number of isolated oceanic islands, including the item-513 at level 4: text: Hawaiian Islands - item-514 at level 4: text: , - item-515 at level 4: text: Micronesia - item-516 at level 4: text: and the + item-514 at level 4: text: , + item-515 at level 4: text: Micronesia + item-516 at level 4: text: and the item-517 at level 4: text: Galápagos Islands - item-518 at level 4: text: , where they are often - item-519 at level 4: text: vagrants - item-520 at level 4: text: and less often + item-518 at level 4: text: , where they are often + item-519 at level 4: text: vagrants + item-520 at level 4: text: and less often item-521 at level 4: text: residents item-522 at level 4: text: . - item-523 at level 4: text: [ 21 ] - item-524 at level 4: text: [ 22 ] - item-525 at level 4: text: A handful are - item-526 at level 4: text: endemic + item-523 at level 4: text: [21] + item-524 at level 4: text: [22] + item-525 at level 4: text: A handful are + item-526 at level 4: text: endemic item-527 at level 4: text: to such far-flung islands. - item-528 at level 4: text: [ 21 ] + item-528 at level 4: text: [21] item-529 at level 3: picture - item-529 at level 4: caption: Female mallard in Cornwall , England + item-529 at level 4: caption: Female mallard in Cornwall, England item-530 at level 3: inline: group group item-531 at level 4: text: Some duck species, mainly those ... that form after localised heavy rain. - item-532 at level 4: text: [ 23 ] + item-532 at level 4: text: [23] item-533 at level 2: section_header: Behaviour item-534 at level 3: section_header: Feeding item-535 at level 4: picture item-535 at level 5: caption: Pecten along the bill item-536 at level 4: caption: Mallard duckling preening item-537 at level 4: inline: group group - item-538 at level 5: text: Ducks eat food sources such as + item-538 at level 5: text: Ducks eat food sources such as item-539 at level 5: text: grasses - item-540 at level 5: text: , aquatic plants, fish, insects, small amphibians, worms, and small + item-540 at level 5: text: , aquatic plants, fish, insects, small amphibians, worms, and small item-541 at level 5: text: molluscs item-542 at level 5: text: . item-543 at level 4: inline: group group - item-544 at level 5: text: Dabbling ducks + item-544 at level 5: text: Dabbling ducks item-545 at level 5: text: feed on the surface of water or ... -ending without completely submerging. - item-546 at level 5: text: [ 24 ] - item-547 at level 5: text: Along the edge of the bill, there is a comb-like structure called a + item-546 at level 5: text: [24] + item-547 at level 5: text: Along the edge of the bill, there is a comb-like structure called a item-548 at level 5: text: pecten item-549 at level 5: text: . This strains the water squirti ... thers and to hold slippery food items. item-550 at level 4: inline: group group - item-551 at level 5: text: Diving ducks - item-552 at level 5: text: and - item-553 at level 5: text: sea ducks + item-551 at level 5: text: Diving ducks + item-552 at level 5: text: and + item-553 at level 5: text: sea ducks item-554 at level 5: text: forage deep underwater. To be ab ... ave more difficulty taking off to fly. item-555 at level 4: inline: group group - item-556 at level 5: text: A few specialized species such as the - item-557 at level 5: text: mergansers + item-556 at level 5: text: A few specialized species such as the + item-557 at level 5: text: mergansers item-558 at level 5: text: are adapted to catch and swallow large fish. item-559 at level 4: inline: group group - item-560 at level 5: text: The others have the characteristic wide flat bill adapted to + item-560 at level 5: text: The others have the characteristic wide flat bill adapted to item-561 at level 5: text: dredging - item-562 at level 5: text: -type jobs such as pulling up wa ... y when digging into sediment it has no + item-562 at level 5: text: -type jobs such as pulling up wa ... when digging into sediment it has no item-563 at level 5: text: cere item-564 at level 5: text: , but the nostrils come out through hard horn. item-565 at level 4: inline: group group - item-566 at level 5: text: The Guardian - item-567 at level 5: text: published an article advising th ... hould not be fed with bread because it - item-568 at level 5: text: damages the health of the ducks + item-566 at level 5: text: The Guardian + item-567 at level 5: text: published an article advising th ... ould not be fed with bread because it + item-568 at level 5: text: damages the health of the ducks item-569 at level 5: text: and pollutes waterways. - item-570 at level 5: text: [ 25 ] + item-570 at level 5: text: [25] item-571 at level 3: section_header: Breeding item-572 at level 4: picture item-572 at level 5: caption: A Muscovy duckling item-573 at level 4: inline: group group - item-574 at level 5: text: Ducks generally + item-574 at level 5: text: Ducks generally item-575 at level 5: text: only have one partner at a time item-576 at level 5: text: , although the partnership usually only lasts one year. - item-577 at level 5: text: [ 26 ] + item-577 at level 5: text: [26] item-578 at level 5: text: Larger species and the more sede ... e pair-bonds that last numerous years. - item-579 at level 5: text: [ 27 ] + item-579 at level 5: text: [27] item-580 at level 5: text: Most duck species breed once a y ... ng to do so in favourable conditions ( item-581 at level 5: text: spring - item-582 at level 5: text: /summer or wet seasons). Ducks also tend to make a - item-583 at level 5: text: nest - item-584 at level 5: text: before breeding, and, after hatc ... out of (such as nesting in an enclosed + item-582 at level 5: text: /summer or wet seasons). Ducks also tend to make a + item-583 at level 5: text: nest + item-584 at level 5: text: before breeding, and, after hatc ... ut of (such as nesting in an enclosed item-585 at level 5: text: courtyard item-586 at level 5: text: ) or are not prospering due to g ... e nest and led her ducklings to water. - item-587 at level 5: text: [ 28 ] + item-587 at level 5: text: [28] item-588 at level 3: section_header: Communication item-589 at level 4: inline: group group - item-590 at level 5: text: Female - item-591 at level 5: text: mallard - item-592 at level 5: text: ducks (as well as several other species in the genus + item-590 at level 5: text: Female + item-591 at level 5: text: mallard + item-592 at level 5: text: ducks (as well as several other species in the genus item-593 at level 5: text: Anas - item-594 at level 5: text: , such as the - item-595 at level 5: text: American - item-596 at level 5: text: and + item-594 at level 5: text: , such as the + item-595 at level 5: text: American + item-596 at level 5: text: and item-597 at level 5: text: Pacific black ducks - item-598 at level 5: text: , + item-598 at level 5: text: , item-599 at level 5: text: spot-billed duck - item-600 at level 5: text: , - item-601 at level 5: text: northern pintail - item-602 at level 5: text: and + item-600 at level 5: text: , + item-601 at level 5: text: northern pintail + item-602 at level 5: text: and item-603 at level 5: text: common teal item-604 at level 5: text: ) make the classic "quack" sound ... at is sometimes written as "breeeeze", - item-605 at level 5: text: [ 29 ] + item-605 at level 5: text: [29] item-606 at level 5: text: [ item-607 at level 5: text: self-published source? - item-608 at level 5: text: ] + item-608 at level 5: text: ] item-609 at level 5: text: but, despite widespread misconce ... , most species of duck do not "quack". - item-610 at level 5: text: [ 30 ] - item-611 at level 5: text: In general, ducks make a range of + item-610 at level 5: text: [30] + item-611 at level 5: text: In general, ducks make a range of item-612 at level 5: text: calls - item-613 at level 5: text: , including whistles, cooing, yodels and grunts. For example, the - item-614 at level 5: text: scaup - item-615 at level 5: text: - which are - item-616 at level 5: text: diving ducks + item-613 at level 5: text: , including whistles, cooing, yodels and grunts. For example, the + item-614 at level 5: text: scaup + item-615 at level 5: text: - which are + item-616 at level 5: text: diving ducks item-617 at level 5: text: - make a noise like "scaup" (hen ... laying calls or quieter contact calls. item-618 at level 4: inline: group group - item-619 at level 5: text: A common - item-620 at level 5: text: urban legend - item-621 at level 5: text: claims that duck quacks do not e ... y the Acoustics Research Centre at the - item-622 at level 5: text: University of Salford - item-623 at level 5: text: in 2003 as part of the + item-619 at level 5: text: A common + item-620 at level 5: text: urban legend + item-621 at level 5: text: claims that duck quacks do not e ... the Acoustics Research Centre at the + item-622 at level 5: text: University of Salford + item-623 at level 5: text: in 2003 as part of the item-624 at level 5: text: British Association item-625 at level 5: text: 's Festival of Science. - item-626 at level 5: text: [ 31 ] - item-627 at level 5: text: It was also debunked in - item-628 at level 5: text: one of the earlier episodes - item-629 at level 5: text: of the popular Discovery Channel television show + item-626 at level 5: text: [31] + item-627 at level 5: text: It was also debunked in + item-628 at level 5: text: one of the earlier episodes + item-629 at level 5: text: of the popular Discovery Channel television show item-630 at level 5: text: MythBusters item-631 at level 5: text: . - item-632 at level 5: text: [ 32 ] + item-632 at level 5: text: [32] item-633 at level 3: section_header: Predators item-634 at level 4: picture item-634 at level 5: caption: Ringed teal item-635 at level 4: inline: group group - item-636 at level 5: text: Ducks have many predators. Duckl ... ory birds but also for large fish like + item-636 at level 5: text: Ducks have many predators. Duckl ... ry birds but also for large fish like item-637 at level 5: text: pike - item-638 at level 5: text: , + item-638 at level 5: text: , item-639 at level 5: text: crocodilians - item-640 at level 5: text: , predatory - item-641 at level 5: text: testudines - item-642 at level 5: text: such as the + item-640 at level 5: text: , predatory + item-641 at level 5: text: testudines + item-642 at level 5: text: such as the item-643 at level 5: text: alligator snapping turtle - item-644 at level 5: text: , and other aquatic hunters, including fish-eating birds such as + item-644 at level 5: text: , and other aquatic hunters, including fish-eating birds such as item-645 at level 5: text: herons - item-646 at level 5: text: . Ducks' nests are raided by lan ... naware on the nest by mammals, such as + item-646 at level 5: text: . Ducks' nests are raided by lan ... aware on the nest by mammals, such as item-647 at level 5: text: foxes - item-648 at level 5: text: , or large birds, such as - item-649 at level 5: text: hawks - item-650 at level 5: text: or + item-648 at level 5: text: , or large birds, such as + item-649 at level 5: text: hawks + item-650 at level 5: text: or item-651 at level 5: text: owls item-652 at level 5: text: . item-653 at level 4: inline: group group - item-654 at level 5: text: Adult ducks are fast fliers, but ... ng big fish such as the North American - item-655 at level 5: text: muskie - item-656 at level 5: text: and the European + item-654 at level 5: text: Adult ducks are fast fliers, but ... g big fish such as the North American + item-655 at level 5: text: muskie + item-656 at level 5: text: and the European item-657 at level 5: text: pike - item-658 at level 5: text: . In flight, ducks are safe from ... a few predators such as humans and the + item-658 at level 5: text: . In flight, ducks are safe from ... few predators such as humans and the item-659 at level 5: text: peregrine falcon item-660 at level 5: text: , which uses its speed and strength to catch ducks. item-661 at level 2: section_header: Relationship with humans item-662 at level 3: section_header: Hunting item-663 at level 4: inline: group group - item-664 at level 5: text: Main article: + item-664 at level 5: text: Main article: item-665 at level 5: text: Waterfowl hunting item-666 at level 4: inline: group group - item-667 at level 5: text: Humans have hunted ducks since prehistoric times. Excavations of - item-668 at level 5: text: middens - item-669 at level 5: text: in California dating to 7800 - 6400 - item-670 at level 5: text: BP + item-667 at level 5: text: Humans have hunted ducks since prehistoric times. Excavations of + item-668 at level 5: text: middens + item-669 at level 5: text: in California dating to 7800 - 6400 + item-670 at level 5: text: BP item-671 at level 5: text: have turned up bones of ducks, i ... st one now-extinct flightless species. - item-672 at level 5: text: [ 33 ] - item-673 at level 5: text: Ducks were captured in "significant numbers" by - item-674 at level 5: text: Holocene - item-675 at level 5: text: inhabitants of the lower - item-676 at level 5: text: Ohio River + item-672 at level 5: text: [33] + item-673 at level 5: text: Ducks were captured in "significant numbers" by + item-674 at level 5: text: Holocene + item-675 at level 5: text: inhabitants of the lower + item-676 at level 5: text: Ohio River item-677 at level 5: text: valley, suggesting they took adv ... ounty provided by migrating waterfowl. - item-678 at level 5: text: [ 34 ] + item-678 at level 5: text: [34] item-679 at level 5: text: Neolithic hunters in locations as far apart as the Caribbean, - item-680 at level 5: text: [ 35 ] + item-680 at level 5: text: [35] item-681 at level 5: text: Scandinavia, - item-682 at level 5: text: [ 36 ] + item-682 at level 5: text: [36] item-683 at level 5: text: Egypt, - item-684 at level 5: text: [ 37 ] + item-684 at level 5: text: [37] item-685 at level 5: text: Switzerland, - item-686 at level 5: text: [ 38 ] + item-686 at level 5: text: [38] item-687 at level 5: text: and China relied on ducks as a s ... f protein for some or all of the year. - item-688 at level 5: text: [ 39 ] - item-689 at level 5: text: Archeological evidence shows that - item-690 at level 5: text: Māori people - item-691 at level 5: text: in New Zealand hunted the flightless + item-688 at level 5: text: [39] + item-689 at level 5: text: Archeological evidence shows that + item-690 at level 5: text: Māori people + item-691 at level 5: text: in New Zealand hunted the flightless item-692 at level 5: text: Finsch's duck item-693 at level 5: text: , possibly to extinction, though ... may also have contributed to its fate. - item-694 at level 5: text: [ 40 ] - item-695 at level 5: text: A similar end awaited the + item-694 at level 5: text: [40] + item-695 at level 5: text: A similar end awaited the item-696 at level 5: text: Chatham duck item-697 at level 5: text: , a species with reduced flying ... was colonised by Polynesian settlers. - item-698 at level 5: text: [ 41 ] + item-698 at level 5: text: [41] item-699 at level 5: text: It is probable that duck eggs we ... ugh hard evidence of this is uncommon. - item-700 at level 5: text: [ 35 ] - item-701 at level 5: text: [ 42 ] + item-700 at level 5: text: [35] + item-701 at level 5: text: [42] item-702 at level 4: inline: group group item-703 at level 5: text: In many areas, wild ducks (inclu ... he wild) are hunted for food or sport, - item-704 at level 5: text: [ 43 ] - item-705 at level 5: text: by shooting, or by being trapped using + item-704 at level 5: text: [43] + item-705 at level 5: text: by shooting, or by being trapped using item-706 at level 5: text: duck decoys - item-707 at level 5: text: . Because an idle floating duck ... n "an easy target". These ducks may be - item-708 at level 5: text: contaminated by pollutants - item-709 at level 5: text: such as + item-707 at level 5: text: . Because an idle floating duck ... "an easy target". These ducks may be + item-708 at level 5: text: contaminated by pollutants + item-709 at level 5: text: such as item-710 at level 5: text: PCBs item-711 at level 5: text: . - item-712 at level 5: text: [ 44 ] + item-712 at level 5: text: [44] item-713 at level 3: section_header: Domestication item-714 at level 4: inline: group group - item-715 at level 5: text: Main article: + item-715 at level 5: text: Main article: item-716 at level 5: text: Domestic duck item-717 at level 4: picture - item-717 at level 5: caption: Indian Runner ducks , a common breed of domestic ducks + item-717 at level 5: caption: Indian Runner ducks, a common breed of domestic ducks item-718 at level 4: inline: group group - item-719 at level 5: text: Ducks have many economic uses, b ... eggs, and feathers (particularly their + item-719 at level 5: text: Ducks have many economic uses, b ... ggs, and feathers (particularly their item-720 at level 5: text: down item-721 at level 5: text: ). Approximately 3 billion ducks ... ughtered each year for meat worldwide. - item-722 at level 5: text: [ 45 ] - item-723 at level 5: text: They are also kept and bred by a ... domestic ducks are descended from the - item-724 at level 5: text: mallard + item-722 at level 5: text: [45] + item-723 at level 5: text: They are also kept and bred by a ... domestic ducks are descended from the + item-724 at level 5: text: mallard item-725 at level 5: text: ( item-726 at level 5: text: Anas platyrhynchos - item-727 at level 5: text: ), apart from the - item-728 at level 5: text: Muscovy duck + item-727 at level 5: text: ), apart from the + item-728 at level 5: text: Muscovy duck item-729 at level 5: text: ( item-730 at level 5: text: Cairina moschata item-731 at level 5: text: ). - item-732 at level 5: text: [ 46 ] - item-733 at level 5: text: [ 47 ] - item-734 at level 5: text: The - item-735 at level 5: text: Call duck + item-732 at level 5: text: [46] + item-733 at level 5: text: [47] + item-734 at level 5: text: The + item-735 at level 5: text: Call duck item-736 at level 5: text: is another example of a domestic ... as it weighs less than 1 kg (2.2 lb). - item-737 at level 5: text: [ 48 ] + item-737 at level 5: text: [48] item-738 at level 3: section_header: Heraldry item-739 at level 4: picture - item-739 at level 5: caption: Three black-colored ducks in the coat of arms of Maaninka [ 49 ] + item-739 at level 5: caption: Three black-colored ducks in the coat of arms of Maaninka[49] item-740 at level 4: inline: group group - item-741 at level 5: text: Ducks appear on several + item-741 at level 5: text: Ducks appear on several item-742 at level 5: text: coats of arms - item-743 at level 5: text: , including the coat of arms of - item-744 at level 5: text: Lubāna + item-743 at level 5: text: , including the coat of arms of + item-744 at level 5: text: Lubāna item-745 at level 5: text: ( item-746 at level 5: text: Latvia item-747 at level 5: text: ) - item-748 at level 5: text: [ 50 ] - item-749 at level 5: text: and the coat of arms of - item-750 at level 5: text: Föglö + item-748 at level 5: text: [50] + item-749 at level 5: text: and the coat of arms of + item-750 at level 5: text: Föglö item-751 at level 5: text: ( item-752 at level 5: text: Åland item-753 at level 5: text: ). - item-754 at level 5: text: [ 51 ] + item-754 at level 5: text: [51] item-755 at level 3: section_header: Cultural references item-756 at level 4: inline: group group - item-757 at level 5: text: In 2002, psychologist - item-758 at level 5: text: Richard Wiseman - item-759 at level 5: text: and colleagues at the + item-757 at level 5: text: In 2002, psychologist + item-758 at level 5: text: Richard Wiseman + item-759 at level 5: text: and colleagues at the item-760 at level 5: text: University of Hertfordshire - item-761 at level 5: text: , + item-761 at level 5: text: , item-762 at level 5: text: UK - item-763 at level 5: text: , finished a year-long - item-764 at level 5: text: LaughLab + item-763 at level 5: text: , finished a year-long + item-764 at level 5: text: LaughLab item-765 at level 5: text: experiment, concluding that of a ... involving an animal, make it a duck." - item-766 at level 5: text: [ 52 ] - item-767 at level 5: text: The word "duck" may have become an - item-768 at level 5: text: inherently funny word - item-769 at level 5: text: in many languages, possibly beca ... n their looks or behavior. Of the many + item-766 at level 5: text: [52] + item-767 at level 5: text: The word "duck" may have become an + item-768 at level 5: text: inherently funny word + item-769 at level 5: text: in many languages, possibly beca ... their looks or behavior. Of the many item-770 at level 5: text: ducks in fiction - item-771 at level 5: text: , many are cartoon characters, such as + item-771 at level 5: text: , many are cartoon characters, such as item-772 at level 5: text: Walt Disney - item-773 at level 5: text: 's + item-773 at level 5: text: 's item-774 at level 5: text: Donald Duck - item-775 at level 5: text: , and + item-775 at level 5: text: , and item-776 at level 5: text: Warner Bros. - item-777 at level 5: text: ' + item-777 at level 5: text: ' item-778 at level 5: text: Daffy Duck - item-779 at level 5: text: . - item-780 at level 5: text: Howard the Duck + item-779 at level 5: text: . + item-780 at level 5: text: Howard the Duck item-781 at level 5: text: started as a comic book character in 1973 - item-782 at level 5: text: [ 53 ] - item-783 at level 5: text: [ 54 ] - item-784 at level 5: text: and was made into a - item-785 at level 5: text: movie + item-782 at level 5: text: [53] + item-783 at level 5: text: [54] + item-784 at level 5: text: and was made into a + item-785 at level 5: text: movie item-786 at level 5: text: in 1986. item-787 at level 4: inline: group group - item-788 at level 5: text: The 1992 Disney film + item-788 at level 5: text: The 1992 Disney film item-789 at level 5: text: The Mighty Ducks - item-790 at level 5: text: , starring + item-790 at level 5: text: , starring item-791 at level 5: text: Emilio Estevez - item-792 at level 5: text: , chose the duck as the mascot f ... e nickname and mascot for the eventual - item-793 at level 5: text: National Hockey League - item-794 at level 5: text: professional team of the + item-792 at level 5: text: , chose the duck as the mascot f ... nickname and mascot for the eventual + item-793 at level 5: text: National Hockey League + item-794 at level 5: text: professional team of the item-795 at level 5: text: Anaheim Ducks item-796 at level 5: text: , who were founded with the name the Mighty Ducks of Anaheim. item-797 at level 5: text: [ item-798 at level 5: text: citation needed - item-799 at level 5: text: ] - item-800 at level 5: text: The duck is also the nickname of the - item-801 at level 5: text: University of Oregon - item-802 at level 5: text: sports teams as well as the - item-803 at level 5: text: Long Island Ducks - item-804 at level 5: text: minor league - item-805 at level 5: text: baseball + item-799 at level 5: text: ] + item-800 at level 5: text: The duck is also the nickname of the + item-801 at level 5: text: University of Oregon + item-802 at level 5: text: sports teams as well as the + item-803 at level 5: text: Long Island Ducks + item-804 at level 5: text: minor league + item-805 at level 5: text: baseball item-806 at level 5: text: team. - item-807 at level 5: text: [ 55 ] + item-807 at level 5: text: [55] item-808 at level 2: section_header: See also item-809 at level 3: list: group list item-810 at level 4: list_item: Birds portal @@ -836,213 +836,213 @@ item-0 at level 0: unspecified: group _root_ item-821 at level 4: list: group ordered list item-822 at level 5: list_item: item-823 at level 6: inline: group group - item-824 at level 7: text: ^ + item-824 at level 7: text: ^ item-825 at level 7: text: "Duckling" - item-826 at level 7: text: . + item-826 at level 7: text: . item-827 at level 7: text: The American Heritage Dictionary of the English Language, Fourth Edition - item-828 at level 7: text: . Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 . + item-828 at level 7: text: . Houghton Mifflin Company. 2006. Retrieved 2015-05-22. item-829 at level 5: list_item: item-830 at level 6: inline: group group - item-831 at level 7: text: ^ + item-831 at level 7: text: ^ item-832 at level 7: text: "Duckling" - item-833 at level 7: text: . + item-833 at level 7: text: . item-834 at level 7: text: Kernerman English Multilingual Dictionary (Beta Version) - item-835 at level 7: text: . K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 . + item-835 at level 7: text: . K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22. item-836 at level 5: list_item: item-837 at level 6: inline: group group - item-838 at level 7: text: ^ - item-839 at level 7: text: Dohner, Janet Vorwald (2001). + item-838 at level 7: text: ^ + item-839 at level 7: text: Dohner, Janet Vorwald (2001). item-840 at level 7: text: The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds - item-841 at level 7: text: . Yale University Press. - item-842 at level 7: text: ISBN + item-841 at level 7: text: . Yale University Press. + item-842 at level 7: text: ISBN item-843 at level 7: text: 978-0300138139 item-844 at level 7: text: . item-845 at level 5: list_item: item-846 at level 6: inline: group group - item-847 at level 7: text: ^ - item-848 at level 7: text: Visca, Curt; Visca, Kelley (2003). + item-847 at level 7: text: ^ + item-848 at level 7: text: Visca, Curt; Visca, Kelley (2003). item-849 at level 7: text: How to Draw Cartoon Birds - item-850 at level 7: text: . The Rosen Publishing Group. - item-851 at level 7: text: ISBN + item-850 at level 7: text: . The Rosen Publishing Group. + item-851 at level 7: text: ISBN item-852 at level 7: text: 9780823961566 item-853 at level 7: text: . item-854 at level 5: list_item: item-855 at level 6: inline: group group - item-856 at level 7: text: ^ - item-857 at level 7: text: a - item-858 at level 7: text: b - item-859 at level 7: text: c - item-860 at level 7: text: d + item-856 at level 7: text: ^ + item-857 at level 7: text: a + item-858 at level 7: text: b + item-859 at level 7: text: c + item-860 at level 7: text: d item-861 at level 7: text: Carboneras 1992 item-862 at level 7: text: , p. 536. item-863 at level 5: list_item: item-864 at level 6: inline: group group - item-865 at level 7: text: ^ + item-865 at level 7: text: ^ item-866 at level 7: text: Livezey 1986 item-867 at level 7: text: , pp. 737-738. item-868 at level 5: list_item: item-869 at level 6: inline: group group - item-870 at level 7: text: ^ + item-870 at level 7: text: ^ item-871 at level 7: text: Madsen, McHugh & de Kloet 1988 item-872 at level 7: text: , p. 452. item-873 at level 5: list_item: item-874 at level 6: inline: group group - item-875 at level 7: text: ^ + item-875 at level 7: text: ^ item-876 at level 7: text: Donne-Goussé, Laudet & Hänni 2002 item-877 at level 7: text: , pp. 353-354. item-878 at level 5: list_item: item-879 at level 6: inline: group group - item-880 at level 7: text: ^ - item-881 at level 7: text: a - item-882 at level 7: text: b - item-883 at level 7: text: c - item-884 at level 7: text: d - item-885 at level 7: text: e - item-886 at level 7: text: f + item-880 at level 7: text: ^ + item-881 at level 7: text: a + item-882 at level 7: text: b + item-883 at level 7: text: c + item-884 at level 7: text: d + item-885 at level 7: text: e + item-886 at level 7: text: f item-887 at level 7: text: Carboneras 1992 item-888 at level 7: text: , p. 540. item-889 at level 5: list_item: item-890 at level 6: inline: group group - item-891 at level 7: text: ^ + item-891 at level 7: text: ^ item-892 at level 7: text: Elphick, Dunning & Sibley 2001 item-893 at level 7: text: , p. 191. item-894 at level 5: list_item: item-895 at level 6: inline: group group - item-896 at level 7: text: ^ + item-896 at level 7: text: ^ item-897 at level 7: text: Kear 2005 item-898 at level 7: text: , p. 448. item-899 at level 5: list_item: item-900 at level 6: inline: group group - item-901 at level 7: text: ^ + item-901 at level 7: text: ^ item-902 at level 7: text: Kear 2005 item-903 at level 7: text: , p. 622-623. item-904 at level 5: list_item: item-905 at level 6: inline: group group - item-906 at level 7: text: ^ + item-906 at level 7: text: ^ item-907 at level 7: text: Kear 2005 item-908 at level 7: text: , p. 686. item-909 at level 5: list_item: item-910 at level 6: inline: group group - item-911 at level 7: text: ^ + item-911 at level 7: text: ^ item-912 at level 7: text: Elphick, Dunning & Sibley 2001 item-913 at level 7: text: , p. 193. item-914 at level 5: list_item: item-915 at level 6: inline: group group - item-916 at level 7: text: ^ - item-917 at level 7: text: a - item-918 at level 7: text: b - item-919 at level 7: text: c - item-920 at level 7: text: d - item-921 at level 7: text: e - item-922 at level 7: text: f - item-923 at level 7: text: g + item-916 at level 7: text: ^ + item-917 at level 7: text: a + item-918 at level 7: text: b + item-919 at level 7: text: c + item-920 at level 7: text: d + item-921 at level 7: text: e + item-922 at level 7: text: f + item-923 at level 7: text: g item-924 at level 7: text: Carboneras 1992 item-925 at level 7: text: , p. 537. item-926 at level 5: list_item: item-927 at level 6: inline: group group - item-928 at level 7: text: ^ + item-928 at level 7: text: ^ item-929 at level 7: text: American Ornithologists' Union 1998 item-930 at level 7: text: , p. xix. item-931 at level 5: list_item: item-932 at level 6: inline: group group - item-933 at level 7: text: ^ + item-933 at level 7: text: ^ item-934 at level 7: text: American Ornithologists' Union 1998 item-935 at level 7: text: . item-936 at level 5: list_item: item-937 at level 6: inline: group group - item-938 at level 7: text: ^ + item-938 at level 7: text: ^ item-939 at level 7: text: Carboneras 1992 item-940 at level 7: text: , p. 538. item-941 at level 5: list_item: item-942 at level 6: inline: group group - item-943 at level 7: text: ^ + item-943 at level 7: text: ^ item-944 at level 7: text: Christidis & Boles 2008 item-945 at level 7: text: , p. 62. item-946 at level 5: list_item: item-947 at level 6: inline: group group - item-948 at level 7: text: ^ + item-948 at level 7: text: ^ item-949 at level 7: text: Shirihai 2008 item-950 at level 7: text: , pp. 239, 245. item-951 at level 5: list_item: item-952 at level 6: inline: group group - item-953 at level 7: text: ^ - item-954 at level 7: text: a - item-955 at level 7: text: b + item-953 at level 7: text: ^ + item-954 at level 7: text: a + item-955 at level 7: text: b item-956 at level 7: text: Pratt, Bruner & Berrett 1987 item-957 at level 7: text: , pp. 98-107. item-958 at level 5: list_item: item-959 at level 6: inline: group group - item-960 at level 7: text: ^ + item-960 at level 7: text: ^ item-961 at level 7: text: Fitter, Fitter & Hosking 2000 item-962 at level 7: text: , pp. 52-3. item-963 at level 5: list_item: item-964 at level 6: inline: group group - item-965 at level 7: text: ^ + item-965 at level 7: text: ^ item-966 at level 7: text: "Pacific Black Duck" - item-967 at level 7: text: . + item-967 at level 7: text: . item-968 at level 7: text: www.wiresnr.org - item-969 at level 7: text: . Retrieved 2018-04-27 . + item-969 at level 7: text: . Retrieved 2018-04-27. item-970 at level 5: list_item: item-971 at level 6: inline: group group - item-972 at level 7: text: ^ - item-973 at level 7: text: Ogden, Evans. + item-972 at level 7: text: ^ + item-973 at level 7: text: Ogden, Evans. item-974 at level 7: text: "Dabbling Ducks" - item-975 at level 7: text: . CWE . Retrieved 2006-11-02 . + item-975 at level 7: text: . CWE. Retrieved 2006-11-02. item-976 at level 5: list_item: item-977 at level 6: inline: group group - item-978 at level 7: text: ^ - item-979 at level 7: text: Karl Mathiesen (16 March 2015). + item-978 at level 7: text: ^ + item-979 at level 7: text: Karl Mathiesen (16 March 2015). item-980 at level 7: text: "Don't feed the ducks bread, say conservationists" - item-981 at level 7: text: . + item-981 at level 7: text: . item-982 at level 7: text: The Guardian - item-983 at level 7: text: . Retrieved 13 November 2016 . + item-983 at level 7: text: . Retrieved 13 November 2016. item-984 at level 5: list_item: item-985 at level 6: inline: group group - item-986 at level 7: text: ^ - item-987 at level 7: text: Rohwer, Frank C.; Anderson, Mich ... air Formation in Migratory Waterfowl". + item-986 at level 7: text: ^ + item-987 at level 7: text: Rohwer, Frank C.; Anderson, Mich ... ir Formation in Migratory Waterfowl". item-988 at level 7: text: Current Ornithology - item-989 at level 7: text: . pp. 187-221. + item-989 at level 7: text: . pp. 187-221. item-990 at level 7: text: doi item-991 at level 7: text: : item-992 at level 7: text: 10.1007/978-1-4615-6787-5_4 - item-993 at level 7: text: . - item-994 at level 7: text: ISBN + item-993 at level 7: text: . + item-994 at level 7: text: ISBN item-995 at level 7: text: 978-1-4615-6789-9 item-996 at level 7: text: . item-997 at level 5: list_item: item-998 at level 6: inline: group group - item-999 at level 7: text: ^ - item-1000 at level 7: text: Smith, Cyndi M.; Cooke, Fred; Ro ... Goudie, R. Ian; Boyd, W. Sean (2000). + item-999 at level 7: text: ^ + item-1000 at level 7: text: Smith, Cyndi M.; Cooke, Fred; Ro ... Goudie, R. Ian; Boyd, W. Sean (2000). item-1001 at level 7: text: "Long-Term Pair Bonds in Harlequin Ducks" - item-1002 at level 7: text: . + item-1002 at level 7: text: . item-1003 at level 7: text: The Condor - item-1004 at level 7: text: . - item-1005 at level 7: text: 102 - item-1006 at level 7: text: (1): 201-205. + item-1004 at level 7: text: . + item-1005 at level 7: text: 102 + item-1006 at level 7: text: (1): 201-205. item-1007 at level 7: text: doi item-1008 at level 7: text: : item-1009 at level 7: text: 10.1093/condor/102.1.201 - item-1010 at level 7: text: . + item-1010 at level 7: text: . item-1011 at level 7: text: hdl item-1012 at level 7: text: : item-1013 at level 7: text: 10315/13797 item-1014 at level 7: text: . item-1015 at level 5: list_item: item-1016 at level 6: inline: group group - item-1017 at level 7: text: ^ + item-1017 at level 7: text: ^ item-1018 at level 7: text: "If You Find An Orphaned Duckling - Wildlife Rehabber" - item-1019 at level 7: text: . + item-1019 at level 7: text: . item-1020 at level 7: text: wildliferehabber.com - item-1021 at level 7: text: . Archived from - item-1022 at level 7: text: the original - item-1023 at level 7: text: on 2018-09-23 . Retrieved 2018-12-22 . + item-1021 at level 7: text: . Archived from + item-1022 at level 7: text: the original + item-1023 at level 7: text: on 2018-09-23. Retrieved 2018-12-22. item-1024 at level 5: list_item: item-1025 at level 6: inline: group group - item-1026 at level 7: text: ^ - item-1027 at level 7: text: Carver, Heather (2011). + item-1026 at level 7: text: ^ + item-1027 at level 7: text: Carver, Heather (2011). item-1028 at level 7: text: The Duck Bible - item-1029 at level 7: text: . Lulu.com. - item-1030 at level 7: text: ISBN + item-1029 at level 7: text: . Lulu.com. + item-1030 at level 7: text: ISBN item-1031 at level 7: text: 9780557901562 item-1032 at level 7: text: . item-1033 at level 7: text: [ @@ -1050,423 +1050,423 @@ item-0 at level 0: unspecified: group _root_ item-1035 at level 7: text: ] item-1036 at level 5: list_item: item-1037 at level 6: inline: group group - item-1038 at level 7: text: ^ - item-1039 at level 7: text: Titlow, Budd (2013-09-03). + item-1038 at level 7: text: ^ + item-1039 at level 7: text: Titlow, Budd (2013-09-03). item-1040 at level 7: text: Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends - item-1041 at level 7: text: . Rowman & Littlefield. - item-1042 at level 7: text: ISBN + item-1041 at level 7: text: . Rowman & Littlefield. + item-1042 at level 7: text: ISBN item-1043 at level 7: text: 9780762797707 item-1044 at level 7: text: . item-1045 at level 5: list_item: item-1046 at level 6: inline: group group - item-1047 at level 7: text: ^ - item-1048 at level 7: text: Amos, Jonathan (2003-09-08). + item-1047 at level 7: text: ^ + item-1048 at level 7: text: Amos, Jonathan (2003-09-08). item-1049 at level 7: text: "Sound science is quackers" - item-1050 at level 7: text: . + item-1050 at level 7: text: . item-1051 at level 7: text: BBC News - item-1052 at level 7: text: . Retrieved 2006-11-02 . + item-1052 at level 7: text: . Retrieved 2006-11-02. item-1053 at level 5: list_item: item-1054 at level 6: inline: group group - item-1055 at level 7: text: ^ + item-1055 at level 7: text: ^ item-1056 at level 7: text: "Mythbusters Episode 8" item-1057 at level 7: text: . 12 December 2003. item-1058 at level 5: list_item: item-1059 at level 6: inline: group group - item-1060 at level 7: text: ^ + item-1060 at level 7: text: ^ item-1061 at level 7: text: Erlandson 1994 item-1062 at level 7: text: , p. 171. item-1063 at level 5: list_item: item-1064 at level 6: inline: group group - item-1065 at level 7: text: ^ + item-1065 at level 7: text: ^ item-1066 at level 7: text: Jeffries 2008 item-1067 at level 7: text: , pp. 168, 243. item-1068 at level 5: list_item: item-1069 at level 6: inline: group group - item-1070 at level 7: text: ^ - item-1071 at level 7: text: a - item-1072 at level 7: text: b + item-1070 at level 7: text: ^ + item-1071 at level 7: text: a + item-1072 at level 7: text: b item-1073 at level 7: text: Sued-Badillo 2003 item-1074 at level 7: text: , p. 65. item-1075 at level 5: list_item: item-1076 at level 6: inline: group group - item-1077 at level 7: text: ^ + item-1077 at level 7: text: ^ item-1078 at level 7: text: Thorpe 1996 item-1079 at level 7: text: , p. 68. item-1080 at level 5: list_item: item-1081 at level 6: inline: group group - item-1082 at level 7: text: ^ + item-1082 at level 7: text: ^ item-1083 at level 7: text: Maisels 1999 item-1084 at level 7: text: , p. 42. item-1085 at level 5: list_item: item-1086 at level 6: inline: group group - item-1087 at level 7: text: ^ + item-1087 at level 7: text: ^ item-1088 at level 7: text: Rau 1876 item-1089 at level 7: text: , p. 133. item-1090 at level 5: list_item: item-1091 at level 6: inline: group group - item-1092 at level 7: text: ^ + item-1092 at level 7: text: ^ item-1093 at level 7: text: Higman 2012 item-1094 at level 7: text: , p. 23. item-1095 at level 5: list_item: item-1096 at level 6: inline: group group - item-1097 at level 7: text: ^ + item-1097 at level 7: text: ^ item-1098 at level 7: text: Hume 2012 item-1099 at level 7: text: , p. 53. item-1100 at level 5: list_item: item-1101 at level 6: inline: group group - item-1102 at level 7: text: ^ + item-1102 at level 7: text: ^ item-1103 at level 7: text: Hume 2012 item-1104 at level 7: text: , p. 52. item-1105 at level 5: list_item: item-1106 at level 6: inline: group group - item-1107 at level 7: text: ^ + item-1107 at level 7: text: ^ item-1108 at level 7: text: Fieldhouse 2002 item-1109 at level 7: text: , p. 167. item-1110 at level 5: list_item: item-1111 at level 6: inline: group group - item-1112 at level 7: text: ^ - item-1113 at level 7: text: Livingston, A. D. (1998-01-01). + item-1112 at level 7: text: ^ + item-1113 at level 7: text: Livingston, A. D. (1998-01-01). item-1114 at level 7: text: Guide to Edible Plants and Animals - item-1115 at level 7: text: . Wordsworth Editions, Limited. - item-1116 at level 7: text: ISBN + item-1115 at level 7: text: . Wordsworth Editions, Limited. + item-1116 at level 7: text: ISBN item-1117 at level 7: text: 9781853263774 item-1118 at level 7: text: . item-1119 at level 5: list_item: item-1120 at level 6: inline: group group - item-1121 at level 7: text: ^ - item-1122 at level 7: text: "Study plan for waterfowl injury ... ns in Hudson river resident waterfowl" - item-1123 at level 7: text: (PDF) . + item-1121 at level 7: text: ^ + item-1122 at level 7: text: "Study plan for waterfowl injury ... s in Hudson river resident waterfowl" + item-1123 at level 7: text: (PDF). item-1124 at level 7: text: New York State Department of Environmental Conservation - item-1125 at level 7: text: . US Department of Commerce. December 2008. p. 3. - item-1126 at level 7: text: Archived - item-1127 at level 7: text: (PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 . + item-1125 at level 7: text: . US Department of Commerce. December 2008. p. 3. + item-1126 at level 7: text: Archived + item-1127 at level 7: text: (PDF) from the original on 2022-10-09. Retrieved 2 July 2019. item-1128 at level 5: list_item: item-1129 at level 6: inline: group group - item-1130 at level 7: text: ^ + item-1130 at level 7: text: ^ item-1131 at level 7: text: "FAOSTAT" - item-1132 at level 7: text: . + item-1132 at level 7: text: . item-1133 at level 7: text: www.fao.org - item-1134 at level 7: text: . Retrieved 2019-10-25 . + item-1134 at level 7: text: . Retrieved 2019-10-25. item-1135 at level 5: list_item: item-1136 at level 6: inline: group group - item-1137 at level 7: text: ^ + item-1137 at level 7: text: ^ item-1138 at level 7: text: "Anas platyrhynchos, Domestic Du ... f - The University of Texas at Austin" - item-1139 at level 7: text: . Digimorph.org . Retrieved 2012-12-23 . + item-1139 at level 7: text: . Digimorph.org. Retrieved 2012-12-23. item-1140 at level 5: list_item: item-1141 at level 6: inline: group group - item-1142 at level 7: text: ^ - item-1143 at level 7: text: Sy Montgomery. + item-1142 at level 7: text: ^ + item-1143 at level 7: text: Sy Montgomery. item-1144 at level 7: text: "Mallard; Encyclopædia Britannica" - item-1145 at level 7: text: . + item-1145 at level 7: text: . item-1146 at level 7: text: Britannica.com - item-1147 at level 7: text: . Retrieved 2012-12-23 . + item-1147 at level 7: text: . Retrieved 2012-12-23. item-1148 at level 5: list_item: item-1149 at level 6: inline: group group - item-1150 at level 7: text: ^ - item-1151 at level 7: text: Glenday, Craig (2014). + item-1150 at level 7: text: ^ + item-1151 at level 7: text: Glenday, Craig (2014). item-1152 at level 7: text: Guinness World Records - item-1153 at level 7: text: . Guinness World Records Limited. pp. + item-1153 at level 7: text: . Guinness World Records Limited. pp. item-1154 at level 7: text: 135 - item-1155 at level 7: text: . - item-1156 at level 7: text: ISBN + item-1155 at level 7: text: . + item-1156 at level 7: text: ISBN item-1157 at level 7: text: 978-1-908843-15-9 item-1158 at level 7: text: . item-1159 at level 5: list_item: item-1160 at level 6: inline: group group - item-1161 at level 7: text: ^ - item-1162 at level 7: text: Suomen kunnallisvaakunat - item-1163 at level 7: text: (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. - item-1164 at level 7: text: ISBN + item-1161 at level 7: text: ^ + item-1162 at level 7: text: Suomen kunnallisvaakunat + item-1163 at level 7: text: (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. + item-1164 at level 7: text: ISBN item-1165 at level 7: text: 951-773-085-3 item-1166 at level 7: text: . item-1167 at level 5: list_item: item-1168 at level 6: inline: group group - item-1169 at level 7: text: ^ - item-1170 at level 7: text: "Lubānas simbolika" - item-1171 at level 7: text: (in Latvian) . Retrieved September 9, 2021 . + item-1169 at level 7: text: ^ + item-1170 at level 7: text: "Lubānas simbolika" + item-1171 at level 7: text: (in Latvian). Retrieved September 9, 2021. item-1172 at level 5: list_item: item-1173 at level 6: inline: group group - item-1174 at level 7: text: ^ - item-1175 at level 7: text: "Föglö" - item-1176 at level 7: text: (in Swedish) . Retrieved September 9, 2021 . + item-1174 at level 7: text: ^ + item-1175 at level 7: text: "Föglö" + item-1176 at level 7: text: (in Swedish). Retrieved September 9, 2021. item-1177 at level 5: list_item: item-1178 at level 6: inline: group group - item-1179 at level 7: text: ^ - item-1180 at level 7: text: Young, Emma. + item-1179 at level 7: text: ^ + item-1180 at level 7: text: Young, Emma. item-1181 at level 7: text: "World's funniest joke revealed" - item-1182 at level 7: text: . + item-1182 at level 7: text: . item-1183 at level 7: text: New Scientist - item-1184 at level 7: text: . Retrieved 7 January 2019 . + item-1184 at level 7: text: . Retrieved 7 January 2019. item-1185 at level 5: list_item: item-1186 at level 6: inline: group group - item-1187 at level 7: text: ^ + item-1187 at level 7: text: ^ item-1188 at level 7: text: "Howard the Duck (character)" - item-1189 at level 7: text: . + item-1189 at level 7: text: . item-1190 at level 7: text: Grand Comics Database item-1191 at level 7: text: . item-1192 at level 5: list_item: item-1193 at level 6: inline: group group - item-1194 at level 7: text: ^ + item-1194 at level 7: text: ^ item-1195 at level 7: text: Sanderson, Peter - item-1196 at level 7: text: ; Gilbert, Laura (2008). "1970s". + item-1196 at level 7: text: ; Gilbert, Laura (2008). "1970s". item-1197 at level 7: text: Marvel Chronicle A Year by Year History - item-1198 at level 7: text: . London, United Kingdom: + item-1198 at level 7: text: . London, United Kingdom: item-1199 at level 7: text: Dorling Kindersley - item-1200 at level 7: text: . p. 161. - item-1201 at level 7: text: ISBN + item-1200 at level 7: text: . p. 161. + item-1201 at level 7: text: ISBN item-1202 at level 7: text: 978-0756641238 item-1203 at level 7: text: . December saw the debut of the ... luding this bad-tempered talking duck. item-1204 at level 5: list_item: item-1205 at level 6: inline: group group - item-1206 at level 7: text: ^ + item-1206 at level 7: text: ^ item-1207 at level 7: text: "The Duck" - item-1208 at level 7: text: . + item-1208 at level 7: text: . item-1209 at level 7: text: University of Oregon Athletics - item-1210 at level 7: text: . Retrieved 2022-01-20 . + item-1210 at level 7: text: . Retrieved 2022-01-20. item-1211 at level 3: section_header: Sources item-1212 at level 4: list: group list item-1213 at level 5: list_item: item-1214 at level 6: inline: group group - item-1215 at level 7: text: American Ornithologists' Union (1998). - item-1216 at level 7: text: Checklist of North American Birds - item-1217 at level 7: text: (PDF) . Washington, DC: American Ornithologists' Union. - item-1218 at level 7: text: ISBN + item-1215 at level 7: text: American Ornithologists' Union (1998). + item-1216 at level 7: text: Checklist of North American Birds + item-1217 at level 7: text: (PDF). Washington, DC: American Ornithologists' Union. + item-1218 at level 7: text: ISBN item-1219 at level 7: text: 978-1-891276-00-2 - item-1220 at level 7: text: . - item-1221 at level 7: text: Archived + item-1220 at level 7: text: . + item-1221 at level 7: text: Archived item-1222 at level 7: text: (PDF) from the original on 2022-10-09. item-1223 at level 5: list_item: item-1224 at level 6: inline: group group - item-1225 at level 7: text: Carboneras, Carlos (1992). del H ... liott, Andrew; Sargatal, Jordi (eds.). + item-1225 at level 7: text: Carboneras, Carlos (1992). del H ... iott, Andrew; Sargatal, Jordi (eds.). item-1226 at level 7: text: Handbook of the Birds of the World - item-1227 at level 7: text: . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. - item-1228 at level 7: text: ISBN + item-1227 at level 7: text: . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. + item-1228 at level 7: text: ISBN item-1229 at level 7: text: 978-84-87334-10-8 item-1230 at level 7: text: . item-1231 at level 5: list_item: item-1232 at level 6: inline: group group - item-1233 at level 7: text: Christidis, Les; Boles, Walter E., eds. (2008). + item-1233 at level 7: text: Christidis, Les; Boles, Walter E., eds. (2008). item-1234 at level 7: text: Systematics and Taxonomy of Australian Birds - item-1235 at level 7: text: . Collingwood, VIC: Csiro Publishing. - item-1236 at level 7: text: ISBN + item-1235 at level 7: text: . Collingwood, VIC: Csiro Publishing. + item-1236 at level 7: text: ISBN item-1237 at level 7: text: 978-0-643-06511-6 item-1238 at level 7: text: . item-1239 at level 5: list_item: item-1240 at level 6: inline: group group - item-1241 at level 7: text: Donne-Goussé, Carole; Laudet, Vi ... based on mitochondrial DNA analysis". + item-1241 at level 7: text: Donne-Goussé, Carole; Laudet, Vi ... based on mitochondrial DNA analysis". item-1242 at level 7: text: Molecular Phylogenetics and Evolution - item-1243 at level 7: text: . - item-1244 at level 7: text: 23 - item-1245 at level 7: text: (3): 339-356. + item-1243 at level 7: text: . + item-1244 at level 7: text: 23 + item-1245 at level 7: text: (3): 339-356. item-1246 at level 7: text: Bibcode item-1247 at level 7: text: : item-1248 at level 7: text: 2002MolPE..23..339D - item-1249 at level 7: text: . + item-1249 at level 7: text: . item-1250 at level 7: text: doi item-1251 at level 7: text: : item-1252 at level 7: text: 10.1016/S1055-7903(02)00019-2 - item-1253 at level 7: text: . - item-1254 at level 7: text: PMID + item-1253 at level 7: text: . + item-1254 at level 7: text: PMID item-1255 at level 7: text: 12099792 item-1256 at level 7: text: . item-1257 at level 5: list_item: item-1258 at level 6: inline: group group - item-1259 at level 7: text: Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). + item-1259 at level 7: text: Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). item-1260 at level 7: text: The Sibley Guide to Bird Life and Behaviour - item-1261 at level 7: text: . London: Christopher Helm. - item-1262 at level 7: text: ISBN + item-1261 at level 7: text: . London: Christopher Helm. + item-1262 at level 7: text: ISBN item-1263 at level 7: text: 978-0-7136-6250-4 item-1264 at level 7: text: . item-1265 at level 5: list_item: item-1266 at level 6: inline: group group - item-1267 at level 7: text: Erlandson, Jon M. (1994). + item-1267 at level 7: text: Erlandson, Jon M. (1994). item-1268 at level 7: text: Early Hunter-Gatherers of the California Coast - item-1269 at level 7: text: . New York, NY: Springer Science & Business Media. - item-1270 at level 7: text: ISBN + item-1269 at level 7: text: . New York, NY: Springer Science & Business Media. + item-1270 at level 7: text: ISBN item-1271 at level 7: text: 978-1-4419-3231-0 item-1272 at level 7: text: . item-1273 at level 5: list_item: item-1274 at level 6: inline: group group - item-1275 at level 7: text: Fieldhouse, Paul (2002). + item-1275 at level 7: text: Fieldhouse, Paul (2002). item-1276 at level 7: text: Food, Feasts, and Faith: An Ency ... dia of Food Culture in World Religions - item-1277 at level 7: text: . Vol. I: A-K. Santa Barbara: ABC-CLIO. - item-1278 at level 7: text: ISBN + item-1277 at level 7: text: . Vol. I: A-K. Santa Barbara: ABC-CLIO. + item-1278 at level 7: text: ISBN item-1279 at level 7: text: 978-1-61069-412-4 item-1280 at level 7: text: . item-1281 at level 5: list_item: item-1282 at level 6: inline: group group - item-1283 at level 7: text: Fitter, Julian; Fitter, Daniel; Hosking, David (2000). + item-1283 at level 7: text: Fitter, Julian; Fitter, Daniel; Hosking, David (2000). item-1284 at level 7: text: Wildlife of the Galápagos - item-1285 at level 7: text: . Princeton, NJ: Princeton University Press. - item-1286 at level 7: text: ISBN + item-1285 at level 7: text: . Princeton, NJ: Princeton University Press. + item-1286 at level 7: text: ISBN item-1287 at level 7: text: 978-0-691-10295-5 item-1288 at level 7: text: . item-1289 at level 5: list_item: item-1290 at level 6: inline: group group - item-1291 at level 7: text: Higman, B. W. (2012). + item-1291 at level 7: text: Higman, B. W. (2012). item-1292 at level 7: text: How Food Made History - item-1293 at level 7: text: . Chichester, UK: John Wiley & Sons. - item-1294 at level 7: text: ISBN + item-1293 at level 7: text: . Chichester, UK: John Wiley & Sons. + item-1294 at level 7: text: ISBN item-1295 at level 7: text: 978-1-4051-8947-7 item-1296 at level 7: text: . item-1297 at level 5: list_item: item-1298 at level 6: inline: group group - item-1299 at level 7: text: Hume, Julian H. (2012). + item-1299 at level 7: text: Hume, Julian H. (2012). item-1300 at level 7: text: Extinct Birds - item-1301 at level 7: text: . London: Christopher Helm. - item-1302 at level 7: text: ISBN + item-1301 at level 7: text: . London: Christopher Helm. + item-1302 at level 7: text: ISBN item-1303 at level 7: text: 978-1-4729-3744-5 item-1304 at level 7: text: . item-1305 at level 5: list_item: item-1306 at level 6: inline: group group - item-1307 at level 7: text: Jeffries, Richard (2008). + item-1307 at level 7: text: Jeffries, Richard (2008). item-1308 at level 7: text: Holocene Hunter-Gatherers of the Lower Ohio River Valley - item-1309 at level 7: text: . Tuscaloosa: University of Alabama Press. - item-1310 at level 7: text: ISBN + item-1309 at level 7: text: . Tuscaloosa: University of Alabama Press. + item-1310 at level 7: text: ISBN item-1311 at level 7: text: 978-0-8173-1658-7 item-1312 at level 7: text: . item-1313 at level 5: list_item: item-1314 at level 6: inline: group group - item-1315 at level 7: text: Kear, Janet, ed. (2005). + item-1315 at level 7: text: Kear, Janet, ed. (2005). item-1316 at level 7: text: Ducks, Geese and Swans: Species Accounts ( - item-1317 at level 7: text: Cairina - item-1318 at level 7: text: to + item-1317 at level 7: text: Cairina + item-1318 at level 7: text: to item-1319 at level 7: text: Mergus item-1320 at level 7: text: ) - item-1321 at level 7: text: . Bird Families of the World. Oxford: Oxford University Press. - item-1322 at level 7: text: ISBN + item-1321 at level 7: text: . Bird Families of the World. Oxford: Oxford University Press. + item-1322 at level 7: text: ISBN item-1323 at level 7: text: 978-0-19-861009-0 item-1324 at level 7: text: . item-1325 at level 5: list_item: item-1326 at level 6: inline: group group - item-1327 at level 7: text: Livezey, Bradley C. (October 1986). - item-1328 at level 7: text: "A phylogenetic analysis of rece ... genera using morphological characters" - item-1329 at level 7: text: (PDF) . + item-1327 at level 7: text: Livezey, Bradley C. (October 1986). + item-1328 at level 7: text: "A phylogenetic analysis of rece ... enera using morphological characters" + item-1329 at level 7: text: (PDF). item-1330 at level 7: text: The Auk - item-1331 at level 7: text: . - item-1332 at level 7: text: 103 - item-1333 at level 7: text: (4): 737-754. + item-1331 at level 7: text: . + item-1332 at level 7: text: 103 + item-1333 at level 7: text: (4): 737-754. item-1334 at level 7: text: doi item-1335 at level 7: text: : item-1336 at level 7: text: 10.1093/auk/103.4.737 - item-1337 at level 7: text: . - item-1338 at level 7: text: Archived + item-1337 at level 7: text: . + item-1338 at level 7: text: Archived item-1339 at level 7: text: (PDF) from the original on 2022-10-09. item-1340 at level 5: list_item: item-1341 at level 6: inline: group group - item-1342 at level 7: text: Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). - item-1343 at level 7: text: "A partial classification of wat ... l (Anatidae) based on single-copy DNA" - item-1344 at level 7: text: (PDF) . + item-1342 at level 7: text: Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). + item-1343 at level 7: text: "A partial classification of wat ... (Anatidae) based on single-copy DNA" + item-1344 at level 7: text: (PDF). item-1345 at level 7: text: The Auk - item-1346 at level 7: text: . - item-1347 at level 7: text: 105 - item-1348 at level 7: text: (3): 452-459. + item-1346 at level 7: text: . + item-1347 at level 7: text: 105 + item-1348 at level 7: text: (3): 452-459. item-1349 at level 7: text: doi item-1350 at level 7: text: : item-1351 at level 7: text: 10.1093/auk/105.3.452 - item-1352 at level 7: text: . - item-1353 at level 7: text: Archived + item-1352 at level 7: text: . + item-1353 at level 7: text: Archived item-1354 at level 7: text: (PDF) from the original on 2022-10-09. item-1355 at level 5: list_item: item-1356 at level 6: inline: group group - item-1357 at level 7: text: Maisels, Charles Keith (1999). + item-1357 at level 7: text: Maisels, Charles Keith (1999). item-1358 at level 7: text: Early Civilizations of the Old World - item-1359 at level 7: text: . London: Routledge. - item-1360 at level 7: text: ISBN + item-1359 at level 7: text: . London: Routledge. + item-1360 at level 7: text: ISBN item-1361 at level 7: text: 978-0-415-10975-8 item-1362 at level 7: text: . item-1363 at level 5: list_item: item-1364 at level 6: inline: group group - item-1365 at level 7: text: Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). + item-1365 at level 7: text: Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). item-1366 at level 7: text: A Field Guide to the Birds of Hawaii and the Tropical Pacific - item-1367 at level 7: text: . Princeton, NJ: Princeton University Press. - item-1368 at level 7: text: ISBN + item-1367 at level 7: text: . Princeton, NJ: Princeton University Press. + item-1368 at level 7: text: ISBN item-1369 at level 7: text: 0-691-02399-9 item-1370 at level 7: text: . item-1371 at level 5: list_item: item-1372 at level 6: inline: group group - item-1373 at level 7: text: Rau, Charles (1876). + item-1373 at level 7: text: Rau, Charles (1876). item-1374 at level 7: text: Early Man in Europe - item-1375 at level 7: text: . New York: Harper & Brothers. - item-1376 at level 7: text: LCCN + item-1375 at level 7: text: . New York: Harper & Brothers. + item-1376 at level 7: text: LCCN item-1377 at level 7: text: 05040168 item-1378 at level 7: text: . item-1379 at level 5: list_item: item-1380 at level 6: inline: group group - item-1381 at level 7: text: Shirihai, Hadoram (2008). + item-1381 at level 7: text: Shirihai, Hadoram (2008). item-1382 at level 7: text: A Complete Guide to Antarctic Wildlife - item-1383 at level 7: text: . Princeton, NJ, US: Princeton University Press. - item-1384 at level 7: text: ISBN + item-1383 at level 7: text: . Princeton, NJ, US: Princeton University Press. + item-1384 at level 7: text: ISBN item-1385 at level 7: text: 978-0-691-13666-0 item-1386 at level 7: text: . item-1387 at level 5: list_item: item-1388 at level 6: inline: group group - item-1389 at level 7: text: Sued-Badillo, Jalil (2003). + item-1389 at level 7: text: Sued-Badillo, Jalil (2003). item-1390 at level 7: text: Autochthonous Societies - item-1391 at level 7: text: . General History of the Caribbean. Paris: UNESCO. - item-1392 at level 7: text: ISBN + item-1391 at level 7: text: . General History of the Caribbean. Paris: UNESCO. + item-1392 at level 7: text: ISBN item-1393 at level 7: text: 978-92-3-103832-7 item-1394 at level 7: text: . item-1395 at level 5: list_item: item-1396 at level 6: inline: group group - item-1397 at level 7: text: Thorpe, I. J. (1996). + item-1397 at level 7: text: Thorpe, I. J. (1996). item-1398 at level 7: text: The Origins of Agriculture in Europe - item-1399 at level 7: text: . New York: Routledge. - item-1400 at level 7: text: ISBN + item-1399 at level 7: text: . New York: Routledge. + item-1400 at level 7: text: ISBN item-1401 at level 7: text: 978-0-415-08009-5 item-1402 at level 7: text: . item-1403 at level 2: section_header: External links item-1404 at level 3: inline: group group - item-1405 at level 4: text: Duck - item-1406 at level 4: text: at Wikipedia's + item-1405 at level 4: text: Duck + item-1406 at level 4: text: at Wikipedia's item-1407 at level 4: text: sister projects item-1408 at level 3: list: group list item-1409 at level 4: list_item: item-1410 at level 5: inline: group group - item-1411 at level 6: text: Definitions + item-1411 at level 6: text: Definitions item-1412 at level 6: text: from Wiktionary item-1413 at level 5: picture item-1414 at level 4: list_item: item-1415 at level 5: inline: group group - item-1416 at level 6: text: Media + item-1416 at level 6: text: Media item-1417 at level 6: text: from Commons item-1418 at level 5: picture item-1419 at level 4: list_item: item-1420 at level 5: inline: group group - item-1421 at level 6: text: Quotations + item-1421 at level 6: text: Quotations item-1422 at level 6: text: from Wikiquote item-1423 at level 5: picture item-1424 at level 4: list_item: item-1425 at level 5: inline: group group - item-1426 at level 6: text: Recipes + item-1426 at level 6: text: Recipes item-1427 at level 6: text: from Wikibooks item-1428 at level 5: picture item-1429 at level 4: list_item: item-1430 at level 5: inline: group group - item-1431 at level 6: text: Taxa + item-1431 at level 6: text: Taxa item-1432 at level 6: text: from Wikispecies item-1433 at level 5: picture item-1434 at level 4: list_item: item-1435 at level 5: inline: group group - item-1436 at level 6: text: Data + item-1436 at level 6: text: Data item-1437 at level 6: text: from Wikidata item-1438 at level 5: picture item-1439 at level 3: list: group list item-1440 at level 4: list_item: item-1441 at level 5: inline: group group - item-1442 at level 6: text: list of books + item-1442 at level 6: text: list of books item-1443 at level 6: text: (useful looking abstracts) item-1444 at level 4: list_item: item-1445 at level 5: inline: group group - item-1446 at level 6: text: Ducks on postage stamps - item-1447 at level 6: text: Archived - item-1448 at level 6: text: 2013-05-13 at the + item-1446 at level 6: text: Ducks on postage stamps + item-1447 at level 6: text: Archived + item-1448 at level 6: text: 2013-05-13 at the item-1449 at level 6: text: Wayback Machine item-1450 at level 4: list_item: item-1451 at level 5: inline: group group - item-1452 at level 6: text: Ducks at a Distance, by Rob Hines - item-1453 at level 6: text: at - item-1454 at level 6: text: Project Gutenberg + item-1452 at level 6: text: Ducks at a Distance, by Rob Hines + item-1453 at level 6: text: at + item-1454 at level 6: text: Project Gutenberg item-1455 at level 6: text: - A modern illustrated guide to identification of US waterfowl item-1456 at level 3: table with [3x2] item-1457 at level 4: unspecified: group rich_cell_group_2_0_0 @@ -1527,15 +1527,15 @@ item-0 at level 0: unspecified: group _root_ item-1511 at level 1: caption: Page semi-protected item-1512 at level 1: caption: Edit this classification item-1513 at level 1: caption: Pacific black duck displaying the characteristic upending "duck" - item-1514 at level 1: caption: Male mallard . - item-1515 at level 1: caption: Wood ducks . + item-1514 at level 1: caption: Male mallard. + item-1515 at level 1: caption: Wood ducks. item-1516 at level 1: caption: Mallard landing in approach item-1517 at level 1: caption: Male Mandarin duck - item-1518 at level 1: caption: Flying steamer ducks in Ushuaia , Argentina - item-1519 at level 1: caption: Female mallard in Cornwall , England + item-1518 at level 1: caption: Flying steamer ducks in Ushuaia, Argentina + item-1519 at level 1: caption: Female mallard in Cornwall, England item-1520 at level 1: caption: Pecten along the bill item-1521 at level 1: caption: A Muscovy duckling item-1522 at level 1: caption: Ringed teal - item-1523 at level 1: caption: Indian Runner ducks , a common breed of domestic ducks - item-1524 at level 1: caption: Three black-colored ducks in the coat of arms of Maaninka [ 49 ] + item-1523 at level 1: caption: Indian Runner ducks, a common breed of domestic ducks + item-1524 at level 1: caption: Three black-colored ducks in the coat of arms of Maaninka[49] item-1525 at level 1: caption: Edit this at Wikidata \ No newline at end of file diff --git a/tests/data/html/groundtruth/wiki_duck.html.json b/tests/data/html/groundtruth/wiki_duck.html.json index 4ab710880d..8d87170cf8 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.json +++ b/tests/data/html/groundtruth/wiki_duck.html.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "wiki_duck", "origin": { "mimetype": "text/html", @@ -6655,8 +6655,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Pages for logged out editors", - "text": "Pages for logged out editors" + "orig": "Pages for logged out editors ", + "text": "Pages for logged out editors " }, { "self_ref": "#/texts/32", @@ -6872,8 +6872,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "5 Behaviour", - "text": "5 Behaviour", + "orig": "5 Behaviour ", + "text": "5 Behaviour ", "hyperlink": "#Behaviour" }, { @@ -6994,8 +6994,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "6 Relationship with humans", - "text": "6 Relationship with humans", + "orig": "6 Relationship with humans ", + "text": "6 Relationship with humans ", "hyperlink": "#Relationship_with_humans" }, { @@ -7135,8 +7135,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "8 Notes", - "text": "8 Notes", + "orig": "8 Notes ", + "text": "8 Notes ", "hyperlink": "#Notes" }, { @@ -9923,8 +9923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Redirected from", - "text": "(Redirected from" + "orig": "(Redirected from ", + "text": "(Redirected from " }, { "self_ref": "#/texts/241", @@ -9960,8 +9960,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This article is about the bird. For duck as a food, see", - "text": "This article is about the bird. For duck as a food, see" + "orig": "This article is about the bird. For duck as a food, see ", + "text": "This article is about the bird. For duck as a food, see " }, { "self_ref": "#/texts/244", @@ -9985,8 +9985,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". For other uses, see", - "text": ". For other uses, see" + "orig": ". For other uses, see ", + "text": ". For other uses, see " }, { "self_ref": "#/texts/246", @@ -10022,8 +10022,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Duckling\" redirects here. For other uses, see", - "text": "\"Duckling\" redirects here. For other uses, see" + "orig": "\"Duckling\" redirects here. For other uses, see ", + "text": "\"Duckling\" redirects here. For other uses, see " }, { "self_ref": "#/texts/249", @@ -10059,8 +10059,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Bufflehead", - "text": "Bufflehead", + "orig": "Bufflehead ", + "text": "Bufflehead ", "hyperlink": "/wiki/Bufflehead" }, { @@ -10232,8 +10232,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Duck", - "text": "Duck", + "orig": "Duck ", + "text": "Duck ", "formatting": { "bold": true, "italic": false, @@ -10251,8 +10251,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the common name for numerous species of", - "text": "is the common name for numerous species of" + "orig": "is the common name for numerous species of ", + "text": "is the common name for numerous species of " }, { "self_ref": "#/texts/266", @@ -10263,8 +10263,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "waterfowl", - "text": "waterfowl", + "orig": "waterfowl ", + "text": "waterfowl ", "hyperlink": "/wiki/Waterfowl" }, { @@ -10276,8 +10276,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in the", - "text": "in the" + "orig": "in the ", + "text": "in the " }, { "self_ref": "#/texts/268", @@ -10288,8 +10288,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "family", - "text": "family", + "orig": "family ", + "text": "family ", "hyperlink": "/wiki/Family_(biology)" }, { @@ -10314,8 +10314,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Ducks are generally smaller and shorter-necked than", - "text": ". Ducks are generally smaller and shorter-necked than" + "orig": ". Ducks are generally smaller and shorter-necked than ", + "text": ". Ducks are generally smaller and shorter-necked than " }, { "self_ref": "#/texts/271", @@ -10326,8 +10326,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "swans", - "text": "swans", + "orig": "swans ", + "text": "swans ", "hyperlink": "/wiki/Swan" }, { @@ -10339,8 +10339,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/273", @@ -10364,8 +10364,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", which are members of the same family. Divided among several subfamilies, they are a", - "text": ", which are members of the same family. Divided among several subfamilies, they are a" + "orig": ", which are members of the same family. Divided among several subfamilies, they are a ", + "text": ", which are members of the same family. Divided among several subfamilies, they are a " }, { "self_ref": "#/texts/275", @@ -10389,8 +10389,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; they do not represent a", - "text": "; they do not represent a" + "orig": "; they do not represent a ", + "text": "; they do not represent a " }, { "self_ref": "#/texts/277", @@ -10401,8 +10401,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "monophyletic group", - "text": "monophyletic group", + "orig": "monophyletic group ", + "text": "monophyletic group ", "hyperlink": "/wiki/Monophyletic_group" }, { @@ -10414,8 +10414,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly", - "text": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly" + "orig": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly ", + "text": "(the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly " }, { "self_ref": "#/texts/279", @@ -10451,8 +10451,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as", - "text": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as" + "orig": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as ", + "text": "Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as " }, { "self_ref": "#/texts/282", @@ -10463,8 +10463,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "loons", - "text": "loons", + "orig": "loons ", + "text": "loons ", "hyperlink": "/wiki/Loon" }, { @@ -10476,8 +10476,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or divers,", - "text": "or divers," + "orig": "or divers, ", + "text": "or divers, " }, { "self_ref": "#/texts/284", @@ -10501,8 +10501,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/286", @@ -10513,8 +10513,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gallinules", - "text": "gallinules", + "orig": "gallinules ", + "text": "gallinules ", "hyperlink": "/wiki/Gallinule" }, { @@ -10526,8 +10526,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/288", @@ -10598,8 +10598,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The word", - "text": "The word" + "orig": "The word ", + "text": "The word " }, { "self_ref": "#/texts/292", @@ -10610,8 +10610,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "duck", - "text": "duck", + "orig": "duck ", + "text": "duck ", "formatting": { "bold": false, "italic": true, @@ -10629,8 +10629,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "comes from", - "text": "comes from" + "orig": "comes from ", + "text": "comes from " }, { "self_ref": "#/texts/294", @@ -10641,8 +10641,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Old English", - "text": "Old English", + "orig": "Old English ", + "text": "Old English ", "hyperlink": "/wiki/Old_English" }, { @@ -10654,8 +10654,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dūce", - "text": "dūce", + "orig": "dūce ", + "text": "dūce ", "formatting": { "bold": false, "italic": true, @@ -10685,8 +10685,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dūcan", - "text": "dūcan", + "orig": "dūcan ", + "text": "dūcan ", "formatting": { "bold": false, "italic": true, @@ -10704,8 +10704,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the", - "text": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the" + "orig": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the ", + "text": "'to duck, bend down low as if to get under something, or dive', because of the way many species in the " }, { "self_ref": "#/texts/299", @@ -10716,8 +10716,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "dabbling duck", - "text": "dabbling duck", + "orig": "dabbling duck ", + "text": "dabbling duck ", "hyperlink": "/wiki/Dabbling_duck" }, { @@ -10729,8 +10729,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "group feed by upending; compare with", - "text": "group feed by upending; compare with" + "orig": "group feed by upending; compare with ", + "text": "group feed by upending; compare with " }, { "self_ref": "#/texts/301", @@ -10741,8 +10741,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dutch", - "text": "Dutch", + "orig": "Dutch ", + "text": "Dutch ", "hyperlink": "/wiki/Dutch_language" }, { @@ -10754,8 +10754,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "duiken", - "text": "duiken", + "orig": "duiken ", + "text": "duiken ", "formatting": { "bold": false, "italic": true, @@ -10773,8 +10773,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/304", @@ -10785,8 +10785,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "German", - "text": "German", + "orig": "German ", + "text": "German ", "hyperlink": "/wiki/German_language" }, { @@ -10798,8 +10798,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "tauchen", - "text": "tauchen", + "orig": "tauchen ", + "text": "tauchen ", "formatting": { "bold": false, "italic": true, @@ -10841,8 +10841,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This word replaced Old English", - "text": "This word replaced Old English" + "orig": "This word replaced Old English ", + "text": "This word replaced Old English " }, { "self_ref": "#/texts/309", @@ -10853,8 +10853,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ened", - "text": "ened", + "orig": "ened ", + "text": "ened ", "formatting": { "bold": false, "italic": true, @@ -10884,8 +10884,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ænid", - "text": "ænid", + "orig": "ænid ", + "text": "ænid ", "formatting": { "bold": false, "italic": true, @@ -10903,8 +10903,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'duck', possibly to avoid confusion with other words, such as", - "text": "'duck', possibly to avoid confusion with other words, such as" + "orig": "'duck', possibly to avoid confusion with other words, such as ", + "text": "'duck', possibly to avoid confusion with other words, such as " }, { "self_ref": "#/texts/313", @@ -10915,8 +10915,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ende", - "text": "ende", + "orig": "ende ", + "text": "ende ", "formatting": { "bold": false, "italic": true, @@ -10934,8 +10934,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'end' with similar forms. Other Germanic languages still have similar words for", - "text": "'end' with similar forms. Other Germanic languages still have similar words for" + "orig": "'end' with similar forms. Other Germanic languages still have similar words for ", + "text": "'end' with similar forms. Other Germanic languages still have similar words for " }, { "self_ref": "#/texts/315", @@ -10965,8 +10965,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", for example, Dutch", - "text": ", for example, Dutch" + "orig": ", for example, Dutch ", + "text": ", for example, Dutch " }, { "self_ref": "#/texts/317", @@ -10996,8 +10996,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", German", - "text": ", German" + "orig": ", German ", + "text": ", German " }, { "self_ref": "#/texts/319", @@ -11008,8 +11008,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ente", - "text": "Ente", + "orig": "Ente ", + "text": "Ente ", "formatting": { "bold": false, "italic": true, @@ -11027,8 +11027,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/321", @@ -11039,8 +11039,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Norwegian", - "text": "Norwegian", + "orig": "Norwegian ", + "text": "Norwegian ", "hyperlink": "/wiki/Norwegian_language" }, { @@ -11071,8 +11071,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The word", - "text": ". The word" + "orig": ". The word ", + "text": ". The word " }, { "self_ref": "#/texts/324", @@ -11083,8 +11083,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ened", - "text": "ened", + "orig": "ened ", + "text": "ened ", "formatting": { "bold": false, "italic": true, @@ -11114,8 +11114,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ænid", - "text": "ænid", + "orig": "ænid ", + "text": "ænid ", "formatting": { "bold": false, "italic": true, @@ -11133,8 +11133,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was inherited from", - "text": "was inherited from" + "orig": "was inherited from ", + "text": "was inherited from " }, { "self_ref": "#/texts/328", @@ -11158,8 +11158,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ";", - "text": ";" + "orig": "; ", + "text": "; " }, { "self_ref": "#/texts/330", @@ -11170,8 +11170,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "cf.", - "text": "cf.", + "orig": "cf. ", + "text": "cf. ", "hyperlink": "/wiki/Cf." }, { @@ -11183,8 +11183,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Latin", - "text": "Latin", + "orig": "Latin ", + "text": "Latin ", "hyperlink": "/wiki/Latin" }, { @@ -11196,8 +11196,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "anas", - "text": "anas", + "orig": "anas ", + "text": "anas ", "formatting": { "bold": false, "italic": true, @@ -11215,8 +11215,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"duck\",", - "text": "\"duck\"," + "orig": "\"duck\", ", + "text": "\"duck\", " }, { "self_ref": "#/texts/334", @@ -11227,8 +11227,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Lithuanian", - "text": "Lithuanian", + "orig": "Lithuanian ", + "text": "Lithuanian ", "hyperlink": "/wiki/Lithuanian_language" }, { @@ -11240,8 +11240,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ántis", - "text": "ántis", + "orig": "ántis ", + "text": "ántis ", "formatting": { "bold": false, "italic": true, @@ -11259,8 +11259,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'duck',", - "text": "'duck'," + "orig": "'duck', ", + "text": "'duck', " }, { "self_ref": "#/texts/337", @@ -11271,8 +11271,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ancient Greek", - "text": "Ancient Greek", + "orig": "Ancient Greek ", + "text": "Ancient Greek ", "hyperlink": "/wiki/Ancient_Greek_language" }, { @@ -11284,8 +11284,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "νῆσσα / νῆττα (", - "text": "νῆσσα / νῆττα (" + "orig": "νῆσσα /νῆττα (", + "text": "νῆσσα /νῆττα (" }, { "self_ref": "#/texts/339", @@ -11296,8 +11296,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "nēssa", - "text": "nēssa", + "orig": "nēssa ", + "text": "nēssa ", "formatting": { "bold": false, "italic": true, @@ -11346,8 +11346,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ") 'duck', and", - "text": ") 'duck', and" + "orig": ") 'duck', and ", + "text": ") 'duck', and " }, { "self_ref": "#/texts/343", @@ -11358,8 +11358,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sanskrit", - "text": "Sanskrit", + "orig": "Sanskrit ", + "text": "Sanskrit ", "hyperlink": "/wiki/Sanskrit" }, { @@ -11371,8 +11371,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ātí", - "text": "ātí", + "orig": "ātí ", + "text": "ātí ", "formatting": { "bold": false, "italic": true, @@ -11414,8 +11414,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 1 ]", - "text": "[ 1 ]", + "orig": "[1] ", + "text": "[1] ", "formatting": { "bold": false, "italic": false, @@ -11446,8 +11446,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 2 ]", - "text": "[ 2 ]", + "orig": "[2] ", + "text": "[2] ", "formatting": { "bold": false, "italic": false, @@ -11478,8 +11478,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A male is called a", - "text": "A male is called a" + "orig": "A male is called a ", + "text": "A male is called a " }, { "self_ref": "#/texts/352", @@ -11490,8 +11490,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "drake", - "text": "drake", + "orig": "drake ", + "text": "drake ", "hyperlink": "https://en.wiktionary.org/wiki/drake" }, { @@ -11503,8 +11503,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the female is called a duck, or in", - "text": "and the female is called a duck, or in" + "orig": "and the female is called a duck, or in ", + "text": "and the female is called a duck, or in " }, { "self_ref": "#/texts/354", @@ -11515,8 +11515,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ornithology", - "text": "ornithology", + "orig": "ornithology ", + "text": "ornithology ", "hyperlink": "/wiki/Ornithology" }, { @@ -11540,8 +11540,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 3 ]", - "text": "[ 3 ]", + "orig": "[3]", + "text": "[3]", "formatting": { "bold": false, "italic": false, @@ -11560,8 +11560,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 4 ]", - "text": "[ 4 ]", + "orig": "[4]", + "text": "[4]", "formatting": { "bold": false, "italic": false, @@ -11580,8 +11580,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Male mallard .", - "text": "Male mallard ." + "orig": "Male mallard.", + "text": "Male mallard." }, { "self_ref": "#/texts/359", @@ -11592,8 +11592,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Wood ducks .", - "text": "Wood ducks ." + "orig": "Wood ducks.", + "text": "Wood ducks." }, { "self_ref": "#/texts/360", @@ -11630,8 +11630,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All ducks belong to the", - "text": "All ducks belong to the" + "orig": "All ducks belong to the ", + "text": "All ducks belong to the " }, { "self_ref": "#/texts/362", @@ -11642,8 +11642,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "biological order", - "text": "biological order", + "orig": "biological order ", + "text": "biological order ", "hyperlink": "/wiki/Order_(biology)" }, { @@ -11668,8 +11668,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", a group that contains the ducks, geese and swans, as well as the", - "text": ", a group that contains the ducks, geese and swans, as well as the" + "orig": ", a group that contains the ducks, geese and swans, as well as the ", + "text": ", a group that contains the ducks, geese and swans, as well as the " }, { "self_ref": "#/texts/365", @@ -11693,8 +11693,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and the", - "text": ", and the" + "orig": ", and the ", + "text": ", and the " }, { "self_ref": "#/texts/367", @@ -11730,8 +11730,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11750,8 +11750,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All except the screamers belong to the", - "text": "All except the screamers belong to the" + "orig": "All except the screamers belong to the ", + "text": "All except the screamers belong to the " }, { "self_ref": "#/texts/371", @@ -11762,8 +11762,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "biological family", - "text": "biological family", + "orig": "biological family ", + "text": "biological family ", "hyperlink": "/wiki/Family_(biology)" }, { @@ -11800,8 +11800,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11832,8 +11832,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -11852,8 +11852,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Some base their decisions on", - "text": "Some base their decisions on" + "orig": "Some base their decisions on ", + "text": "Some base their decisions on " }, { "self_ref": "#/texts/378", @@ -11889,8 +11889,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 6 ]", - "text": "[ 6 ]", + "orig": "[6]", + "text": "[6]", "formatting": { "bold": false, "italic": false, @@ -11909,8 +11909,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 7 ]", - "text": "[ 7 ]", + "orig": "[7] ", + "text": "[7] ", "formatting": { "bold": false, "italic": false, @@ -11941,8 +11941,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 8 ]", - "text": "[ 8 ]", + "orig": "[8]", + "text": "[8]", "formatting": { "bold": false, "italic": false, @@ -11961,8 +11961,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -11981,8 +11981,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The significant level of", - "text": "The significant level of" + "orig": "The significant level of ", + "text": "The significant level of " }, { "self_ref": "#/texts/386", @@ -11993,8 +11993,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "hybridisation", - "text": "hybridisation", + "orig": "hybridisation ", + "text": "hybridisation ", "hyperlink": "/wiki/Hybrid_(biology)" }, { @@ -12018,8 +12018,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9]", + "text": "[9]", "formatting": { "bold": false, "italic": false, @@ -12062,8 +12062,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 10 ]", - "text": "[ 10 ]", + "orig": "[10] ", + "text": "[10] ", "formatting": { "bold": false, "italic": false, @@ -12094,8 +12094,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 11 ]", - "text": "[ 11 ]", + "orig": "[11] ", + "text": "[11] ", "formatting": { "bold": false, "italic": false, @@ -12126,8 +12126,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 12 ]", - "text": "[ 12 ]", + "orig": "[12] ", + "text": "[12] ", "formatting": { "bold": false, "italic": false, @@ -12158,8 +12158,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 13 ]", - "text": "[ 13 ]", + "orig": "[13] ", + "text": "[13] ", "formatting": { "bold": false, "italic": false, @@ -12190,8 +12190,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 14 ]", - "text": "[ 14 ]", + "orig": "[14]", + "text": "[14]", "formatting": { "bold": false, "italic": false, @@ -12210,8 +12210,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The", - "text": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The" + "orig": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The ", + "text": "A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The " }, { "self_ref": "#/texts/401", @@ -12222,8 +12222,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "whistling ducks", - "text": "whistling ducks", + "orig": "whistling ducks ", + "text": "whistling ducks ", "hyperlink": "/wiki/Whistling_duck" }, { @@ -12247,8 +12247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12279,8 +12279,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9]", + "text": "[9]", "formatting": { "bold": false, "italic": false, @@ -12299,8 +12299,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 16 ]", - "text": "[ 16 ]", + "orig": "[16] ", + "text": "[16] ", "formatting": { "bold": false, "italic": false, @@ -12319,8 +12319,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/408", @@ -12331,8 +12331,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "freckled duck", - "text": "freckled duck", + "orig": "freckled duck ", + "text": "freckled duck ", "hyperlink": "/wiki/Freckled_duck" }, { @@ -12356,8 +12356,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12388,8 +12388,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12408,8 +12408,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/414", @@ -12420,8 +12420,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "shelducks", - "text": "shelducks", + "orig": "shelducks ", + "text": "shelducks ", "hyperlink": "/wiki/Shelduck" }, { @@ -12445,8 +12445,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12477,8 +12477,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 17 ]", - "text": "[ 17 ]", + "orig": "[17] ", + "text": "[17] ", "formatting": { "bold": false, "italic": false, @@ -12497,8 +12497,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "while the", - "text": "while the" + "orig": "while the ", + "text": "while the " }, { "self_ref": "#/texts/420", @@ -12509,8 +12509,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "steamer ducks", - "text": "steamer ducks", + "orig": "steamer ducks ", + "text": "steamer ducks ", "hyperlink": "/wiki/Steamer_duck" }, { @@ -12534,8 +12534,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12566,8 +12566,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12586,8 +12586,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/426", @@ -12598,8 +12598,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "perching ducks", - "text": "perching ducks", + "orig": "perching ducks ", + "text": "perching ducks ", "hyperlink": "/wiki/Perching_duck" }, { @@ -12623,8 +12623,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 9 ]", - "text": "[ 9 ]", + "orig": "[9] ", + "text": "[9] ", "formatting": { "bold": false, "italic": false, @@ -12643,8 +12643,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/430", @@ -12655,8 +12655,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "torrent duck", - "text": "torrent duck", + "orig": "torrent duck ", + "text": "torrent duck ", "hyperlink": "/wiki/Torrent_duck" }, { @@ -12680,8 +12680,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12712,8 +12712,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 18 ]", - "text": "[ 18 ]", + "orig": "[18] ", + "text": "[18] ", "formatting": { "bold": false, "italic": false, @@ -12732,8 +12732,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/436", @@ -12744,8 +12744,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "pink-eared duck", - "text": "pink-eared duck", + "orig": "pink-eared duck ", + "text": "pink-eared duck ", "hyperlink": "/wiki/Pink-eared_duck" }, { @@ -12769,8 +12769,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15] ", + "text": "[15] ", "formatting": { "bold": false, "italic": false, @@ -12801,8 +12801,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 19 ]", - "text": "[ 19 ]", + "orig": "[19] ", + "text": "[19] ", "formatting": { "bold": false, "italic": false, @@ -12833,8 +12833,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 15 ]", - "text": "[ 15 ]", + "orig": "[15]", + "text": "[15]", "formatting": { "bold": false, "italic": false, @@ -12888,8 +12888,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The overall", - "text": "The overall" + "orig": "The overall ", + "text": "The overall " }, { "self_ref": "#/texts/446", @@ -12900,8 +12900,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "body plan", - "text": "body plan", + "orig": "body plan ", + "text": "body plan ", "hyperlink": "/wiki/Body_plan" }, { @@ -12913,8 +12913,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The", - "text": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The" + "orig": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The ", + "text": "of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The " }, { "self_ref": "#/texts/448", @@ -12925,8 +12925,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "bill", - "text": "bill", + "orig": "bill ", + "text": "bill ", "hyperlink": "/wiki/Beak" }, { @@ -12938,8 +12938,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is usually broad and contains serrated", - "text": "is usually broad and contains serrated" + "orig": "is usually broad and contains serrated ", + "text": "is usually broad and contains serrated " }, { "self_ref": "#/texts/450", @@ -12963,8 +12963,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the", - "text": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the" + "orig": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the ", + "text": ", which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the " }, { "self_ref": "#/texts/452", @@ -12975,8 +12975,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "flight", - "text": "flight", + "orig": "flight ", + "text": "flight ", "hyperlink": "/wiki/Bird_flight" }, { @@ -12988,8 +12988,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of", - "text": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of" + "orig": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of ", + "text": "of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of " }, { "self_ref": "#/texts/454", @@ -13000,8 +13000,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "steamer duck", - "text": "steamer duck", + "orig": "steamer duck ", + "text": "steamer duck ", "hyperlink": "/wiki/Steamer_duck" }, { @@ -13013,8 +13013,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are almost flightless, however. Many species of duck are temporarily flightless while", - "text": "are almost flightless, however. Many species of duck are temporarily flightless while" + "orig": "are almost flightless, however. Many species of duck are temporarily flightless while ", + "text": "are almost flightless, however. Many species of duck are temporarily flightless while " }, { "self_ref": "#/texts/456", @@ -13038,8 +13038,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes", - "text": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes" + "orig": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes ", + "text": "; they seek out protected habitat with good food supplies during this period. This moult typically precedes " }, { "self_ref": "#/texts/458", @@ -13075,8 +13075,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The drakes of northern species often have extravagant", - "text": "The drakes of northern species often have extravagant" + "orig": "The drakes of northern species often have extravagant ", + "text": "The drakes of northern species often have extravagant " }, { "self_ref": "#/texts/461", @@ -13100,8 +13100,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", but that is", - "text": ", but that is" + "orig": ", but that is ", + "text": ", but that is " }, { "self_ref": "#/texts/463", @@ -13112,8 +13112,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "moulted", - "text": "moulted", + "orig": "moulted ", + "text": "moulted ", "hyperlink": "/wiki/Moult" }, { @@ -13125,8 +13125,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less", - "text": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less" + "orig": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less ", + "text": "in summer to give a more female-like appearance, the \"eclipse\" plumage. Southern resident species typically show less " }, { "self_ref": "#/texts/465", @@ -13150,8 +13150,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", although there are exceptions such as the", - "text": ", although there are exceptions such as the" + "orig": ", although there are exceptions such as the ", + "text": ", although there are exceptions such as the " }, { "self_ref": "#/texts/467", @@ -13162,8 +13162,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "paradise shelduck", - "text": "paradise shelduck", + "orig": "paradise shelduck ", + "text": "paradise shelduck ", "hyperlink": "/wiki/Paradise_shelduck" }, { @@ -13175,8 +13175,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of", - "text": "of" + "orig": "of ", + "text": "of " }, { "self_ref": "#/texts/469", @@ -13241,8 +13241,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "See also:", - "text": "See also:" + "orig": "See also: ", + "text": "See also: " }, { "self_ref": "#/texts/473", @@ -13266,8 +13266,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Flying steamer ducks in Ushuaia , Argentina", - "text": "Flying steamer ducks in Ushuaia , Argentina" + "orig": "Flying steamer ducks in Ushuaia, Argentina", + "text": "Flying steamer ducks in Ushuaia, Argentina" }, { "self_ref": "#/texts/475", @@ -13278,8 +13278,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have a", - "text": "Ducks have a" + "orig": "Ducks have a ", + "text": "Ducks have a " }, { "self_ref": "#/texts/476", @@ -13315,8 +13315,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 5 ]", - "text": "[ 5 ]", + "orig": "[5] ", + "text": "[5] ", "formatting": { "bold": false, "italic": false, @@ -13335,8 +13335,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Several species manage to live on subantarctic islands, including", - "text": "Several species manage to live on subantarctic islands, including" + "orig": "Several species manage to live on subantarctic islands, including ", + "text": "Several species manage to live on subantarctic islands, including " }, { "self_ref": "#/texts/480", @@ -13347,8 +13347,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "South Georgia", - "text": "South Georgia", + "orig": "South Georgia ", + "text": "South Georgia ", "hyperlink": "/wiki/South_Georgia_and_the_South_Sandwich_Islands" }, { @@ -13360,8 +13360,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the", - "text": "and the" + "orig": "and the ", + "text": "and the " }, { "self_ref": "#/texts/482", @@ -13397,8 +13397,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 20 ]", - "text": "[ 20 ]", + "orig": "[20] ", + "text": "[20] ", "formatting": { "bold": false, "italic": false, @@ -13417,8 +13417,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have reached a number of isolated oceanic islands, including the", - "text": "Ducks have reached a number of isolated oceanic islands, including the" + "orig": "Ducks have reached a number of isolated oceanic islands, including the ", + "text": "Ducks have reached a number of isolated oceanic islands, including the " }, { "self_ref": "#/texts/486", @@ -13442,8 +13442,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/488", @@ -13454,8 +13454,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Micronesia", - "text": "Micronesia", + "orig": "Micronesia ", + "text": "Micronesia ", "hyperlink": "/wiki/Micronesia" }, { @@ -13467,8 +13467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the", - "text": "and the" + "orig": "and the ", + "text": "and the " }, { "self_ref": "#/texts/490", @@ -13492,8 +13492,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", where they are often", - "text": ", where they are often" + "orig": ", where they are often ", + "text": ", where they are often " }, { "self_ref": "#/texts/492", @@ -13504,8 +13504,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "vagrants", - "text": "vagrants", + "orig": "vagrants ", + "text": "vagrants ", "hyperlink": "/wiki/Glossary_of_bird_terms#vagrants" }, { @@ -13517,8 +13517,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and less often", - "text": "and less often" + "orig": "and less often ", + "text": "and less often " }, { "self_ref": "#/texts/494", @@ -13554,8 +13554,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 21 ]", - "text": "[ 21 ]", + "orig": "[21]", + "text": "[21]", "formatting": { "bold": false, "italic": false, @@ -13574,8 +13574,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 22 ]", - "text": "[ 22 ]", + "orig": "[22] ", + "text": "[22] ", "formatting": { "bold": false, "italic": false, @@ -13594,8 +13594,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A handful are", - "text": "A handful are" + "orig": "A handful are ", + "text": "A handful are " }, { "self_ref": "#/texts/499", @@ -13606,8 +13606,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "endemic", - "text": "endemic", + "orig": "endemic ", + "text": "endemic ", "hyperlink": "/wiki/Endemic" }, { @@ -13631,8 +13631,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 21 ]", - "text": "[ 21 ]", + "orig": "[21]", + "text": "[21]", "formatting": { "bold": false, "italic": false, @@ -13651,8 +13651,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Female mallard in Cornwall , England", - "text": "Female mallard in Cornwall , England" + "orig": "Female mallard in Cornwall, England", + "text": "Female mallard in Cornwall, England" }, { "self_ref": "#/texts/503", @@ -13675,8 +13675,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 23 ]", - "text": "[ 23 ]", + "orig": "[23]", + "text": "[23]", "formatting": { "bold": false, "italic": false, @@ -13783,8 +13783,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks eat food sources such as", - "text": "Ducks eat food sources such as" + "orig": "Ducks eat food sources such as ", + "text": "Ducks eat food sources such as " }, { "self_ref": "#/texts/510", @@ -13808,8 +13808,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", aquatic plants, fish, insects, small amphibians, worms, and small", - "text": ", aquatic plants, fish, insects, small amphibians, worms, and small" + "orig": ", aquatic plants, fish, insects, small amphibians, worms, and small ", + "text": ", aquatic plants, fish, insects, small amphibians, worms, and small " }, { "self_ref": "#/texts/512", @@ -13845,8 +13845,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dabbling ducks", - "text": "Dabbling ducks", + "orig": "Dabbling ducks ", + "text": "Dabbling ducks ", "hyperlink": "/wiki/Dabbling_duck" }, { @@ -13870,8 +13870,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 24 ]", - "text": "[ 24 ]", + "orig": "[24] ", + "text": "[24] ", "formatting": { "bold": false, "italic": false, @@ -13890,8 +13890,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Along the edge of the bill, there is a comb-like structure called a", - "text": "Along the edge of the bill, there is a comb-like structure called a" + "orig": "Along the edge of the bill, there is a comb-like structure called a ", + "text": "Along the edge of the bill, there is a comb-like structure called a " }, { "self_ref": "#/texts/518", @@ -13927,8 +13927,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Diving ducks", - "text": "Diving ducks", + "orig": "Diving ducks ", + "text": "Diving ducks ", "hyperlink": "/wiki/Diving_duck" }, { @@ -13940,8 +13940,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/522", @@ -13952,8 +13952,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "sea ducks", - "text": "sea ducks", + "orig": "sea ducks ", + "text": "sea ducks ", "hyperlink": "/wiki/Sea_duck" }, { @@ -13977,8 +13977,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A few specialized species such as the", - "text": "A few specialized species such as the" + "orig": "A few specialized species such as the ", + "text": "A few specialized species such as the " }, { "self_ref": "#/texts/525", @@ -13989,8 +13989,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mergansers", - "text": "mergansers", + "orig": "mergansers ", + "text": "mergansers ", "hyperlink": "/wiki/Merganser" }, { @@ -14014,8 +14014,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The others have the characteristic wide flat bill adapted to", - "text": "The others have the characteristic wide flat bill adapted to" + "orig": "The others have the characteristic wide flat bill adapted to ", + "text": "The others have the characteristic wide flat bill adapted to " }, { "self_ref": "#/texts/528", @@ -14039,8 +14039,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no", - "text": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no" + "orig": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no ", + "text": "-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no " }, { "self_ref": "#/texts/530", @@ -14076,8 +14076,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The Guardian", - "text": "The Guardian", + "orig": "The Guardian ", + "text": "The Guardian ", "formatting": { "bold": false, "italic": true, @@ -14096,8 +14096,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "published an article advising that ducks should not be fed with bread because it", - "text": "published an article advising that ducks should not be fed with bread because it" + "orig": "published an article advising that ducks should not be fed with bread because it ", + "text": "published an article advising that ducks should not be fed with bread because it " }, { "self_ref": "#/texts/534", @@ -14108,8 +14108,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "damages the health of the ducks", - "text": "damages the health of the ducks", + "orig": "damages the health of the ducks ", + "text": "damages the health of the ducks ", "hyperlink": "/wiki/Angel_wing" }, { @@ -14133,8 +14133,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 25 ]", - "text": "[ 25 ]", + "orig": "[25]", + "text": "[25]", "formatting": { "bold": false, "italic": false, @@ -14185,8 +14185,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks generally", - "text": "Ducks generally" + "orig": "Ducks generally ", + "text": "Ducks generally " }, { "self_ref": "#/texts/540", @@ -14222,8 +14222,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 26 ]", - "text": "[ 26 ]", + "orig": "[26] ", + "text": "[26] ", "formatting": { "bold": false, "italic": false, @@ -14254,8 +14254,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 27 ]", - "text": "[ 27 ]", + "orig": "[27] ", + "text": "[27] ", "formatting": { "bold": false, "italic": false, @@ -14299,8 +14299,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "/summer or wet seasons). Ducks also tend to make a", - "text": "/summer or wet seasons). Ducks also tend to make a" + "orig": "/summer or wet seasons). Ducks also tend to make a ", + "text": "/summer or wet seasons). Ducks also tend to make a " }, { "self_ref": "#/texts/548", @@ -14311,8 +14311,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "nest", - "text": "nest", + "orig": "nest ", + "text": "nest ", "hyperlink": "/wiki/Bird_nest" }, { @@ -14324,8 +14324,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed", - "text": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed" + "orig": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed ", + "text": "before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed " }, { "self_ref": "#/texts/550", @@ -14361,8 +14361,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 28 ]", - "text": "[ 28 ]", + "orig": "[28]", + "text": "[28]", "formatting": { "bold": false, "italic": false, @@ -14401,8 +14401,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Female", - "text": "Female" + "orig": "Female ", + "text": "Female " }, { "self_ref": "#/texts/555", @@ -14413,8 +14413,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mallard", - "text": "mallard", + "orig": "mallard ", + "text": "mallard ", "hyperlink": "/wiki/Mallard" }, { @@ -14426,8 +14426,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ducks (as well as several other species in the genus", - "text": "ducks (as well as several other species in the genus" + "orig": "ducks (as well as several other species in the genus ", + "text": "ducks (as well as several other species in the genus " }, { "self_ref": "#/texts/557", @@ -14457,8 +14457,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", such as the", - "text": ", such as the" + "orig": ", such as the ", + "text": ", such as the " }, { "self_ref": "#/texts/559", @@ -14469,8 +14469,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "American", - "text": "American", + "orig": "American ", + "text": "American ", "hyperlink": "/wiki/American_black_duck" }, { @@ -14482,8 +14482,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/561", @@ -14507,8 +14507,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/563", @@ -14532,8 +14532,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/565", @@ -14544,8 +14544,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "northern pintail", - "text": "northern pintail", + "orig": "northern pintail ", + "text": "northern pintail ", "hyperlink": "/wiki/Northern_pintail" }, { @@ -14557,8 +14557,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/567", @@ -14594,8 +14594,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 29 ]", - "text": "[ 29 ]", + "orig": "[29]", + "text": "[29]", "formatting": { "bold": false, "italic": false, @@ -14653,8 +14653,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "]", - "text": "]", + "orig": "] ", + "text": "] ", "formatting": { "bold": false, "italic": false, @@ -14684,8 +14684,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 30 ]", - "text": "[ 30 ]", + "orig": "[30] ", + "text": "[30] ", "formatting": { "bold": false, "italic": false, @@ -14704,8 +14704,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In general, ducks make a range of", - "text": "In general, ducks make a range of" + "orig": "In general, ducks make a range of ", + "text": "In general, ducks make a range of " }, { "self_ref": "#/texts/576", @@ -14729,8 +14729,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", including whistles, cooing, yodels and grunts. For example, the", - "text": ", including whistles, cooing, yodels and grunts. For example, the" + "orig": ", including whistles, cooing, yodels and grunts. For example, the ", + "text": ", including whistles, cooing, yodels and grunts. For example, the " }, { "self_ref": "#/texts/578", @@ -14741,8 +14741,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "scaup", - "text": "scaup", + "orig": "scaup ", + "text": "scaup ", "hyperlink": "/wiki/Scaup" }, { @@ -14754,8 +14754,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "– which are", - "text": "- which are" + "orig": "– which are ", + "text": "- which are " }, { "self_ref": "#/texts/580", @@ -14766,8 +14766,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "diving ducks", - "text": "diving ducks", + "orig": "diving ducks ", + "text": "diving ducks ", "hyperlink": "/wiki/Diving_duck" }, { @@ -14791,8 +14791,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A common", - "text": "A common" + "orig": "A common ", + "text": "A common " }, { "self_ref": "#/texts/583", @@ -14803,8 +14803,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "urban legend", - "text": "urban legend", + "orig": "urban legend ", + "text": "urban legend ", "hyperlink": "/wiki/Urban_legend" }, { @@ -14816,8 +14816,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the", - "text": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the" + "orig": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the ", + "text": "claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the " }, { "self_ref": "#/texts/585", @@ -14828,8 +14828,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "University of Salford", - "text": "University of Salford", + "orig": "University of Salford ", + "text": "University of Salford ", "hyperlink": "/wiki/University_of_Salford" }, { @@ -14841,8 +14841,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in 2003 as part of the", - "text": "in 2003 as part of the" + "orig": "in 2003 as part of the ", + "text": "in 2003 as part of the " }, { "self_ref": "#/texts/587", @@ -14878,8 +14878,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 31 ]", - "text": "[ 31 ]", + "orig": "[31] ", + "text": "[31] ", "formatting": { "bold": false, "italic": false, @@ -14898,8 +14898,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "It was also debunked in", - "text": "It was also debunked in" + "orig": "It was also debunked in ", + "text": "It was also debunked in " }, { "self_ref": "#/texts/591", @@ -14910,8 +14910,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "one of the earlier episodes", - "text": "one of the earlier episodes", + "orig": "one of the earlier episodes ", + "text": "one of the earlier episodes ", "hyperlink": "/wiki/MythBusters_(2003_season)#Does_a_Duck's_Quack_Echo?" }, { @@ -14923,8 +14923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "of the popular Discovery Channel television show", - "text": "of the popular Discovery Channel television show" + "orig": "of the popular Discovery Channel television show ", + "text": "of the popular Discovery Channel television show " }, { "self_ref": "#/texts/593", @@ -14967,8 +14967,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 32 ]", - "text": "[ 32 ]", + "orig": "[32]", + "text": "[32]", "formatting": { "bold": false, "italic": false, @@ -15023,8 +15023,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like", - "text": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like" + "orig": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like ", + "text": "Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like " }, { "self_ref": "#/texts/599", @@ -15048,8 +15048,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/601", @@ -15073,8 +15073,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", predatory", - "text": ", predatory" + "orig": ", predatory ", + "text": ", predatory " }, { "self_ref": "#/texts/603", @@ -15085,8 +15085,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "testudines", - "text": "testudines", + "orig": "testudines ", + "text": "testudines ", "hyperlink": "/wiki/Testudines" }, { @@ -15098,8 +15098,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "such as the", - "text": "such as the" + "orig": "such as the ", + "text": "such as the " }, { "self_ref": "#/texts/605", @@ -15123,8 +15123,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and other aquatic hunters, including fish-eating birds such as", - "text": ", and other aquatic hunters, including fish-eating birds such as" + "orig": ", and other aquatic hunters, including fish-eating birds such as ", + "text": ", and other aquatic hunters, including fish-eating birds such as " }, { "self_ref": "#/texts/607", @@ -15148,8 +15148,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as", - "text": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as" + "orig": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as ", + "text": ". Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as " }, { "self_ref": "#/texts/609", @@ -15173,8 +15173,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", or large birds, such as", - "text": ", or large birds, such as" + "orig": ", or large birds, such as ", + "text": ", or large birds, such as " }, { "self_ref": "#/texts/611", @@ -15185,8 +15185,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "hawks", - "text": "hawks", + "orig": "hawks ", + "text": "hawks ", "hyperlink": "/wiki/Hawk" }, { @@ -15198,8 +15198,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or", - "text": "or" + "orig": "or ", + "text": "or " }, { "self_ref": "#/texts/613", @@ -15235,8 +15235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American", - "text": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American" + "orig": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American ", + "text": "Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American " }, { "self_ref": "#/texts/616", @@ -15247,8 +15247,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "muskie", - "text": "muskie", + "orig": "muskie ", + "text": "muskie ", "hyperlink": "/wiki/Muskellunge" }, { @@ -15260,8 +15260,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the European", - "text": "and the European" + "orig": "and the European ", + "text": "and the European " }, { "self_ref": "#/texts/618", @@ -15285,8 +15285,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". In flight, ducks are safe from all but a few predators such as humans and the", - "text": ". In flight, ducks are safe from all but a few predators such as humans and the" + "orig": ". In flight, ducks are safe from all but a few predators such as humans and the ", + "text": ". In flight, ducks are safe from all but a few predators such as humans and the " }, { "self_ref": "#/texts/620", @@ -15371,8 +15371,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Main article:", - "text": "Main article:" + "orig": "Main article: ", + "text": "Main article: " }, { "self_ref": "#/texts/625", @@ -15396,8 +15396,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Humans have hunted ducks since prehistoric times. Excavations of", - "text": "Humans have hunted ducks since prehistoric times. Excavations of" + "orig": "Humans have hunted ducks since prehistoric times. Excavations of ", + "text": "Humans have hunted ducks since prehistoric times. Excavations of " }, { "self_ref": "#/texts/627", @@ -15408,8 +15408,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "middens", - "text": "middens", + "orig": "middens ", + "text": "middens ", "hyperlink": "/wiki/Midden" }, { @@ -15421,8 +15421,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in California dating to 7800 – 6400", - "text": "in California dating to 7800 - 6400" + "orig": "in California dating to 7800 – 6400 ", + "text": "in California dating to 7800 - 6400 " }, { "self_ref": "#/texts/629", @@ -15433,8 +15433,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "BP", - "text": "BP", + "orig": "BP ", + "text": "BP ", "hyperlink": "/wiki/Before_present" }, { @@ -15458,8 +15458,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 33 ]", - "text": "[ 33 ]", + "orig": "[33] ", + "text": "[33] ", "formatting": { "bold": false, "italic": false, @@ -15478,8 +15478,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks were captured in \"significant numbers\" by", - "text": "Ducks were captured in \"significant numbers\" by" + "orig": "Ducks were captured in \"significant numbers\" by ", + "text": "Ducks were captured in \"significant numbers\" by " }, { "self_ref": "#/texts/633", @@ -15490,8 +15490,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Holocene", - "text": "Holocene", + "orig": "Holocene ", + "text": "Holocene ", "hyperlink": "/wiki/Holocene" }, { @@ -15503,8 +15503,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "inhabitants of the lower", - "text": "inhabitants of the lower" + "orig": "inhabitants of the lower ", + "text": "inhabitants of the lower " }, { "self_ref": "#/texts/635", @@ -15515,8 +15515,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ohio River", - "text": "Ohio River", + "orig": "Ohio River ", + "text": "Ohio River ", "hyperlink": "/wiki/Ohio_River" }, { @@ -15540,8 +15540,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 34 ]", - "text": "[ 34 ]", + "orig": "[34] ", + "text": "[34] ", "formatting": { "bold": false, "italic": false, @@ -15572,8 +15572,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 35 ]", - "text": "[ 35 ]", + "orig": "[35] ", + "text": "[35] ", "formatting": { "bold": false, "italic": false, @@ -15604,8 +15604,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 36 ]", - "text": "[ 36 ]", + "orig": "[36] ", + "text": "[36] ", "formatting": { "bold": false, "italic": false, @@ -15636,8 +15636,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 37 ]", - "text": "[ 37 ]", + "orig": "[37] ", + "text": "[37] ", "formatting": { "bold": false, "italic": false, @@ -15668,8 +15668,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 38 ]", - "text": "[ 38 ]", + "orig": "[38] ", + "text": "[38] ", "formatting": { "bold": false, "italic": false, @@ -15700,8 +15700,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 39 ]", - "text": "[ 39 ]", + "orig": "[39] ", + "text": "[39] ", "formatting": { "bold": false, "italic": false, @@ -15720,8 +15720,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archeological evidence shows that", - "text": "Archeological evidence shows that" + "orig": "Archeological evidence shows that ", + "text": "Archeological evidence shows that " }, { "self_ref": "#/texts/649", @@ -15732,8 +15732,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Māori people", - "text": "Māori people", + "orig": "Māori people ", + "text": "Māori people ", "hyperlink": "/wiki/M%C4%81ori_people" }, { @@ -15745,8 +15745,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in New Zealand hunted the flightless", - "text": "in New Zealand hunted the flightless" + "orig": "in New Zealand hunted the flightless ", + "text": "in New Zealand hunted the flightless " }, { "self_ref": "#/texts/651", @@ -15782,8 +15782,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 40 ]", - "text": "[ 40 ]", + "orig": "[40] ", + "text": "[40] ", "formatting": { "bold": false, "italic": false, @@ -15802,8 +15802,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "A similar end awaited the", - "text": "A similar end awaited the" + "orig": "A similar end awaited the ", + "text": "A similar end awaited the " }, { "self_ref": "#/texts/655", @@ -15839,8 +15839,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 41 ]", - "text": "[ 41 ]", + "orig": "[41] ", + "text": "[41] ", "formatting": { "bold": false, "italic": false, @@ -15871,8 +15871,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 35 ]", - "text": "[ 35 ]", + "orig": "[35]", + "text": "[35]", "formatting": { "bold": false, "italic": false, @@ -15891,8 +15891,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 42 ]", - "text": "[ 42 ]", + "orig": "[42]", + "text": "[42]", "formatting": { "bold": false, "italic": false, @@ -15923,8 +15923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 43 ]", - "text": "[ 43 ]", + "orig": "[43] ", + "text": "[43] ", "formatting": { "bold": false, "italic": false, @@ -15943,8 +15943,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by shooting, or by being trapped using", - "text": "by shooting, or by being trapped using" + "orig": "by shooting, or by being trapped using ", + "text": "by shooting, or by being trapped using " }, { "self_ref": "#/texts/664", @@ -15968,8 +15968,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be", - "text": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be" + "orig": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be ", + "text": ". Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, \"a sitting duck\" has come to mean \"an easy target\". These ducks may be " }, { "self_ref": "#/texts/666", @@ -15980,8 +15980,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "contaminated by pollutants", - "text": "contaminated by pollutants", + "orig": "contaminated by pollutants ", + "text": "contaminated by pollutants ", "hyperlink": "/wiki/Duck_(food)#Pollution" }, { @@ -15993,8 +15993,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "such as", - "text": "such as" + "orig": "such as ", + "text": "such as " }, { "self_ref": "#/texts/668", @@ -16030,8 +16030,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 44 ]", - "text": "[ 44 ]", + "orig": "[44]", + "text": "[44]", "formatting": { "bold": false, "italic": false, @@ -16073,8 +16073,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Main article:", - "text": "Main article:" + "orig": "Main article: ", + "text": "Main article: " }, { "self_ref": "#/texts/673", @@ -16098,8 +16098,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Indian Runner ducks , a common breed of domestic ducks", - "text": "Indian Runner ducks , a common breed of domestic ducks" + "orig": "Indian Runner ducks, a common breed of domestic ducks", + "text": "Indian Runner ducks, a common breed of domestic ducks" }, { "self_ref": "#/texts/675", @@ -16110,8 +16110,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their", - "text": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their" + "orig": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their ", + "text": "Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their " }, { "self_ref": "#/texts/676", @@ -16147,8 +16147,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 45 ]", - "text": "[ 45 ]", + "orig": "[45] ", + "text": "[45] ", "formatting": { "bold": false, "italic": false, @@ -16167,8 +16167,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the", - "text": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the" + "orig": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the ", + "text": "They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the " }, { "self_ref": "#/texts/680", @@ -16179,8 +16179,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "mallard", - "text": "mallard", + "orig": "mallard ", + "text": "mallard ", "hyperlink": "/wiki/Mallard" }, { @@ -16223,8 +16223,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "), apart from the", - "text": "), apart from the" + "orig": "), apart from the ", + "text": "), apart from the " }, { "self_ref": "#/texts/684", @@ -16235,8 +16235,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Muscovy duck", - "text": "Muscovy duck", + "orig": "Muscovy duck ", + "text": "Muscovy duck ", "hyperlink": "/wiki/Muscovy_duck" }, { @@ -16291,8 +16291,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 46 ]", - "text": "[ 46 ]", + "orig": "[46]", + "text": "[46]", "formatting": { "bold": false, "italic": false, @@ -16311,8 +16311,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 47 ]", - "text": "[ 47 ]", + "orig": "[47] ", + "text": "[47] ", "formatting": { "bold": false, "italic": false, @@ -16331,8 +16331,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The", - "text": "The" + "orig": "The ", + "text": "The " }, { "self_ref": "#/texts/691", @@ -16343,8 +16343,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Call duck", - "text": "Call duck", + "orig": "Call duck ", + "text": "Call duck ", "hyperlink": "/wiki/Call_duck" }, { @@ -16368,8 +16368,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 48 ]", - "text": "[ 48 ]", + "orig": "[48]", + "text": "[48]", "formatting": { "bold": false, "italic": false, @@ -16408,8 +16408,8 @@ "content_layer": "body", "label": "caption", "prov": [], - "orig": "Three black-colored ducks in the coat of arms of Maaninka [ 49 ]", - "text": "Three black-colored ducks in the coat of arms of Maaninka [ 49 ]" + "orig": "Three black-colored ducks in the coat of arms of Maaninka[49]", + "text": "Three black-colored ducks in the coat of arms of Maaninka[49]" }, { "self_ref": "#/texts/696", @@ -16420,8 +16420,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks appear on several", - "text": "Ducks appear on several" + "orig": "Ducks appear on several ", + "text": "Ducks appear on several " }, { "self_ref": "#/texts/697", @@ -16445,8 +16445,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", including the coat of arms of", - "text": ", including the coat of arms of" + "orig": ", including the coat of arms of ", + "text": ", including the coat of arms of " }, { "self_ref": "#/texts/699", @@ -16457,8 +16457,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Lubāna", - "text": "Lubāna", + "orig": "Lubāna ", + "text": "Lubāna ", "hyperlink": "/wiki/Lub%C4%81na" }, { @@ -16507,8 +16507,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 50 ]", - "text": "[ 50 ]", + "orig": "[50] ", + "text": "[50] ", "formatting": { "bold": false, "italic": false, @@ -16527,8 +16527,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and the coat of arms of", - "text": "and the coat of arms of" + "orig": "and the coat of arms of ", + "text": "and the coat of arms of " }, { "self_ref": "#/texts/705", @@ -16539,8 +16539,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Föglö", - "text": "Föglö", + "orig": "Föglö ", + "text": "Föglö ", "hyperlink": "/wiki/F%C3%B6gl%C3%B6" }, { @@ -16589,8 +16589,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 51 ]", - "text": "[ 51 ]", + "orig": "[51]", + "text": "[51]", "formatting": { "bold": false, "italic": false, @@ -16629,8 +16629,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In 2002, psychologist", - "text": "In 2002, psychologist" + "orig": "In 2002, psychologist ", + "text": "In 2002, psychologist " }, { "self_ref": "#/texts/712", @@ -16641,8 +16641,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Richard Wiseman", - "text": "Richard Wiseman", + "orig": "Richard Wiseman ", + "text": "Richard Wiseman ", "hyperlink": "/wiki/Richard_Wiseman" }, { @@ -16654,8 +16654,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and colleagues at the", - "text": "and colleagues at the" + "orig": "and colleagues at the ", + "text": "and colleagues at the " }, { "self_ref": "#/texts/714", @@ -16679,8 +16679,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ",", - "text": "," + "orig": ", ", + "text": ", " }, { "self_ref": "#/texts/716", @@ -16704,8 +16704,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", finished a year-long", - "text": ", finished a year-long" + "orig": ", finished a year-long ", + "text": ", finished a year-long " }, { "self_ref": "#/texts/718", @@ -16716,8 +16716,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "LaughLab", - "text": "LaughLab", + "orig": "LaughLab ", + "text": "LaughLab ", "hyperlink": "/wiki/LaughLab" }, { @@ -16741,8 +16741,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 52 ]", - "text": "[ 52 ]", + "orig": "[52] ", + "text": "[52] ", "formatting": { "bold": false, "italic": false, @@ -16761,8 +16761,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The word \"duck\" may have become an", - "text": "The word \"duck\" may have become an" + "orig": "The word \"duck\" may have become an ", + "text": "The word \"duck\" may have become an " }, { "self_ref": "#/texts/722", @@ -16773,8 +16773,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "inherently funny word", - "text": "inherently funny word", + "orig": "inherently funny word ", + "text": "inherently funny word ", "hyperlink": "/wiki/Inherently_funny_word" }, { @@ -16786,8 +16786,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many", - "text": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many" + "orig": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many ", + "text": "in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many " }, { "self_ref": "#/texts/724", @@ -16811,8 +16811,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", many are cartoon characters, such as", - "text": ", many are cartoon characters, such as" + "orig": ", many are cartoon characters, such as ", + "text": ", many are cartoon characters, such as " }, { "self_ref": "#/texts/726", @@ -16836,8 +16836,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'s", - "text": "'s" + "orig": "'s ", + "text": "'s " }, { "self_ref": "#/texts/728", @@ -16861,8 +16861,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and", - "text": ", and" + "orig": ", and ", + "text": ", and " }, { "self_ref": "#/texts/730", @@ -16886,8 +16886,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "'", - "text": "'" + "orig": "' ", + "text": "' " }, { "self_ref": "#/texts/732", @@ -16911,8 +16911,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/734", @@ -16923,8 +16923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Howard the Duck", - "text": "Howard the Duck", + "orig": "Howard the Duck ", + "text": "Howard the Duck ", "hyperlink": "/wiki/Howard_the_Duck" }, { @@ -16948,8 +16948,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 53 ]", - "text": "[ 53 ]", + "orig": "[53]", + "text": "[53]", "formatting": { "bold": false, "italic": false, @@ -16968,8 +16968,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 54 ]", - "text": "[ 54 ]", + "orig": "[54] ", + "text": "[54] ", "formatting": { "bold": false, "italic": false, @@ -16988,8 +16988,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and was made into a", - "text": "and was made into a" + "orig": "and was made into a ", + "text": "and was made into a " }, { "self_ref": "#/texts/739", @@ -17000,8 +17000,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "movie", - "text": "movie", + "orig": "movie ", + "text": "movie ", "hyperlink": "/wiki/Howard_the_Duck_(film)" }, { @@ -17025,8 +17025,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The 1992 Disney film", - "text": "The 1992 Disney film" + "orig": "The 1992 Disney film ", + "text": "The 1992 Disney film " }, { "self_ref": "#/texts/742", @@ -17057,8 +17057,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", starring", - "text": ", starring" + "orig": ", starring ", + "text": ", starring " }, { "self_ref": "#/texts/744", @@ -17082,8 +17082,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual", - "text": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual" + "orig": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual ", + "text": ", chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual " }, { "self_ref": "#/texts/746", @@ -17094,8 +17094,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "National Hockey League", - "text": "National Hockey League", + "orig": "National Hockey League ", + "text": "National Hockey League ", "hyperlink": "/wiki/National_Hockey_League" }, { @@ -17107,8 +17107,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "professional team of the", - "text": "professional team of the" + "orig": "professional team of the ", + "text": "professional team of the " }, { "self_ref": "#/texts/748", @@ -17183,8 +17183,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "]", - "text": "]", + "orig": "] ", + "text": "] ", "formatting": { "bold": false, "italic": false, @@ -17202,8 +17202,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The duck is also the nickname of the", - "text": "The duck is also the nickname of the" + "orig": "The duck is also the nickname of the ", + "text": "The duck is also the nickname of the " }, { "self_ref": "#/texts/754", @@ -17214,8 +17214,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "University of Oregon", - "text": "University of Oregon", + "orig": "University of Oregon ", + "text": "University of Oregon ", "hyperlink": "/wiki/University_of_Oregon" }, { @@ -17227,8 +17227,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "sports teams as well as the", - "text": "sports teams as well as the" + "orig": "sports teams as well as the ", + "text": "sports teams as well as the " }, { "self_ref": "#/texts/756", @@ -17239,8 +17239,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Long Island Ducks", - "text": "Long Island Ducks", + "orig": "Long Island Ducks ", + "text": "Long Island Ducks ", "hyperlink": "/wiki/Long_Island_Ducks" }, { @@ -17252,8 +17252,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "minor league", - "text": "minor league" + "orig": "minor league ", + "text": "minor league " }, { "self_ref": "#/texts/758", @@ -17264,8 +17264,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "baseball", - "text": "baseball", + "orig": "baseball ", + "text": "baseball ", "hyperlink": "/wiki/Baseball" }, { @@ -17289,8 +17289,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[ 55 ]", - "text": "[ 55 ]", + "orig": "[55]", + "text": "[55]", "formatting": { "bold": false, "italic": false, @@ -17493,8 +17493,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17526,8 +17526,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/775", @@ -17557,8 +17557,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 .", - "text": ". Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 ." + "orig": ". Houghton Mifflin Company. 2006. Retrieved 2015-05-22.", + "text": ". Houghton Mifflin Company. 2006. Retrieved 2015-05-22." }, { "self_ref": "#/texts/777", @@ -17587,8 +17587,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17620,8 +17620,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/781", @@ -17651,8 +17651,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". K. Dictionaries Ltd. 2000–2006 . Retrieved 2015-05-22 .", - "text": ". K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 ." + "orig": ". K. Dictionaries Ltd. 2000–2006. Retrieved 2015-05-22.", + "text": ". K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22." }, { "self_ref": "#/texts/783", @@ -17681,8 +17681,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17701,8 +17701,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Dohner, Janet Vorwald (2001).", - "text": "Dohner, Janet Vorwald (2001)." + "orig": "Dohner, Janet Vorwald (2001). ", + "text": "Dohner, Janet Vorwald (2001). " }, { "self_ref": "#/texts/786", @@ -17733,8 +17733,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Yale University Press.", - "text": ". Yale University Press." + "orig": ". Yale University Press. ", + "text": ". Yale University Press. " }, { "self_ref": "#/texts/788", @@ -17745,8 +17745,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -17801,8 +17801,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -17821,8 +17821,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Visca, Curt; Visca, Kelley (2003).", - "text": "Visca, Curt; Visca, Kelley (2003)." + "orig": "Visca, Curt; Visca, Kelley (2003). ", + "text": "Visca, Curt; Visca, Kelley (2003). " }, { "self_ref": "#/texts/794", @@ -17853,8 +17853,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The Rosen Publishing Group.", - "text": ". The Rosen Publishing Group." + "orig": ". The Rosen Publishing Group. ", + "text": ". The Rosen Publishing Group. " }, { "self_ref": "#/texts/796", @@ -17865,8 +17865,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -17921,8 +17921,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/801", @@ -17933,8 +17933,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -17953,8 +17953,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -17973,8 +17973,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -17993,8 +17993,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18056,8 +18056,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18119,8 +18119,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18182,8 +18182,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18245,8 +18245,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/821", @@ -18257,8 +18257,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -18277,8 +18277,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -18297,8 +18297,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -18317,8 +18317,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18337,8 +18337,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "e", - "text": "e", + "orig": "e ", + "text": "e ", "formatting": { "bold": true, "italic": true, @@ -18357,8 +18357,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "f", - "text": "f", + "orig": "f ", + "text": "f ", "formatting": { "bold": true, "italic": true, @@ -18420,8 +18420,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18483,8 +18483,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18546,8 +18546,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18609,8 +18609,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18672,8 +18672,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18735,8 +18735,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/851", @@ -18747,8 +18747,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -18767,8 +18767,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -18787,8 +18787,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "c", - "text": "c", + "orig": "c ", + "text": "c ", "formatting": { "bold": true, "italic": true, @@ -18807,8 +18807,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "d", - "text": "d", + "orig": "d ", + "text": "d ", "formatting": { "bold": true, "italic": true, @@ -18827,8 +18827,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "e", - "text": "e", + "orig": "e ", + "text": "e ", "formatting": { "bold": true, "italic": true, @@ -18847,8 +18847,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "f", - "text": "f", + "orig": "f ", + "text": "f ", "formatting": { "bold": true, "italic": true, @@ -18867,8 +18867,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "g", - "text": "g", + "orig": "g ", + "text": "g ", "formatting": { "bold": true, "italic": true, @@ -18930,8 +18930,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -18993,8 +18993,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19056,8 +19056,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19119,8 +19119,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19182,8 +19182,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19245,8 +19245,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/882", @@ -19257,8 +19257,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -19277,8 +19277,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -19340,8 +19340,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19403,8 +19403,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19436,8 +19436,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/894", @@ -19467,8 +19467,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2018-04-27 .", - "text": ". Retrieved 2018-04-27 ." + "orig": ". Retrieved 2018-04-27.", + "text": ". Retrieved 2018-04-27." }, { "self_ref": "#/texts/896", @@ -19497,8 +19497,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19517,8 +19517,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ogden, Evans.", - "text": "Ogden, Evans." + "orig": "Ogden, Evans. ", + "text": "Ogden, Evans. " }, { "self_ref": "#/texts/899", @@ -19542,8 +19542,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". CWE . Retrieved 2006-11-02 .", - "text": ". CWE . Retrieved 2006-11-02 ." + "orig": ". CWE. Retrieved 2006-11-02.", + "text": ". CWE. Retrieved 2006-11-02." }, { "self_ref": "#/texts/901", @@ -19572,8 +19572,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19592,8 +19592,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Karl Mathiesen (16 March 2015).", - "text": "Karl Mathiesen (16 March 2015)." + "orig": "Karl Mathiesen (16 March 2015). ", + "text": "Karl Mathiesen (16 March 2015). " }, { "self_ref": "#/texts/904", @@ -19617,8 +19617,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/906", @@ -19648,8 +19648,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 13 November 2016 .", - "text": ". Retrieved 13 November 2016 ." + "orig": ". Retrieved 13 November 2016.", + "text": ". Retrieved 13 November 2016." }, { "self_ref": "#/texts/908", @@ -19678,8 +19678,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19698,8 +19698,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\".", - "text": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\"." + "orig": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\". ", + "text": "Rohwer, Frank C.; Anderson, Michael G. (1988). \"Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl\". " }, { "self_ref": "#/texts/911", @@ -19729,8 +19729,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". pp. 187–221.", - "text": ". pp. 187-221." + "orig": ". pp. 187–221. ", + "text": ". pp. 187-221. " }, { "self_ref": "#/texts/913", @@ -19779,8 +19779,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/917", @@ -19791,8 +19791,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -19847,8 +19847,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -19867,8 +19867,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000).", - "text": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000)." + "orig": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ", + "text": "Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). " }, { "self_ref": "#/texts/923", @@ -19892,8 +19892,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/925", @@ -19923,8 +19923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/927", @@ -19935,8 +19935,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "102", - "text": "102", + "orig": "102 ", + "text": "102 ", "formatting": { "bold": true, "italic": false, @@ -19954,8 +19954,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(1): 201–205.", - "text": "(1): 201-205." + "orig": "(1): 201–205. ", + "text": "(1): 201-205. " }, { "self_ref": "#/texts/929", @@ -20004,8 +20004,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/933", @@ -20084,8 +20084,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20117,8 +20117,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/941", @@ -20148,8 +20148,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Archived from", - "text": ". Archived from" + "orig": ". Archived from ", + "text": ". Archived from " }, { "self_ref": "#/texts/943", @@ -20160,8 +20160,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "the original", - "text": "the original", + "orig": "the original ", + "text": "the original ", "hyperlink": "https://wildliferehabber.com/content/if-you-find-duckling" }, { @@ -20173,8 +20173,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on 2018-09-23 . Retrieved 2018-12-22 .", - "text": "on 2018-09-23 . Retrieved 2018-12-22 ." + "orig": "on 2018-09-23. Retrieved 2018-12-22.", + "text": "on 2018-09-23. Retrieved 2018-12-22." }, { "self_ref": "#/texts/945", @@ -20203,8 +20203,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20223,8 +20223,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Carver, Heather (2011).", - "text": "Carver, Heather (2011)." + "orig": "Carver, Heather (2011). ", + "text": "Carver, Heather (2011). " }, { "self_ref": "#/texts/948", @@ -20255,8 +20255,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Lulu.com.", - "text": ". Lulu.com." + "orig": ". Lulu.com. ", + "text": ". Lulu.com. " }, { "self_ref": "#/texts/950", @@ -20267,8 +20267,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -20381,8 +20381,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20401,8 +20401,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Titlow, Budd (2013-09-03).", - "text": "Titlow, Budd (2013-09-03)." + "orig": "Titlow, Budd (2013-09-03). ", + "text": "Titlow, Budd (2013-09-03). " }, { "self_ref": "#/texts/959", @@ -20433,8 +20433,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Rowman & Littlefield.", - "text": ". Rowman & Littlefield." + "orig": ". Rowman & Littlefield. ", + "text": ". Rowman & Littlefield. " }, { "self_ref": "#/texts/961", @@ -20445,8 +20445,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -20501,8 +20501,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20521,8 +20521,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Amos, Jonathan (2003-09-08).", - "text": "Amos, Jonathan (2003-09-08)." + "orig": "Amos, Jonathan (2003-09-08). ", + "text": "Amos, Jonathan (2003-09-08). " }, { "self_ref": "#/texts/967", @@ -20546,8 +20546,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/969", @@ -20577,8 +20577,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2006-11-02 .", - "text": ". Retrieved 2006-11-02 ." + "orig": ". Retrieved 2006-11-02.", + "text": ". Retrieved 2006-11-02." }, { "self_ref": "#/texts/971", @@ -20607,8 +20607,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20670,8 +20670,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20733,8 +20733,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20796,8 +20796,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^" + "orig": "^ ", + "text": "^ " }, { "self_ref": "#/texts/985", @@ -20808,8 +20808,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "a", - "text": "a", + "orig": "a ", + "text": "a ", "formatting": { "bold": true, "italic": true, @@ -20828,8 +20828,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "b", - "text": "b", + "orig": "b ", + "text": "b ", "formatting": { "bold": true, "italic": true, @@ -20891,8 +20891,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -20954,8 +20954,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21017,8 +21017,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21080,8 +21080,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21143,8 +21143,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21206,8 +21206,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21269,8 +21269,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21332,8 +21332,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21352,8 +21352,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Livingston, A. D. (1998-01-01).", - "text": "Livingston, A. D. (1998-01-01)." + "orig": "Livingston, A. D. (1998-01-01). ", + "text": "Livingston, A. D. (1998-01-01). " }, { "self_ref": "#/texts/1020", @@ -21384,8 +21384,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Wordsworth Editions, Limited.", - "text": ". Wordsworth Editions, Limited." + "orig": ". Wordsworth Editions, Limited. ", + "text": ". Wordsworth Editions, Limited. " }, { "self_ref": "#/texts/1022", @@ -21396,8 +21396,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -21452,8 +21452,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21472,8 +21472,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\"", - "text": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\"", + "orig": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\" ", + "text": "\"Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl\" ", "hyperlink": "https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf" }, { @@ -21485,8 +21485,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1029", @@ -21516,8 +21516,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". US Department of Commerce. December 2008. p. 3.", - "text": ". US Department of Commerce. December 2008. p. 3." + "orig": ". US Department of Commerce. December 2008. p. 3. ", + "text": ". US Department of Commerce. December 2008. p. 3. " }, { "self_ref": "#/texts/1031", @@ -21528,8 +21528,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf" }, { @@ -21541,8 +21541,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 .", - "text": "(PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 ." + "orig": "(PDF) from the original on 2022-10-09. Retrieved 2 July 2019.", + "text": "(PDF) from the original on 2022-10-09. Retrieved 2 July 2019." }, { "self_ref": "#/texts/1033", @@ -21571,8 +21571,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21604,8 +21604,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1037", @@ -21635,8 +21635,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2019-10-25 .", - "text": ". Retrieved 2019-10-25 ." + "orig": ". Retrieved 2019-10-25.", + "text": ". Retrieved 2019-10-25." }, { "self_ref": "#/texts/1039", @@ -21665,8 +21665,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21698,8 +21698,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Digimorph.org . Retrieved 2012-12-23 .", - "text": ". Digimorph.org . Retrieved 2012-12-23 ." + "orig": ". Digimorph.org. Retrieved 2012-12-23.", + "text": ". Digimorph.org. Retrieved 2012-12-23." }, { "self_ref": "#/texts/1043", @@ -21728,8 +21728,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21748,8 +21748,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sy Montgomery.", - "text": "Sy Montgomery." + "orig": "Sy Montgomery. ", + "text": "Sy Montgomery. " }, { "self_ref": "#/texts/1046", @@ -21773,8 +21773,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1048", @@ -21804,8 +21804,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2012-12-23 .", - "text": ". Retrieved 2012-12-23 ." + "orig": ". Retrieved 2012-12-23.", + "text": ". Retrieved 2012-12-23." }, { "self_ref": "#/texts/1050", @@ -21834,8 +21834,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21854,8 +21854,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Glenday, Craig (2014).", - "text": "Glenday, Craig (2014)." + "orig": "Glenday, Craig (2014). ", + "text": "Glenday, Craig (2014). " }, { "self_ref": "#/texts/1053", @@ -21886,8 +21886,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Guinness World Records Limited. pp.", - "text": ". Guinness World Records Limited. pp." + "orig": ". Guinness World Records Limited. pp. ", + "text": ". Guinness World Records Limited. pp. " }, { "self_ref": "#/texts/1055", @@ -21911,8 +21911,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1057", @@ -21923,8 +21923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -21979,8 +21979,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -21999,8 +21999,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Suomen kunnallisvaakunat", - "text": "Suomen kunnallisvaakunat", + "orig": "Suomen kunnallisvaakunat ", + "text": "Suomen kunnallisvaakunat ", "formatting": { "bold": false, "italic": true, @@ -22018,8 +22018,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147.", - "text": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147." + "orig": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147. ", + "text": "(in Finnish). Suomen Kunnallisliitto. 1982. p. 147. " }, { "self_ref": "#/texts/1064", @@ -22030,8 +22030,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22086,8 +22086,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22106,8 +22106,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Lubānas simbolika\"", - "text": "\"Lubānas simbolika\"", + "orig": "\"Lubānas simbolika\" ", + "text": "\"Lubānas simbolika\" ", "hyperlink": "http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2" }, { @@ -22119,8 +22119,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Latvian) . Retrieved September 9, 2021 .", - "text": "(in Latvian) . Retrieved September 9, 2021 ." + "orig": "(in Latvian). Retrieved September 9, 2021.", + "text": "(in Latvian). Retrieved September 9, 2021." }, { "self_ref": "#/texts/1071", @@ -22149,8 +22149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22169,8 +22169,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"Föglö\"", - "text": "\"Föglö\"", + "orig": "\"Föglö\" ", + "text": "\"Föglö\" ", "hyperlink": "http://digi.narc.fi/digi/view.ka?kuid=1738595" }, { @@ -22182,8 +22182,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(in Swedish) . Retrieved September 9, 2021 .", - "text": "(in Swedish) . Retrieved September 9, 2021 ." + "orig": "(in Swedish). Retrieved September 9, 2021.", + "text": "(in Swedish). Retrieved September 9, 2021." }, { "self_ref": "#/texts/1075", @@ -22212,8 +22212,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22232,8 +22232,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Young, Emma.", - "text": "Young, Emma." + "orig": "Young, Emma. ", + "text": "Young, Emma. " }, { "self_ref": "#/texts/1078", @@ -22257,8 +22257,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1080", @@ -22288,8 +22288,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 7 January 2019 .", - "text": ". Retrieved 7 January 2019 ." + "orig": ". Retrieved 7 January 2019.", + "text": ". Retrieved 7 January 2019." }, { "self_ref": "#/texts/1082", @@ -22318,8 +22318,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22351,8 +22351,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1086", @@ -22413,8 +22413,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22446,8 +22446,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "; Gilbert, Laura (2008). \"1970s\".", - "text": "; Gilbert, Laura (2008). \"1970s\"." + "orig": "; Gilbert, Laura (2008). \"1970s\". ", + "text": "; Gilbert, Laura (2008). \"1970s\". " }, { "self_ref": "#/texts/1092", @@ -22477,8 +22477,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London, United Kingdom:", - "text": ". London, United Kingdom:" + "orig": ". London, United Kingdom: ", + "text": ". London, United Kingdom: " }, { "self_ref": "#/texts/1094", @@ -22502,8 +22502,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". p. 161.", - "text": ". p. 161." + "orig": ". p. 161. ", + "text": ". p. 161. " }, { "self_ref": "#/texts/1096", @@ -22514,8 +22514,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22570,8 +22570,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "^", - "text": "^", + "orig": "^ ", + "text": "^ ", "formatting": { "bold": true, "italic": false, @@ -22603,8 +22603,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1103", @@ -22634,8 +22634,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Retrieved 2022-01-20 .", - "text": ". Retrieved 2022-01-20 ." + "orig": ". Retrieved 2022-01-20.", + "text": ". Retrieved 2022-01-20." }, { "self_ref": "#/texts/1105", @@ -22681,8 +22681,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "American Ornithologists' Union (1998).", - "text": "American Ornithologists' Union (1998)." + "orig": "American Ornithologists' Union (1998). ", + "text": "American Ornithologists' Union (1998). " }, { "self_ref": "#/texts/1108", @@ -22693,8 +22693,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Checklist of North American Birds", - "text": "Checklist of North American Birds", + "orig": "Checklist of North American Birds ", + "text": "Checklist of North American Birds ", "formatting": { "bold": false, "italic": true, @@ -22713,8 +22713,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) . Washington, DC: American Ornithologists' Union.", - "text": "(PDF) . Washington, DC: American Ornithologists' Union." + "orig": "(PDF). Washington, DC: American Ornithologists' Union. ", + "text": "(PDF). Washington, DC: American Ornithologists' Union. " }, { "self_ref": "#/texts/1110", @@ -22725,8 +22725,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22751,8 +22751,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1113", @@ -22763,8 +22763,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf" }, { @@ -22806,8 +22806,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.).", - "text": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.)." + "orig": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). ", + "text": "Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). " }, { "self_ref": "#/texts/1117", @@ -22837,8 +22837,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions.", - "text": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions." + "orig": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. ", + "text": ". Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. " }, { "self_ref": "#/texts/1119", @@ -22849,8 +22849,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -22905,8 +22905,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Christidis, Les; Boles, Walter E., eds. (2008).", - "text": "Christidis, Les; Boles, Walter E., eds. (2008)." + "orig": "Christidis, Les; Boles, Walter E., eds. (2008). ", + "text": "Christidis, Les; Boles, Walter E., eds. (2008). " }, { "self_ref": "#/texts/1124", @@ -22936,8 +22936,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Collingwood, VIC: Csiro Publishing.", - "text": ". Collingwood, VIC: Csiro Publishing." + "orig": ". Collingwood, VIC: Csiro Publishing. ", + "text": ". Collingwood, VIC: Csiro Publishing. " }, { "self_ref": "#/texts/1126", @@ -22948,8 +22948,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23004,8 +23004,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\".", - "text": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\"." + "orig": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\". ", + "text": "Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). \"A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis\". " }, { "self_ref": "#/texts/1131", @@ -23035,8 +23035,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1133", @@ -23047,8 +23047,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "23", - "text": "23", + "orig": "23 ", + "text": "23 ", "formatting": { "bold": true, "italic": false, @@ -23066,8 +23066,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(3): 339–356.", - "text": "(3): 339-356." + "orig": "(3): 339–356. ", + "text": "(3): 339-356. " }, { "self_ref": "#/texts/1135", @@ -23116,8 +23116,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1139", @@ -23166,8 +23166,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1143", @@ -23178,8 +23178,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "PMID", - "text": "PMID", + "orig": "PMID ", + "text": "PMID ", "hyperlink": "/wiki/PMID_(identifier)" }, { @@ -23234,8 +23234,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001).", - "text": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001)." + "orig": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). ", + "text": "Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). " }, { "self_ref": "#/texts/1148", @@ -23265,8 +23265,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Christopher Helm.", - "text": ". London: Christopher Helm." + "orig": ". London: Christopher Helm. ", + "text": ". London: Christopher Helm. " }, { "self_ref": "#/texts/1150", @@ -23277,8 +23277,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23333,8 +23333,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Erlandson, Jon M. (1994).", - "text": "Erlandson, Jon M. (1994)." + "orig": "Erlandson, Jon M. (1994). ", + "text": "Erlandson, Jon M. (1994). " }, { "self_ref": "#/texts/1155", @@ -23365,8 +23365,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York, NY: Springer Science & Business Media.", - "text": ". New York, NY: Springer Science & Business Media." + "orig": ". New York, NY: Springer Science & Business Media. ", + "text": ". New York, NY: Springer Science & Business Media. " }, { "self_ref": "#/texts/1157", @@ -23377,8 +23377,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23433,8 +23433,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fieldhouse, Paul (2002).", - "text": "Fieldhouse, Paul (2002)." + "orig": "Fieldhouse, Paul (2002). ", + "text": "Fieldhouse, Paul (2002). " }, { "self_ref": "#/texts/1162", @@ -23465,8 +23465,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Vol. I: A–K. Santa Barbara: ABC-CLIO.", - "text": ". Vol. I: A-K. Santa Barbara: ABC-CLIO." + "orig": ". Vol. I: A–K. Santa Barbara: ABC-CLIO. ", + "text": ". Vol. I: A-K. Santa Barbara: ABC-CLIO. " }, { "self_ref": "#/texts/1164", @@ -23477,8 +23477,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23533,8 +23533,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000).", - "text": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000)." + "orig": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000). ", + "text": "Fitter, Julian; Fitter, Daniel; Hosking, David (2000). " }, { "self_ref": "#/texts/1169", @@ -23564,8 +23564,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ: Princeton University Press.", - "text": ". Princeton, NJ: Princeton University Press." + "orig": ". Princeton, NJ: Princeton University Press. ", + "text": ". Princeton, NJ: Princeton University Press. " }, { "self_ref": "#/texts/1171", @@ -23576,8 +23576,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23632,8 +23632,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Higman, B. W. (2012).", - "text": "Higman, B. W. (2012)." + "orig": "Higman, B. W. (2012). ", + "text": "Higman, B. W. (2012). " }, { "self_ref": "#/texts/1176", @@ -23664,8 +23664,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Chichester, UK: John Wiley & Sons.", - "text": ". Chichester, UK: John Wiley & Sons." + "orig": ". Chichester, UK: John Wiley & Sons. ", + "text": ". Chichester, UK: John Wiley & Sons. " }, { "self_ref": "#/texts/1178", @@ -23676,8 +23676,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23732,8 +23732,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Hume, Julian H. (2012).", - "text": "Hume, Julian H. (2012)." + "orig": "Hume, Julian H. (2012). ", + "text": "Hume, Julian H. (2012). " }, { "self_ref": "#/texts/1183", @@ -23764,8 +23764,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Christopher Helm.", - "text": ". London: Christopher Helm." + "orig": ". London: Christopher Helm. ", + "text": ". London: Christopher Helm. " }, { "self_ref": "#/texts/1185", @@ -23776,8 +23776,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23832,8 +23832,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Jeffries, Richard (2008).", - "text": "Jeffries, Richard (2008)." + "orig": "Jeffries, Richard (2008). ", + "text": "Jeffries, Richard (2008). " }, { "self_ref": "#/texts/1190", @@ -23864,8 +23864,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Tuscaloosa: University of Alabama Press.", - "text": ". Tuscaloosa: University of Alabama Press." + "orig": ". Tuscaloosa: University of Alabama Press. ", + "text": ". Tuscaloosa: University of Alabama Press. " }, { "self_ref": "#/texts/1192", @@ -23876,8 +23876,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -23932,8 +23932,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Kear, Janet, ed. (2005).", - "text": "Kear, Janet, ed. (2005)." + "orig": "Kear, Janet, ed. (2005). ", + "text": "Kear, Janet, ed. (2005). " }, { "self_ref": "#/texts/1197", @@ -23963,8 +23963,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Cairina", - "text": "Cairina" + "orig": "Cairina ", + "text": "Cairina " }, { "self_ref": "#/texts/1199", @@ -23975,8 +23975,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "to", - "text": "to", + "orig": "to ", + "text": "to ", "formatting": { "bold": false, "italic": true, @@ -24025,8 +24025,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Bird Families of the World. Oxford: Oxford University Press.", - "text": ". Bird Families of the World. Oxford: Oxford University Press." + "orig": ". Bird Families of the World. Oxford: Oxford University Press. ", + "text": ". Bird Families of the World. Oxford: Oxford University Press. " }, { "self_ref": "#/texts/1203", @@ -24037,8 +24037,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24093,8 +24093,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Livezey, Bradley C. (October 1986).", - "text": "Livezey, Bradley C. (October 1986)." + "orig": "Livezey, Bradley C. (October 1986). ", + "text": "Livezey, Bradley C. (October 1986). " }, { "self_ref": "#/texts/1208", @@ -24105,8 +24105,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\"", - "text": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\"", + "orig": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\" ", + "text": "\"A phylogenetic analysis of recent Anseriform genera using morphological characters\" ", "hyperlink": "https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf" }, { @@ -24118,8 +24118,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1210", @@ -24149,8 +24149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1212", @@ -24161,8 +24161,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "103", - "text": "103", + "orig": "103 ", + "text": "103 ", "formatting": { "bold": true, "italic": false, @@ -24180,8 +24180,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(4): 737–754.", - "text": "(4): 737-754." + "orig": "(4): 737–754. ", + "text": "(4): 737-754. " }, { "self_ref": "#/texts/1214", @@ -24230,8 +24230,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1218", @@ -24242,8 +24242,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf" }, { @@ -24285,8 +24285,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988).", - "text": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988)." + "orig": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ", + "text": "Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). " }, { "self_ref": "#/texts/1222", @@ -24297,8 +24297,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\"", - "text": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\"", + "orig": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\" ", + "text": "\"A partial classification of waterfowl (Anatidae) based on single-copy DNA\" ", "hyperlink": "https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf" }, { @@ -24310,8 +24310,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(PDF) .", - "text": "(PDF) ." + "orig": "(PDF). ", + "text": "(PDF). " }, { "self_ref": "#/texts/1224", @@ -24341,8 +24341,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1226", @@ -24353,8 +24353,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "105", - "text": "105", + "orig": "105 ", + "text": "105 ", "formatting": { "bold": true, "italic": false, @@ -24372,8 +24372,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(3): 452–459.", - "text": "(3): 452-459." + "orig": "(3): 452–459. ", + "text": "(3): 452-459. " }, { "self_ref": "#/texts/1228", @@ -24422,8 +24422,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/1232", @@ -24434,8 +24434,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf" }, { @@ -24477,8 +24477,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Maisels, Charles Keith (1999).", - "text": "Maisels, Charles Keith (1999)." + "orig": "Maisels, Charles Keith (1999). ", + "text": "Maisels, Charles Keith (1999). " }, { "self_ref": "#/texts/1236", @@ -24509,8 +24509,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". London: Routledge.", - "text": ". London: Routledge." + "orig": ". London: Routledge. ", + "text": ". London: Routledge. " }, { "self_ref": "#/texts/1238", @@ -24521,8 +24521,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24577,8 +24577,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987).", - "text": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987)." + "orig": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). ", + "text": "Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). " }, { "self_ref": "#/texts/1243", @@ -24608,8 +24608,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ: Princeton University Press.", - "text": ". Princeton, NJ: Princeton University Press." + "orig": ". Princeton, NJ: Princeton University Press. ", + "text": ". Princeton, NJ: Princeton University Press. " }, { "self_ref": "#/texts/1245", @@ -24620,8 +24620,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24676,8 +24676,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Rau, Charles (1876).", - "text": "Rau, Charles (1876)." + "orig": "Rau, Charles (1876). ", + "text": "Rau, Charles (1876). " }, { "self_ref": "#/texts/1250", @@ -24708,8 +24708,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York: Harper & Brothers.", - "text": ". New York: Harper & Brothers." + "orig": ". New York: Harper & Brothers. ", + "text": ". New York: Harper & Brothers. " }, { "self_ref": "#/texts/1252", @@ -24720,8 +24720,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "LCCN", - "text": "LCCN", + "orig": "LCCN ", + "text": "LCCN ", "hyperlink": "/wiki/LCCN_(identifier)" }, { @@ -24776,8 +24776,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Shirihai, Hadoram (2008).", - "text": "Shirihai, Hadoram (2008)." + "orig": "Shirihai, Hadoram (2008). ", + "text": "Shirihai, Hadoram (2008). " }, { "self_ref": "#/texts/1257", @@ -24807,8 +24807,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". Princeton, NJ, US: Princeton University Press.", - "text": ". Princeton, NJ, US: Princeton University Press." + "orig": ". Princeton, NJ, US: Princeton University Press. ", + "text": ". Princeton, NJ, US: Princeton University Press. " }, { "self_ref": "#/texts/1259", @@ -24819,8 +24819,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24875,8 +24875,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sued-Badillo, Jalil (2003).", - "text": "Sued-Badillo, Jalil (2003)." + "orig": "Sued-Badillo, Jalil (2003). ", + "text": "Sued-Badillo, Jalil (2003). " }, { "self_ref": "#/texts/1264", @@ -24907,8 +24907,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". General History of the Caribbean. Paris: UNESCO.", - "text": ". General History of the Caribbean. Paris: UNESCO." + "orig": ". General History of the Caribbean. Paris: UNESCO. ", + "text": ". General History of the Caribbean. Paris: UNESCO. " }, { "self_ref": "#/texts/1266", @@ -24919,8 +24919,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -24975,8 +24975,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Thorpe, I. J. (1996).", - "text": "Thorpe, I. J. (1996)." + "orig": "Thorpe, I. J. (1996). ", + "text": "Thorpe, I. J. (1996). " }, { "self_ref": "#/texts/1271", @@ -25007,8 +25007,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". New York: Routledge.", - "text": ". New York: Routledge." + "orig": ". New York: Routledge. ", + "text": ". New York: Routledge. " }, { "self_ref": "#/texts/1273", @@ -25019,8 +25019,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ISBN", - "text": "ISBN", + "orig": "ISBN ", + "text": "ISBN ", "hyperlink": "/wiki/ISBN_(identifier)" }, { @@ -25104,8 +25104,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Duck", - "text": "Duck", + "orig": "Duck ", + "text": "Duck ", "formatting": { "bold": true, "italic": false, @@ -25123,8 +25123,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "at Wikipedia's", - "text": "at Wikipedia's" + "orig": "at Wikipedia's ", + "text": "at Wikipedia's " }, { "self_ref": "#/texts/1279", @@ -25169,8 +25169,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Definitions", - "text": "Definitions", + "orig": "Definitions ", + "text": "Definitions ", "hyperlink": "https://en.wiktionary.org/wiki/duck" }, { @@ -25215,8 +25215,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Media", - "text": "Media", + "orig": "Media ", + "text": "Media ", "hyperlink": "https://commons.wikimedia.org/wiki/Anatidae" }, { @@ -25261,8 +25261,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Quotations", - "text": "Quotations", + "orig": "Quotations ", + "text": "Quotations ", "hyperlink": "https://en.wikiquote.org/wiki/Birds" }, { @@ -25307,8 +25307,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Recipes", - "text": "Recipes", + "orig": "Recipes ", + "text": "Recipes ", "hyperlink": "https://en.wikibooks.org/wiki/Cookbook:Duck" }, { @@ -25353,8 +25353,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Taxa", - "text": "Taxa", + "orig": "Taxa ", + "text": "Taxa ", "hyperlink": "https://species.wikimedia.org/wiki/Anatidae" }, { @@ -25399,8 +25399,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Data", - "text": "Data", + "orig": "Data ", + "text": "Data ", "hyperlink": "https://www.wikidata.org/wiki/Q3736439" }, { @@ -25442,8 +25442,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "list of books", - "text": "list of books", + "orig": "list of books ", + "text": "list of books ", "hyperlink": "https://web.archive.org/web/20060613210555/http://seaducks.org/subjects/MIGRATION%20AND%20FLIGHT.htm" }, { @@ -25485,8 +25485,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks on postage stamps", - "text": "Ducks on postage stamps", + "orig": "Ducks on postage stamps ", + "text": "Ducks on postage stamps ", "hyperlink": "http://www.stampsbook.org/subject/Duck.html" }, { @@ -25498,8 +25498,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Archived", - "text": "Archived", + "orig": "Archived ", + "text": "Archived ", "hyperlink": "https://web.archive.org/web/20130513022903/http://www.stampsbook.org/subject/Duck.html" }, { @@ -25511,8 +25511,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "2013-05-13 at the", - "text": "2013-05-13 at the" + "orig": "2013-05-13 at the ", + "text": "2013-05-13 at the " }, { "self_ref": "#/texts/1305", @@ -25554,8 +25554,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Ducks at a Distance, by Rob Hines", - "text": "Ducks at a Distance, by Rob Hines", + "orig": "Ducks at a Distance, by Rob Hines ", + "text": "Ducks at a Distance, by Rob Hines ", "formatting": { "bold": false, "italic": true, @@ -25574,8 +25574,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "at", - "text": "at" + "orig": "at ", + "text": "at " }, { "self_ref": "#/texts/1309", @@ -25586,8 +25586,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Project Gutenberg", - "text": "Project Gutenberg", + "orig": "Project Gutenberg ", + "text": "Project Gutenberg ", "hyperlink": "/wiki/Project_Gutenberg" }, { @@ -26251,8 +26251,8 @@ "content_layer": "furniture", "label": "list_item", "prov": [], - "orig": "This page was last edited on 21 September 2024, at 12:11 (UTC) .", - "text": "This page was last edited on 21 September 2024, at 12:11 (UTC) .", + "orig": "This page was last edited on 21 September 2024, at 12:11 (UTC).", + "text": "This page was last edited on 21 September 2024, at 12:11 (UTC).", "enumerated": false, "marker": "" }, @@ -26283,8 +26283,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Text is available under the", - "text": "Text is available under the" + "orig": "Text is available under the ", + "text": "Text is available under the " }, { "self_ref": "#/texts/1358", @@ -26308,8 +26308,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "; additional terms may apply. By using this site, you agree to the", - "text": "; additional terms may apply. By using this site, you agree to the" + "orig": "; additional terms may apply. By using this site, you agree to the ", + "text": "; additional terms may apply. By using this site, you agree to the " }, { "self_ref": "#/texts/1360", @@ -26320,8 +26320,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "Terms of Use", - "text": "Terms of Use", + "orig": "Terms of Use ", + "text": "Terms of Use ", "hyperlink": "//foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" }, { @@ -26333,8 +26333,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": "and ", + "text": "and " }, { "self_ref": "#/texts/1362", @@ -26358,8 +26358,8 @@ "content_layer": "furniture", "label": "text", "prov": [], - "orig": ". Wikipedia® is a registered trademark of the", - "text": ". Wikipedia® is a registered trademark of the" + "orig": ". Wikipedia® is a registered trademark of the ", + "text": ". Wikipedia® is a registered trademark of the " }, { "self_ref": "#/texts/1364", diff --git a/tests/data/html/groundtruth/wiki_duck.html.md b/tests/data/html/groundtruth/wiki_duck.html.md index 40d7fa99d5..1627fb1f0f 100644 --- a/tests/data/html/groundtruth/wiki_duck.html.md +++ b/tests/data/html/groundtruth/wiki_duck.html.md @@ -52,7 +52,7 @@ hide - [Беларуская (тарашкевіца)](https://be-tarask.wikipedia.org/wiki/%D0%9A%D0%B0%D1%87%D0%BA%D1%96) - [Bikol Central](https://bcl.wikipedia.org/wiki/Itik) - [Български](https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D1%82%D0%B8%D1%86%D0%B0) -- [Brezhoneg](https://br.wikipedia.org/wiki/Houad_(evn)) +- [Brezhoneg](https://br.wikipedia.org/wiki/Houad_%28evn%29) - [Буряад](https://bxr.wikipedia.org/wiki/%D0%9D%D1%83%D0%B3%D0%B0h%D0%B0%D0%BD) - [Català](https://ca.wikipedia.org/wiki/%C3%80necs) - [Чӑвашла](https://cv.wikipedia.org/wiki/%D0%9A%C4%83%D0%B2%D0%B0%D0%BA%D0%B0%D0%BB%D1%81%D0%B5%D0%BC) @@ -101,7 +101,7 @@ hide - [Kreyòl ayisyen](https://ht.wikipedia.org/wiki/Kanna) - [Кырык мары](https://mrj.wikipedia.org/wiki/%D0%9B%D1%8B%D0%B4%D1%8B%D0%B2%D0%BB%D3%93) - [ລາວ](https://lo.wikipedia.org/wiki/%E0%BB%80%E0%BA%9B%E0%BA%B1%E0%BA%94) -- [Latina](https://la.wikipedia.org/wiki/Anas_(avis)) +- [Latina](https://la.wikipedia.org/wiki/Anas_%28avis%29) - [Latviešu](https://lv.wikipedia.org/wiki/P%C4%ABle) - [Lietuvių](https://lt.wikipedia.org/wiki/Antis) - [Li Niha](https://nia.wikipedia.org/wiki/Bebe) @@ -141,7 +141,7 @@ hide - [Scots](https://sco.wikipedia.org/wiki/Deuk) - [Seeltersk](https://stq.wikipedia.org/wiki/Oante) - [Shqip](https://sq.wikipedia.org/wiki/Rosa) -- [Sicilianu](https://scn.wikipedia.org/wiki/P%C3%A0para_(%C3%A0natra)) +- [Sicilianu](https://scn.wikipedia.org/wiki/P%C3%A0para_%28%C3%A0natra%29) - [සිංහල](https://si.wikipedia.org/wiki/%E0%B6%AD%E0%B7%8F%E0%B6%BB%E0%B7%8F%E0%B7%80%E0%B7%8F) - [Simple English](https://simple.wikipedia.org/wiki/Duck) - [سنڌي](https://sd.wikipedia.org/wiki/%D8%A8%D8%AF%DA%AA) @@ -158,7 +158,7 @@ hide - [Türkçe](https://tr.wikipedia.org/wiki/%C3%96rdek) - [Українська](https://uk.wikipedia.org/wiki/%D0%9A%D0%B0%D1%87%D0%BA%D0%B8) - [ئۇيغۇرچە / Uyghurche](https://ug.wikipedia.org/wiki/%D8%A6%DB%86%D8%B1%D8%AF%DB%95%D9%83) -- [Vahcuengh](https://za.wikipedia.org/wiki/Bit_(doenghduz)) +- [Vahcuengh](https://za.wikipedia.org/wiki/Bit_%28doenghduz%29) - [Tiếng Việt](https://vi.wikipedia.org/wiki/V%E1%BB%8Bt) - [Walon](https://wa.wikipedia.org/wiki/Can%C3%A5rd) - [文言](https://zh-classical.wikipedia.org/wiki/%E9%B4%A8) @@ -228,17 +228,17 @@ Page semi-protected From Wikipedia, the free encyclopedia -(Redirected from [Duckling](/w/index.php?title=Duckling&redirect=no) ) +(Redirected from [Duckling](/w/index.php?title=Duckling&redirect=no)) -This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duck_as_food) . For other uses, see [Duck (disambiguation)](/wiki/Duck_(disambiguation)) . +This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duck_as_food). For other uses, see [Duck (disambiguation)](/wiki/Duck_%28disambiguation%29). -"Duckling" redirects here. For other uses, see [Duckling (disambiguation)](/wiki/Duckling_(disambiguation)) . +"Duckling" redirects here. For other uses, see [Duckling (disambiguation)](/wiki/Duckling_%28disambiguation%29). | Duck | Duck | | - | - | | | | -| [Bufflehead](/wiki/Bufflehead) ( *Bucephala albeola* ) | [Bufflehead](/wiki/Bufflehead) ( *Bucephala albeola* ) | -| [Scientific classification](/wiki/Taxonomy_(biology)) Edit this classification | [Scientific classification](/wiki/Taxonomy_(biology)) Edit this classification | +| [Bufflehead](/wiki/Bufflehead) (*Bucephala albeola*) | [Bufflehead](/wiki/Bufflehead) (*Bucephala albeola*) | +| [Scientific classification](/wiki/Taxonomy_%28biology%29) Edit this classification | [Scientific classification](/wiki/Taxonomy_%28biology%29) Edit this classification | | Domain: | [Eukaryota](/wiki/Eukaryote) | | Kingdom: | [Animalia](/wiki/Animal) | | Phylum: | [Chordata](/wiki/Chordate) | @@ -249,43 +249,43 @@ This article is about the bird. For duck as a food, see [Duck as food](/wiki/Duc | Subfamilies | Subfamilies | | See text | See text | -**Duck** is the common name for numerous species of [waterfowl](/wiki/Waterfowl) in the [family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae) . Ducks are generally smaller and shorter-necked than [swans](/wiki/Swan) and [geese](/wiki/Goose) , which are members of the same family. Divided among several subfamilies, they are a [form taxon](/wiki/Form_taxon) ; they do not represent a [monophyletic group](/wiki/Monophyletic_group) (the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly [aquatic birds](/wiki/Aquatic_bird) , and may be found in both fresh water and sea water. +**Duck** is the common name for numerous species of [waterfowl](/wiki/Waterfowl) in the [family](/wiki/Family_%28biology%29) [Anatidae](/wiki/Anatidae). Ducks are generally smaller and shorter-necked than [swans](/wiki/Swan) and [geese](/wiki/Goose), which are members of the same family. Divided among several subfamilies, they are a [form taxon](/wiki/Form_taxon); they do not represent a [monophyletic group](/wiki/Monophyletic_group) (the group of all descendants of a single common ancestral species), since swans and geese are not considered ducks. Ducks are mostly [aquatic birds](/wiki/Aquatic_bird), and may be found in both fresh water and sea water. -Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as [loons](/wiki/Loon) or divers, [grebes](/wiki/Grebe) , [gallinules](/wiki/Gallinule) and [coots](/wiki/Coot) . +Ducks are sometimes confused with several types of unrelated water birds with similar forms, such as [loons](/wiki/Loon) or divers, [grebes](/wiki/Grebe), [gallinules](/wiki/Gallinule) and [coots](/wiki/Coot). ## Etymology -The word *duck* comes from [Old English](/wiki/Old_English) *dūce* 'diver', a derivative of the verb * *dūcan* 'to duck, bend down low as if to get under something, or dive', because of the way many species in the [dabbling duck](/wiki/Dabbling_duck) group feed by upending; compare with [Dutch](/wiki/Dutch_language) *duiken* and [German](/wiki/German_language) *tauchen* 'to dive'. +The word *duck* comes from [Old English](/wiki/Old_English) *dūce* 'diver', a derivative of the verb **dūcan* 'to duck, bend down low as if to get under something, or dive', because of the way many species in the [dabbling duck](/wiki/Dabbling_duck) group feed by upending; compare with [Dutch](/wiki/Dutch_language) *duiken* and [German](/wiki/German_language) *tauchen* 'to dive'. Pacific black duck displaying the characteristic upending "duck" -This word replaced Old English *ened* / *ænid* 'duck', possibly to avoid confusion with other words, such as *ende* 'end' with similar forms. Other Germanic languages still have similar words for *duck* , for example, Dutch *eend* , German *Ente* and [Norwegian](/wiki/Norwegian_language) *and* . The word *ened* / *ænid* was inherited from [Proto-Indo-European](/wiki/Proto-Indo-European_language) ; [cf.](/wiki/Cf.) [Latin](/wiki/Latin) *anas* "duck", [Lithuanian](/wiki/Lithuanian_language) *ántis* 'duck', [Ancient Greek](/wiki/Ancient_Greek_language) νῆσσα / νῆττα ( *nēssa* / *nētta* ) 'duck', and [Sanskrit](/wiki/Sanskrit) *ātí* 'water bird', among others. +This word replaced Old English *ened* /*ænid* 'duck', possibly to avoid confusion with other words, such as *ende* 'end' with similar forms. Other Germanic languages still have similar words for *duck*, for example, Dutch *eend*, German *Ente* and [Norwegian](/wiki/Norwegian_language) *and*. The word *ened* /*ænid* was inherited from [Proto-Indo-European](/wiki/Proto-Indo-European_language); [cf.](/wiki/Cf.) [Latin](/wiki/Latin) *anas* "duck", [Lithuanian](/wiki/Lithuanian_language) *ántis* 'duck', [Ancient Greek](/wiki/Ancient_Greek_language) νῆσσα /νῆττα (*nēssa* /*nētta*) 'duck', and [Sanskrit](/wiki/Sanskrit) *ātí* 'water bird', among others. -A duckling is a young duck in downy plumage [[ 1 ]](#cite_note-1) or baby duck, [[ 2 ]](#cite_note-2) but in the food trade a young domestic duck which has just reached adult size and bulk and its meat is still fully tender, is sometimes labelled as a duckling. +A duckling is a young duck in downy plumage[[1]](#cite_note-1) or baby duck,[[2]](#cite_note-2) but in the food trade a young domestic duck which has just reached adult size and bulk and its meat is still fully tender, is sometimes labelled as a duckling. -A male is called a [drake](https://en.wiktionary.org/wiki/drake) and the female is called a duck, or in [ornithology](/wiki/Ornithology) a hen. [[ 3 ]](#cite_note-3) [[ 4 ]](#cite_note-4) +A male is called a [drake](https://en.wiktionary.org/wiki/drake) and the female is called a duck, or in [ornithology](/wiki/Ornithology) a hen.[[3]](#cite_note-3)[[4]](#cite_note-4) -Male mallard . +Male mallard. -Wood ducks . +Wood ducks. ## Taxonomy -All ducks belong to the [biological order](/wiki/Order_(biology)) [Anseriformes](/wiki/Anseriformes) , a group that contains the ducks, geese and swans, as well as the [screamers](/wiki/Screamer) , and the [magpie goose](/wiki/Magpie_goose) . [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) All except the screamers belong to the [biological family](/wiki/Family_(biology)) [Anatidae](/wiki/Anatidae) . [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Within the family, ducks are split into a variety of subfamilies and 'tribes'. The number and composition of these subfamilies and tribes is the cause of considerable disagreement among taxonomists. [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Some base their decisions on [morphological characteristics](/wiki/Morphology_(biology)) , others on shared behaviours or genetic studies. [[ 6 ]](#cite_note-FOOTNOTELivezey1986737–738-6) [[ 7 ]](#cite_note-FOOTNOTEMadsenMcHughde_Kloet1988452-7) The number of suggested subfamilies containing ducks ranges from two to five. [[ 8 ]](#cite_note-FOOTNOTEDonne-GousséLaudetHänni2002353–354-8) [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The significant level of [hybridisation](/wiki/Hybrid_(biology)) that occurs among wild ducks complicates efforts to tease apart the relationships between various species. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) +All ducks belong to the [biological order](/wiki/Order_%28biology%29) [Anseriformes](/wiki/Anseriformes), a group that contains the ducks, geese and swans, as well as the [screamers](/wiki/Screamer), and the [magpie goose](/wiki/Magpie_goose).[[5]](#cite_note-FOOTNOTECarboneras1992536-5) All except the screamers belong to the [biological family](/wiki/Family_%28biology%29) [Anatidae](/wiki/Anatidae).[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Within the family, ducks are split into a variety of subfamilies and 'tribes'. The number and composition of these subfamilies and tribes is the cause of considerable disagreement among taxonomists.[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Some base their decisions on [morphological characteristics](/wiki/Morphology_%28biology%29), others on shared behaviours or genetic studies.[[6]](#cite_note-FOOTNOTELivezey1986737–738-6)[[7]](#cite_note-FOOTNOTEMadsenMcHughde_Kloet1988452-7) The number of suggested subfamilies containing ducks ranges from two to five.[[8]](#cite_note-FOOTNOTEDonne-GousséLaudetHänni2002353–354-8)[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The significant level of [hybridisation](/wiki/Hybrid_%28biology%29) that occurs among wild ducks complicates efforts to tease apart the relationships between various species.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) Mallard landing in approach -In most modern classifications, the so-called 'true ducks' belong to the subfamily Anatinae, which is further split into a varying number of tribes. [[ 10 ]](#cite_note-FOOTNOTEElphickDunningSibley2001191-10) The largest of these, the Anatini, contains the 'dabbling' or 'river' ducks - named for their method of feeding primarily at the surface of fresh water. [[ 11 ]](#cite_note-FOOTNOTEKear2005448-11) The 'diving ducks', also named for their primary feeding method, make up the tribe Aythyini. [[ 12 ]](#cite_note-FOOTNOTEKear2005622–623-12) The 'sea ducks' of the tribe Mergini are diving ducks which specialise on fish and shellfish and spend a majority of their lives in saltwater. [[ 13 ]](#cite_note-FOOTNOTEKear2005686-13) The tribe Oxyurini contains the 'stifftails', diving ducks notable for their small size and stiff, upright tails. [[ 14 ]](#cite_note-FOOTNOTEElphickDunningSibley2001193-14) +In most modern classifications, the so-called 'true ducks' belong to the subfamily Anatinae, which is further split into a varying number of tribes.[[10]](#cite_note-FOOTNOTEElphickDunningSibley2001191-10) The largest of these, the Anatini, contains the 'dabbling' or 'river' ducks - named for their method of feeding primarily at the surface of fresh water.[[11]](#cite_note-FOOTNOTEKear2005448-11) The 'diving ducks', also named for their primary feeding method, make up the tribe Aythyini.[[12]](#cite_note-FOOTNOTEKear2005622–623-12) The 'sea ducks' of the tribe Mergini are diving ducks which specialise on fish and shellfish and spend a majority of their lives in saltwater.[[13]](#cite_note-FOOTNOTEKear2005686-13) The tribe Oxyurini contains the 'stifftails', diving ducks notable for their small size and stiff, upright tails.[[14]](#cite_note-FOOTNOTEElphickDunningSibley2001193-14) -A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The [whistling ducks](/wiki/Whistling_duck) are assigned either to a tribe (Dendrocygnini) in the subfamily Anatinae or the subfamily Anserinae, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae). [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) [[ 16 ]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998xix-16) The [freckled duck](/wiki/Freckled_duck) of Australia is either the sole member of the tribe Stictonettini in the subfamily Anserinae, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or in its own family, the Stictonettinae. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [shelducks](/wiki/Shelduck) make up the tribe Tadornini in the family Anserinae in some classifications, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) and their own subfamily, Tadorninae, in others, [[ 17 ]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998-17) while the [steamer ducks](/wiki/Steamer_duck) are either placed in the family Anserinae in the tribe Tachyerini [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or lumped with the shelducks in the tribe Tadorini. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [perching ducks](/wiki/Perching_duck) make up in the tribe Cairinini in the subfamily Anserinae in some classifications, while that tribe is eliminated in other classifications and its members assigned to the tribe Anatini. [[ 9 ]](#cite_note-FOOTNOTECarboneras1992540-9) The [torrent duck](/wiki/Torrent_duck) is generally included in the subfamily Anserinae in the monotypic tribe Merganettini, [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) but is sometimes included in the tribe Tadornini. [[ 18 ]](#cite_note-FOOTNOTECarboneras1992538-18) The [pink-eared duck](/wiki/Pink-eared_duck) is sometimes included as a true duck either in the tribe Anatini [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) or the tribe Malacorhynchini, [[ 19 ]](#cite_note-FOOTNOTEChristidisBoles200862-19) and other times is included with the shelducks in the tribe Tadornini. [[ 15 ]](#cite_note-FOOTNOTECarboneras1992537-15) +A number of other species called ducks are not considered to be 'true ducks', and are typically placed in other subfamilies or tribes. The [whistling ducks](/wiki/Whistling_duck) are assigned either to a tribe (Dendrocygnini) in the subfamily Anatinae or the subfamily Anserinae,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or to their own subfamily (Dendrocygninae) or family (Dendrocyganidae).[[9]](#cite_note-FOOTNOTECarboneras1992540-9)[[16]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998xix-16) The [freckled duck](/wiki/Freckled_duck) of Australia is either the sole member of the tribe Stictonettini in the subfamily Anserinae,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or in its own family, the Stictonettinae.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [shelducks](/wiki/Shelduck) make up the tribe Tadornini in the family Anserinae in some classifications,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) and their own subfamily, Tadorninae, in others,[[17]](#cite_note-FOOTNOTEAmerican_Ornithologists'_Union1998-17) while the [steamer ducks](/wiki/Steamer_duck) are either placed in the family Anserinae in the tribe Tachyerini[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or lumped with the shelducks in the tribe Tadorini.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [perching ducks](/wiki/Perching_duck) make up in the tribe Cairinini in the subfamily Anserinae in some classifications, while that tribe is eliminated in other classifications and its members assigned to the tribe Anatini.[[9]](#cite_note-FOOTNOTECarboneras1992540-9) The [torrent duck](/wiki/Torrent_duck) is generally included in the subfamily Anserinae in the monotypic tribe Merganettini,[[15]](#cite_note-FOOTNOTECarboneras1992537-15) but is sometimes included in the tribe Tadornini.[[18]](#cite_note-FOOTNOTECarboneras1992538-18) The [pink-eared duck](/wiki/Pink-eared_duck) is sometimes included as a true duck either in the tribe Anatini[[15]](#cite_note-FOOTNOTECarboneras1992537-15) or the tribe Malacorhynchini,[[19]](#cite_note-FOOTNOTEChristidisBoles200862-19) and other times is included with the shelducks in the tribe Tadornini.[[15]](#cite_note-FOOTNOTECarboneras1992537-15) ## Morphology @@ -293,25 +293,25 @@ Male Mandarin duck -The overall [body plan](/wiki/Body_plan) of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The [bill](/wiki/Beak) is usually broad and contains serrated [pectens](/wiki/Pecten_(biology)) , which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the [flight](/wiki/Bird_flight) of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of [steamer duck](/wiki/Steamer_duck) are almost flightless, however. Many species of duck are temporarily flightless while [moulting](/wiki/Moult) ; they seek out protected habitat with good food supplies during this period. This moult typically precedes [migration](/wiki/Bird_migration) . +The overall [body plan](/wiki/Body_plan) of ducks is elongated and broad, and they are also relatively long-necked, albeit not as long-necked as the geese and swans. The body shape of diving ducks varies somewhat from this in being more rounded. The [bill](/wiki/Beak) is usually broad and contains serrated [pectens](/wiki/Pecten_%28biology%29), which are particularly well defined in the filter-feeding species. In the case of some fishing species the bill is long and strongly serrated. The scaled legs are strong and well developed, and generally set far back on the body, more so in the highly aquatic species. The wings are very strong and are generally short and pointed, and the [flight](/wiki/Bird_flight) of ducks requires fast continuous strokes, requiring in turn strong wing muscles. Three species of [steamer duck](/wiki/Steamer_duck) are almost flightless, however. Many species of duck are temporarily flightless while [moulting](/wiki/Moult); they seek out protected habitat with good food supplies during this period. This moult typically precedes [migration](/wiki/Bird_migration). -The drakes of northern species often have extravagant [plumage](/wiki/Plumage) , but that is [moulted](/wiki/Moult) in summer to give a more female-like appearance, the "eclipse" plumage. Southern resident species typically show less [sexual dimorphism](/wiki/Sexual_dimorphism) , although there are exceptions such as the [paradise shelduck](/wiki/Paradise_shelduck) of [New Zealand](/wiki/New_Zealand) , which is both strikingly sexually dimorphic and in which the female's plumage is brighter than that of the male. The plumage of juvenile birds generally resembles that of the female. Female ducks have evolved to have a corkscrew shaped vagina to prevent rape. +The drakes of northern species often have extravagant [plumage](/wiki/Plumage), but that is [moulted](/wiki/Moult) in summer to give a more female-like appearance, the "eclipse" plumage. Southern resident species typically show less [sexual dimorphism](/wiki/Sexual_dimorphism), although there are exceptions such as the [paradise shelduck](/wiki/Paradise_shelduck) of [New Zealand](/wiki/New_Zealand), which is both strikingly sexually dimorphic and in which the female's plumage is brighter than that of the male. The plumage of juvenile birds generally resembles that of the female. Female ducks have evolved to have a corkscrew shaped vagina to prevent rape. ## Distribution and habitat See also: [List of Anseriformes by population](/wiki/List_of_Anseriformes_by_population) -Flying steamer ducks in Ushuaia , Argentina +Flying steamer ducks in Ushuaia, Argentina -Ducks have a [cosmopolitan distribution](/wiki/Cosmopolitan_distribution) , and are found on every continent except Antarctica. [[ 5 ]](#cite_note-FOOTNOTECarboneras1992536-5) Several species manage to live on subantarctic islands, including [South Georgia](/wiki/South_Georgia_and_the_South_Sandwich_Islands) and the [Auckland Islands](/wiki/Auckland_Islands) . [[ 20 ]](#cite_note-FOOTNOTEShirihai2008239,_245-20) Ducks have reached a number of isolated oceanic islands, including the [Hawaiian Islands](/wiki/Hawaiian_Islands) , [Micronesia](/wiki/Micronesia) and the [Galápagos Islands](/wiki/Gal%C3%A1pagos_Islands) , where they are often [vagrants](/wiki/Glossary_of_bird_terms#vagrants) and less often [residents](/wiki/Glossary_of_bird_terms#residents) . [[ 21 ]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) [[ 22 ]](#cite_note-FOOTNOTEFitterFitterHosking200052–3-22) A handful are [endemic](/wiki/Endemic) to such far-flung islands. [[ 21 ]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) +Ducks have a [cosmopolitan distribution](/wiki/Cosmopolitan_distribution), and are found on every continent except Antarctica.[[5]](#cite_note-FOOTNOTECarboneras1992536-5) Several species manage to live on subantarctic islands, including [South Georgia](/wiki/South_Georgia_and_the_South_Sandwich_Islands) and the [Auckland Islands](/wiki/Auckland_Islands).[[20]](#cite_note-FOOTNOTEShirihai2008239,_245-20) Ducks have reached a number of isolated oceanic islands, including the [Hawaiian Islands](/wiki/Hawaiian_Islands), [Micronesia](/wiki/Micronesia) and the [Galápagos Islands](/wiki/Gal%C3%A1pagos_Islands), where they are often [vagrants](/wiki/Glossary_of_bird_terms#vagrants) and less often [residents](/wiki/Glossary_of_bird_terms#residents).[[21]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21)[[22]](#cite_note-FOOTNOTEFitterFitterHosking200052–3-22) A handful are [endemic](/wiki/Endemic) to such far-flung islands.[[21]](#cite_note-FOOTNOTEPrattBrunerBerrett198798–107-21) -Female mallard in Cornwall , England +Female mallard in Cornwall, England -Some duck species, mainly those breeding in the temperate and Arctic Northern Hemisphere, are migratory; those in the tropics are generally not. Some ducks, particularly in Australia where rainfall is erratic, are nomadic, seeking out the temporary lakes and pools that form after localised heavy rain. [[ 23 ]](#cite_note-23) +Some duck species, mainly those breeding in the temperate and Arctic Northern Hemisphere, are migratory; those in the tropics are generally not. Some ducks, particularly in Australia where rainfall is erratic, are nomadic, seeking out the temporary lakes and pools that form after localised heavy rain.[[23]](#cite_note-23) ## Behaviour @@ -323,17 +323,17 @@ Pecten along the bill Mallard duckling preening -Ducks eat food sources such as [grasses](/wiki/Poaceae) , aquatic plants, fish, insects, small amphibians, worms, and small [molluscs](/wiki/Mollusc) . +Ducks eat food sources such as [grasses](/wiki/Poaceae), aquatic plants, fish, insects, small amphibians, worms, and small [molluscs](/wiki/Mollusc). -[Dabbling ducks](/wiki/Dabbling_duck) feed on the surface of water or on land, or as deep as they can reach by up-ending without completely submerging. [[ 24 ]](#cite_note-24) Along the edge of the bill, there is a comb-like structure called a [pecten](/wiki/Pecten_(biology)) . This strains the water squirting from the side of the bill and traps any food. The pecten is also used to preen feathers and to hold slippery food items. +[Dabbling ducks](/wiki/Dabbling_duck) feed on the surface of water or on land, or as deep as they can reach by up-ending without completely submerging.[[24]](#cite_note-24) Along the edge of the bill, there is a comb-like structure called a [pecten](/wiki/Pecten_%28biology%29). This strains the water squirting from the side of the bill and traps any food. The pecten is also used to preen feathers and to hold slippery food items. [Diving ducks](/wiki/Diving_duck) and [sea ducks](/wiki/Sea_duck) forage deep underwater. To be able to submerge more easily, the diving ducks are heavier than dabbling ducks, and therefore have more difficulty taking off to fly. A few specialized species such as the [mergansers](/wiki/Merganser) are adapted to catch and swallow large fish. -The others have the characteristic wide flat bill adapted to [dredging](/wiki/Dredging) -type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no [cere](/wiki/Cere) , but the nostrils come out through hard horn. +The others have the characteristic wide flat bill adapted to [dredging](/wiki/Dredging)-type jobs such as pulling up waterweed, pulling worms and small molluscs out of mud, searching for insect larvae, and bulk jobs such as dredging out, holding, turning head first, and swallowing a squirming frog. To avoid injury when digging into sediment it has no [cere](/wiki/Cere), but the nostrils come out through hard horn. -[*The Guardian*](/wiki/The_Guardian) published an article advising that ducks should not be fed with bread because it [damages the health of the ducks](/wiki/Angel_wing) and pollutes waterways. [[ 25 ]](#cite_note-25) +[*The Guardian*](/wiki/The_Guardian) published an article advising that ducks should not be fed with bread because it [damages the health of the ducks](/wiki/Angel_wing) and pollutes waterways.[[25]](#cite_note-25) ### Breeding @@ -341,13 +341,13 @@ A Muscovy duckling -Ducks generally [only have one partner at a time](/wiki/Monogamy_in_animals) , although the partnership usually only lasts one year. [[ 26 ]](#cite_note-26) Larger species and the more sedentary species (like fast-river specialists) tend to have pair-bonds that last numerous years. [[ 27 ]](#cite_note-27) Most duck species breed once a year, choosing to do so in favourable conditions ( [spring](/wiki/Spring_(season)) /summer or wet seasons). Ducks also tend to make a [nest](/wiki/Bird_nest) before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed [courtyard](/wiki/Courtyard) ) or are not prospering due to genetic defects or sickness brought about by hypothermia, starvation, or disease. Ducklings can also be orphaned by inconsistent late hatching where a few eggs hatch after the mother has abandoned the nest and led her ducklings to water. [[ 28 ]](#cite_note-28) +Ducks generally [only have one partner at a time](/wiki/Monogamy_in_animals), although the partnership usually only lasts one year.[[26]](#cite_note-26) Larger species and the more sedentary species (like fast-river specialists) tend to have pair-bonds that last numerous years.[[27]](#cite_note-27) Most duck species breed once a year, choosing to do so in favourable conditions ([spring](/wiki/Spring_%28season%29)/summer or wet seasons). Ducks also tend to make a [nest](/wiki/Bird_nest) before breeding, and, after hatching, lead their ducklings to water. Mother ducks are very caring and protective of their young, but may abandon some of their ducklings if they are physically stuck in an area they cannot get out of (such as nesting in an enclosed [courtyard](/wiki/Courtyard)) or are not prospering due to genetic defects or sickness brought about by hypothermia, starvation, or disease. Ducklings can also be orphaned by inconsistent late hatching where a few eggs hatch after the mother has abandoned the nest and led her ducklings to water.[[28]](#cite_note-28) ### Communication -Female [mallard](/wiki/Mallard) ducks (as well as several other species in the genus *Anas* , such as the [American](/wiki/American_black_duck) and [Pacific black ducks](/wiki/Pacific_black_duck) , [spot-billed duck](/wiki/Spot-billed_duck) , [northern pintail](/wiki/Northern_pintail) and [common teal](/wiki/Common_teal) ) make the classic "quack" sound while males make a similar but raspier sound that is sometimes written as "breeeeze", [[ 29 ]](#cite_note-29) [ [*self-published source?*](/wiki/Wikipedia:Verifiability#Self-published_sources) ] but, despite widespread misconceptions, most species of duck do not "quack". [[ 30 ]](#cite_note-30) In general, ducks make a range of [calls](/wiki/Bird_vocalisation) , including whistles, cooing, yodels and grunts. For example, the [scaup](/wiki/Scaup) - which are [diving ducks](/wiki/Diving_duck) - make a noise like "scaup" (hence their name). Calls may be loud displaying calls or quieter contact calls. +Female [mallard](/wiki/Mallard) ducks (as well as several other species in the genus *Anas*, such as the [American](/wiki/American_black_duck) and [Pacific black ducks](/wiki/Pacific_black_duck), [spot-billed duck](/wiki/Spot-billed_duck), [northern pintail](/wiki/Northern_pintail) and [common teal](/wiki/Common_teal)) make the classic "quack" sound while males make a similar but raspier sound that is sometimes written as "breeeeze",[[29]](#cite_note-29)[[*self-published source?*](/wiki/Wikipedia:Verifiability#Self-published_sources)] but, despite widespread misconceptions, most species of duck do not "quack".[[30]](#cite_note-30) In general, ducks make a range of [calls](/wiki/Bird_vocalisation), including whistles, cooing, yodels and grunts. For example, the [scaup](/wiki/Scaup) - which are [diving ducks](/wiki/Diving_duck) - make a noise like "scaup" (hence their name). Calls may be loud displaying calls or quieter contact calls. -A common [urban legend](/wiki/Urban_legend) claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the [University of Salford](/wiki/University_of_Salford) in 2003 as part of the [British Association](/wiki/British_Association) 's Festival of Science. [[ 31 ]](#cite_note-31) It was also debunked in [one of the earlier episodes](/wiki/MythBusters_(2003_season)#Does_a_Duck's_Quack_Echo?) of the popular Discovery Channel television show [*MythBusters*](/wiki/MythBusters) . [[ 32 ]](#cite_note-32) +A common [urban legend](/wiki/Urban_legend) claims that duck quacks do not echo; however, this has been proven to be false. This myth was first debunked by the Acoustics Research Centre at the [University of Salford](/wiki/University_of_Salford) in 2003 as part of the [British Association](/wiki/British_Association)'s Festival of Science.[[31]](#cite_note-31) It was also debunked in [one of the earlier episodes](/wiki/MythBusters_%282003_season%29#Does_a_Duck's_Quack_Echo?) of the popular Discovery Channel television show [*MythBusters*](/wiki/MythBusters).[[32]](#cite_note-32) ### Predators @@ -355,9 +355,9 @@ Ringed teal -Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like [pike](/wiki/Esox) , [crocodilians](/wiki/Crocodilia) , predatory [testudines](/wiki/Testudines) such as the [alligator snapping turtle](/wiki/Alligator_snapping_turtle) , and other aquatic hunters, including fish-eating birds such as [herons](/wiki/Heron) . Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as [foxes](/wiki/Fox) , or large birds, such as [hawks](/wiki/Hawk) or [owls](/wiki/Owl) . +Ducks have many predators. Ducklings are particularly vulnerable, since their inability to fly makes them easy prey not only for predatory birds but also for large fish like [pike](/wiki/Esox), [crocodilians](/wiki/Crocodilia), predatory [testudines](/wiki/Testudines) such as the [alligator snapping turtle](/wiki/Alligator_snapping_turtle), and other aquatic hunters, including fish-eating birds such as [herons](/wiki/Heron). Ducks' nests are raided by land-based predators, and brooding females may be caught unaware on the nest by mammals, such as [foxes](/wiki/Fox), or large birds, such as [hawks](/wiki/Hawk) or [owls](/wiki/Owl). -Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American [muskie](/wiki/Muskellunge) and the European [pike](/wiki/Esox) . In flight, ducks are safe from all but a few predators such as humans and the [peregrine falcon](/wiki/Peregrine_falcon) , which uses its speed and strength to catch ducks. +Adult ducks are fast fliers, but may be caught on the water by large aquatic predators including big fish such as the North American [muskie](/wiki/Muskellunge) and the European [pike](/wiki/Esox). In flight, ducks are safe from all but a few predators such as humans and the [peregrine falcon](/wiki/Peregrine_falcon), which uses its speed and strength to catch ducks. ## Relationship with humans @@ -365,33 +365,33 @@ Adult ducks are fast fliers, but may be caught on the water by large aquatic pre Main article: [Waterfowl hunting](/wiki/Waterfowl_hunting) -Humans have hunted ducks since prehistoric times. Excavations of [middens](/wiki/Midden) in California dating to 7800 - 6400 [BP](/wiki/Before_present) have turned up bones of ducks, including at least one now-extinct flightless species. [[ 33 ]](#cite_note-FOOTNOTEErlandson1994171-33) Ducks were captured in "significant numbers" by [Holocene](/wiki/Holocene) inhabitants of the lower [Ohio River](/wiki/Ohio_River) valley, suggesting they took advantage of the seasonal bounty provided by migrating waterfowl. [[ 34 ]](#cite_note-FOOTNOTEJeffries2008168,_243-34) Neolithic hunters in locations as far apart as the Caribbean, [[ 35 ]](#cite_note-FOOTNOTESued-Badillo200365-35) Scandinavia, [[ 36 ]](#cite_note-FOOTNOTEThorpe199668-36) Egypt, [[ 37 ]](#cite_note-FOOTNOTEMaisels199942-37) Switzerland, [[ 38 ]](#cite_note-FOOTNOTERau1876133-38) and China relied on ducks as a source of protein for some or all of the year. [[ 39 ]](#cite_note-FOOTNOTEHigman201223-39) Archeological evidence shows that [Māori people](/wiki/M%C4%81ori_people) in New Zealand hunted the flightless [Finsch's duck](/wiki/Finsch%27s_duck) , possibly to extinction, though rat predation may also have contributed to its fate. [[ 40 ]](#cite_note-FOOTNOTEHume201253-40) A similar end awaited the [Chatham duck](/wiki/Chatham_duck) , a species with reduced flying capabilities which went extinct shortly after its island was colonised by Polynesian settlers. [[ 41 ]](#cite_note-FOOTNOTEHume201252-41) It is probable that duck eggs were gathered by Neolithic hunter-gathers as well, though hard evidence of this is uncommon. [[ 35 ]](#cite_note-FOOTNOTESued-Badillo200365-35) [[ 42 ]](#cite_note-FOOTNOTEFieldhouse2002167-42) +Humans have hunted ducks since prehistoric times. Excavations of [middens](/wiki/Midden) in California dating to 7800 - 6400 [BP](/wiki/Before_present) have turned up bones of ducks, including at least one now-extinct flightless species.[[33]](#cite_note-FOOTNOTEErlandson1994171-33) Ducks were captured in "significant numbers" by [Holocene](/wiki/Holocene) inhabitants of the lower [Ohio River](/wiki/Ohio_River) valley, suggesting they took advantage of the seasonal bounty provided by migrating waterfowl.[[34]](#cite_note-FOOTNOTEJeffries2008168,_243-34) Neolithic hunters in locations as far apart as the Caribbean,[[35]](#cite_note-FOOTNOTESued-Badillo200365-35) Scandinavia,[[36]](#cite_note-FOOTNOTEThorpe199668-36) Egypt,[[37]](#cite_note-FOOTNOTEMaisels199942-37) Switzerland,[[38]](#cite_note-FOOTNOTERau1876133-38) and China relied on ducks as a source of protein for some or all of the year.[[39]](#cite_note-FOOTNOTEHigman201223-39) Archeological evidence shows that [Māori people](/wiki/M%C4%81ori_people) in New Zealand hunted the flightless [Finsch's duck](/wiki/Finsch%27s_duck), possibly to extinction, though rat predation may also have contributed to its fate.[[40]](#cite_note-FOOTNOTEHume201253-40) A similar end awaited the [Chatham duck](/wiki/Chatham_duck), a species with reduced flying capabilities which went extinct shortly after its island was colonised by Polynesian settlers.[[41]](#cite_note-FOOTNOTEHume201252-41) It is probable that duck eggs were gathered by Neolithic hunter-gathers as well, though hard evidence of this is uncommon.[[35]](#cite_note-FOOTNOTESued-Badillo200365-35)[[42]](#cite_note-FOOTNOTEFieldhouse2002167-42) -In many areas, wild ducks (including ducks farmed and released into the wild) are hunted for food or sport, [[ 43 ]](#cite_note-43) by shooting, or by being trapped using [duck decoys](/wiki/Duck_decoy_(structure)) . Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, "a sitting duck" has come to mean "an easy target". These ducks may be [contaminated by pollutants](/wiki/Duck_(food)#Pollution) such as [PCBs](/wiki/Polychlorinated_biphenyl) . [[ 44 ]](#cite_note-44) +In many areas, wild ducks (including ducks farmed and released into the wild) are hunted for food or sport,[[43]](#cite_note-43) by shooting, or by being trapped using [duck decoys](/wiki/Duck_decoy_%28structure%29). Because an idle floating duck or a duck squatting on land cannot react to fly or move quickly, "a sitting duck" has come to mean "an easy target". These ducks may be [contaminated by pollutants](/wiki/Duck_%28food%29#Pollution) such as [PCBs](/wiki/Polychlorinated_biphenyl).[[44]](#cite_note-44) ### Domestication Main article: [Domestic duck](/wiki/Domestic_duck) -Indian Runner ducks , a common breed of domestic ducks +Indian Runner ducks, a common breed of domestic ducks -Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their [down](/wiki/Down_feather) ). Approximately 3 billion ducks are slaughtered each year for meat worldwide. [[ 45 ]](#cite_note-45) They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the [mallard](/wiki/Mallard) ( *Anas platyrhynchos* ), apart from the [Muscovy duck](/wiki/Muscovy_duck) ( *Cairina moschata* ). [[ 46 ]](#cite_note-46) [[ 47 ]](#cite_note-47) The [Call duck](/wiki/Call_duck) is another example of a domestic duck breed. Its name comes from its original use established by hunters, as a decoy to attract wild mallards from the sky, into traps set for them on the ground. The call duck is the world's smallest domestic duck breed, as it weighs less than 1 kg (2.2 lb). [[ 48 ]](#cite_note-48) +Ducks have many economic uses, being farmed for their meat, eggs, and feathers (particularly their [down](/wiki/Down_feather)). Approximately 3 billion ducks are slaughtered each year for meat worldwide.[[45]](#cite_note-45) They are also kept and bred by aviculturists and often displayed in zoos. Almost all the varieties of domestic ducks are descended from the [mallard](/wiki/Mallard) (*Anas platyrhynchos*), apart from the [Muscovy duck](/wiki/Muscovy_duck) (*Cairina moschata*).[[46]](#cite_note-46)[[47]](#cite_note-47) The [Call duck](/wiki/Call_duck) is another example of a domestic duck breed. Its name comes from its original use established by hunters, as a decoy to attract wild mallards from the sky, into traps set for them on the ground. The call duck is the world's smallest domestic duck breed, as it weighs less than 1 kg (2.2 lb).[[48]](#cite_note-48) ### Heraldry -Three black-colored ducks in the coat of arms of Maaninka [ 49 ] +Three black-colored ducks in the coat of arms of Maaninka[49] -Ducks appear on several [coats of arms](/wiki/Coats_of_arms) , including the coat of arms of [Lubāna](/wiki/Lub%C4%81na) ( [Latvia](/wiki/Latvia) ) [[ 50 ]](#cite_note-50) and the coat of arms of [Föglö](/wiki/F%C3%B6gl%C3%B6) ( [Åland](/wiki/%C3%85land) ). [[ 51 ]](#cite_note-51) +Ducks appear on several [coats of arms](/wiki/Coats_of_arms), including the coat of arms of [Lubāna](/wiki/Lub%C4%81na) ([Latvia](/wiki/Latvia))[[50]](#cite_note-50) and the coat of arms of [Föglö](/wiki/F%C3%B6gl%C3%B6) ([Åland](/wiki/%C3%85land)).[[51]](#cite_note-51) ### Cultural references -In 2002, psychologist [Richard Wiseman](/wiki/Richard_Wiseman) and colleagues at the [University of Hertfordshire](/wiki/University_of_Hertfordshire) , [UK](/wiki/UK) , finished a year-long [LaughLab](/wiki/LaughLab) experiment, concluding that of all animals, ducks attract the most humor and silliness; he said, "If you're going to tell a joke involving an animal, make it a duck." [[ 52 ]](#cite_note-52) The word "duck" may have become an [inherently funny word](/wiki/Inherently_funny_word) in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many [ducks in fiction](/wiki/List_of_fictional_ducks) , many are cartoon characters, such as [Walt Disney](/wiki/The_Walt_Disney_Company) 's [Donald Duck](/wiki/Donald_Duck) , and [Warner Bros.](/wiki/Warner_Bros.) ' [Daffy Duck](/wiki/Daffy_Duck) . [Howard the Duck](/wiki/Howard_the_Duck) started as a comic book character in 1973 [[ 53 ]](#cite_note-53) [[ 54 ]](#cite_note-54) and was made into a [movie](/wiki/Howard_the_Duck_(film)) in 1986. +In 2002, psychologist [Richard Wiseman](/wiki/Richard_Wiseman) and colleagues at the [University of Hertfordshire](/wiki/University_of_Hertfordshire), [UK](/wiki/UK), finished a year-long [LaughLab](/wiki/LaughLab) experiment, concluding that of all animals, ducks attract the most humor and silliness; he said, "If you're going to tell a joke involving an animal, make it a duck."[[52]](#cite_note-52) The word "duck" may have become an [inherently funny word](/wiki/Inherently_funny_word) in many languages, possibly because ducks are seen as silly in their looks or behavior. Of the many [ducks in fiction](/wiki/List_of_fictional_ducks), many are cartoon characters, such as [Walt Disney](/wiki/The_Walt_Disney_Company)'s [Donald Duck](/wiki/Donald_Duck), and [Warner Bros.](/wiki/Warner_Bros.)' [Daffy Duck](/wiki/Daffy_Duck). [Howard the Duck](/wiki/Howard_the_Duck) started as a comic book character in 1973[[53]](#cite_note-53)[[54]](#cite_note-54) and was made into a [movie](/wiki/Howard_the_Duck_%28film%29) in 1986. -The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starring [Emilio Estevez](/wiki/Emilio_Estevez) , chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual [National Hockey League](/wiki/National_Hockey_League) professional team of the [Anaheim Ducks](/wiki/Anaheim_Ducks) , who were founded with the name the Mighty Ducks of Anaheim. [ [*citation needed*](/wiki/Wikipedia:Citation_needed) ] The duck is also the nickname of the [University of Oregon](/wiki/University_of_Oregon) sports teams as well as the [Long Island Ducks](/wiki/Long_Island_Ducks) minor league [baseball](/wiki/Baseball) team. [[ 55 ]](#cite_note-55) +The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_%28film%29), starring [Emilio Estevez](/wiki/Emilio_Estevez), chose the duck as the mascot for the fictional youth hockey team who are protagonists of the movie, based on the duck being described as a fierce fighter. This led to the duck becoming the nickname and mascot for the eventual [National Hockey League](/wiki/National_Hockey_League) professional team of the [Anaheim Ducks](/wiki/Anaheim_Ducks), who were founded with the name the Mighty Ducks of Anaheim.[[*citation needed*](/wiki/Wikipedia:Citation_needed)] The duck is also the nickname of the [University of Oregon](/wiki/University_of_Oregon) sports teams as well as the [Long Island Ducks](/wiki/Long_Island_Ducks) minor league [baseball](/wiki/Baseball) team.[[55]](#cite_note-55) ## See also @@ -409,84 +409,84 @@ The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starr ### Citations -1. [**^**](#cite_ref-1) ["Duckling"](http://dictionary.reference.com/browse/duckling) . *The American Heritage Dictionary of the English Language, Fourth Edition* . Houghton Mifflin Company. 2006 . Retrieved 2015-05-22 . -2. [**^**](#cite_ref-2) ["Duckling"](http://dictionary.reference.com/browse/duckling) . *Kernerman English Multilingual Dictionary (Beta Version)* . K. Dictionaries Ltd. 2000-2006 . Retrieved 2015-05-22 . -3. [**^**](#cite_ref-3) Dohner, Janet Vorwald (2001). [*The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds*](https://books.google.com/books?id=WJCTL_mC5w4C&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck&pg=PA457) . Yale University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0300138139](/wiki/Special:BookSources/978-0300138139) . -4. [**^**](#cite_ref-4) Visca, Curt; Visca, Kelley (2003). [*How to Draw Cartoon Birds*](https://books.google.com/books?id=VqSquCLNrZcC&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck+%28or+hen%29&pg=PA16) . The Rosen Publishing Group. [ISBN](/wiki/ISBN_(identifier)) [9780823961566](/wiki/Special:BookSources/9780823961566) . -5. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992536_5-0) [***b***](#cite_ref-FOOTNOTECarboneras1992536_5-1) [***c***](#cite_ref-FOOTNOTECarboneras1992536_5-2) [***d***](#cite_ref-FOOTNOTECarboneras1992536_5-3) [Carboneras 1992](#CITEREFCarboneras1992) , p. 536. -6. [**^**](#cite_ref-FOOTNOTELivezey1986737–738_6-0) [Livezey 1986](#CITEREFLivezey1986) , pp. 737-738. -7. [**^**](#cite_ref-FOOTNOTEMadsenMcHughde_Kloet1988452_7-0) [Madsen, McHugh & de Kloet 1988](#CITEREFMadsenMcHughde_Kloet1988) , p. 452. -8. [**^**](#cite_ref-FOOTNOTEDonne-GousséLaudetHänni2002353–354_8-0) [Donne-Goussé, Laudet & Hänni 2002](#CITEREFDonne-GousséLaudetHänni2002) , pp. 353-354. -9. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992540_9-0) [***b***](#cite_ref-FOOTNOTECarboneras1992540_9-1) [***c***](#cite_ref-FOOTNOTECarboneras1992540_9-2) [***d***](#cite_ref-FOOTNOTECarboneras1992540_9-3) [***e***](#cite_ref-FOOTNOTECarboneras1992540_9-4) [***f***](#cite_ref-FOOTNOTECarboneras1992540_9-5) [Carboneras 1992](#CITEREFCarboneras1992) , p. 540. -10. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001191_10-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001) , p. 191. -11. [**^**](#cite_ref-FOOTNOTEKear2005448_11-0) [Kear 2005](#CITEREFKear2005) , p. 448. -12. [**^**](#cite_ref-FOOTNOTEKear2005622–623_12-0) [Kear 2005](#CITEREFKear2005) , p. 622-623. -13. [**^**](#cite_ref-FOOTNOTEKear2005686_13-0) [Kear 2005](#CITEREFKear2005) , p. 686. -14. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001193_14-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001) , p. 193. -15. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992537_15-0) [***b***](#cite_ref-FOOTNOTECarboneras1992537_15-1) [***c***](#cite_ref-FOOTNOTECarboneras1992537_15-2) [***d***](#cite_ref-FOOTNOTECarboneras1992537_15-3) [***e***](#cite_ref-FOOTNOTECarboneras1992537_15-4) [***f***](#cite_ref-FOOTNOTECarboneras1992537_15-5) [***g***](#cite_ref-FOOTNOTECarboneras1992537_15-6) [Carboneras 1992](#CITEREFCarboneras1992) , p. 537. -16. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998xix_16-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998) , p. xix. -17. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998_17-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998) . -18. [**^**](#cite_ref-FOOTNOTECarboneras1992538_18-0) [Carboneras 1992](#CITEREFCarboneras1992) , p. 538. -19. [**^**](#cite_ref-FOOTNOTEChristidisBoles200862_19-0) [Christidis & Boles 2008](#CITEREFChristidisBoles2008) , p. 62. -20. [**^**](#cite_ref-FOOTNOTEShirihai2008239,_245_20-0) [Shirihai 2008](#CITEREFShirihai2008) , pp. 239, 245. -21. ^ [***a***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-0) [***b***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-1) [Pratt, Bruner & Berrett 1987](#CITEREFPrattBrunerBerrett1987) , pp. 98-107. -22. [**^**](#cite_ref-FOOTNOTEFitterFitterHosking200052–3_22-0) [Fitter, Fitter & Hosking 2000](#CITEREFFitterFitterHosking2000) , pp. 52-3. -23. [**^**](#cite_ref-23) ["Pacific Black Duck"](http://www.wiresnr.org/pacificblackduck.html) . *www.wiresnr.org* . Retrieved 2018-04-27 . -24. [**^**](#cite_ref-24) Ogden, Evans. ["Dabbling Ducks"](https://www.sfu.ca/biology/wildberg/species/dabbducks.html) . CWE . Retrieved 2006-11-02 . -25. [**^**](#cite_ref-25) Karl Mathiesen (16 March 2015). ["Don't feed the ducks bread, say conservationists"](https://www.theguardian.com/environment/2015/mar/16/dont-feed-the-ducks-bread-say-conservationists) . *The Guardian* . Retrieved 13 November 2016 . -26. [**^**](#cite_ref-26) Rohwer, Frank C.; Anderson, Michael G. (1988). "Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl". *Current Ornithology* . pp. 187-221. [doi](/wiki/Doi_(identifier)) : [10.1007/978-1-4615-6787-5\_4](https://doi.org/10.1007%2F978-1-4615-6787-5_4) . [ISBN](/wiki/ISBN_(identifier)) [978-1-4615-6789-9](/wiki/Special:BookSources/978-1-4615-6789-9) . -27. [**^**](#cite_ref-27) Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ["Long-Term Pair Bonds in Harlequin Ducks"](https://doi.org/10.1093%2Fcondor%2F102.1.201) . *The Condor* . **102** (1): 201-205. [doi](/wiki/Doi_(identifier)) : [10.1093/condor/102.1.201](https://doi.org/10.1093%2Fcondor%2F102.1.201) . [hdl](/wiki/Hdl_(identifier)) : [10315/13797](https://hdl.handle.net/10315%2F13797) . -28. [**^**](#cite_ref-28) ["If You Find An Orphaned Duckling - Wildlife Rehabber"](https://web.archive.org/web/20180923152911/http://wildliferehabber.com/content/if-you-find-duckling) . *wildliferehabber.com* . Archived from [the original](https://wildliferehabber.com/content/if-you-find-duckling) on 2018-09-23 . Retrieved 2018-12-22 . -29. [**^**](#cite_ref-29) Carver, Heather (2011). [*The Duck Bible*](https://books.google.com/books?id=VGofAwAAQBAJ&q=mallard+sound+deep+and+raspy&pg=PA39) . Lulu.com. [ISBN](/wiki/ISBN_(identifier)) [9780557901562](/wiki/Special:BookSources/9780557901562) . [ [*self-published source*](/wiki/Wikipedia:Verifiability#Self-published_sources) ] -30. [**^**](#cite_ref-30) Titlow, Budd (2013-09-03). [*Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends*](https://books.google.com/books?id=fXJBBAAAQBAJ&q=Females+of+most+dabbling+ducks+make+the+classic+%22quack%22+sound+but+most+ducks+don%27t+quack&pg=PA123) . Rowman & Littlefield. [ISBN](/wiki/ISBN_(identifier)) [9780762797707](/wiki/Special:BookSources/9780762797707) . -31. [**^**](#cite_ref-31) Amos, Jonathan (2003-09-08). ["Sound science is quackers"](http://news.bbc.co.uk/2/hi/science/nature/3086890.stm) . *BBC News* . Retrieved 2006-11-02 . -32. [**^**](#cite_ref-32) ["Mythbusters Episode 8"](http://mythbustersresults.com/episode8) . 12 December 2003. -33. [**^**](#cite_ref-FOOTNOTEErlandson1994171_33-0) [Erlandson 1994](#CITEREFErlandson1994) , p. 171. -34. [**^**](#cite_ref-FOOTNOTEJeffries2008168,_243_34-0) [Jeffries 2008](#CITEREFJeffries2008) , pp. 168, 243. -35. ^ [***a***](#cite_ref-FOOTNOTESued-Badillo200365_35-0) [***b***](#cite_ref-FOOTNOTESued-Badillo200365_35-1) [Sued-Badillo 2003](#CITEREFSued-Badillo2003) , p. 65. -36. [**^**](#cite_ref-FOOTNOTEThorpe199668_36-0) [Thorpe 1996](#CITEREFThorpe1996) , p. 68. -37. [**^**](#cite_ref-FOOTNOTEMaisels199942_37-0) [Maisels 1999](#CITEREFMaisels1999) , p. 42. -38. [**^**](#cite_ref-FOOTNOTERau1876133_38-0) [Rau 1876](#CITEREFRau1876) , p. 133. -39. [**^**](#cite_ref-FOOTNOTEHigman201223_39-0) [Higman 2012](#CITEREFHigman2012) , p. 23. -40. [**^**](#cite_ref-FOOTNOTEHume201253_40-0) [Hume 2012](#CITEREFHume2012) , p. 53. -41. [**^**](#cite_ref-FOOTNOTEHume201252_41-0) [Hume 2012](#CITEREFHume2012) , p. 52. -42. [**^**](#cite_ref-FOOTNOTEFieldhouse2002167_42-0) [Fieldhouse 2002](#CITEREFFieldhouse2002) , p. 167. -43. [**^**](#cite_ref-43) Livingston, A. D. (1998-01-01). [*Guide to Edible Plants and Animals*](https://books.google.com/books?id=NViSMffyaSgC&q=%C2%A0%C2%A0In+many+areas,+wild+ducks+of+various+species+are+hunted+for+food+or+sport) . Wordsworth Editions, Limited. [ISBN](/wiki/ISBN_(identifier)) [9781853263774](/wiki/Special:BookSources/9781853263774) . -44. [**^**](#cite_ref-44) ["Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl"](https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) . *New York State Department of Environmental Conservation* . US Department of Commerce. December 2008. p. 3. [Archived](https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) from the original on 2022-10-09 . Retrieved 2 July 2019 . -45. [**^**](#cite_ref-45) ["FAOSTAT"](http://www.fao.org/faostat/en/#data/QL) . *www.fao.org* . Retrieved 2019-10-25 . -46. [**^**](#cite_ref-46) ["Anas platyrhynchos, Domestic Duck; DigiMorph Staff - The University of Texas at Austin"](http://digimorph.org/specimens/anas_platyrhynchos/skull/) . Digimorph.org . Retrieved 2012-12-23 . -47. [**^**](#cite_ref-47) Sy Montgomery. ["Mallard; Encyclopædia Britannica"](https://www.britannica.com/eb/topic-360302/mallard) . *Britannica.com* . Retrieved 2012-12-23 . -48. [**^**](#cite_ref-48) Glenday, Craig (2014). [*Guinness World Records*](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135) . Guinness World Records Limited. pp. [135](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135) . [ISBN](/wiki/ISBN_(identifier)) [978-1-908843-15-9](/wiki/Special:BookSources/978-1-908843-15-9) . -49. [**^**](#cite_ref-49) *Suomen kunnallisvaakunat* (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. [ISBN](/wiki/ISBN_(identifier)) [951-773-085-3](/wiki/Special:BookSources/951-773-085-3) . -50. [**^**](#cite_ref-50) ["Lubānas simbolika"](http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2) (in Latvian) . Retrieved September 9, 2021 . -51. [**^**](#cite_ref-51) ["Föglö"](http://digi.narc.fi/digi/view.ka?kuid=1738595) (in Swedish) . Retrieved September 9, 2021 . -52. [**^**](#cite_ref-52) Young, Emma. ["World's funniest joke revealed"](https://www.newscientist.com/article/dn2876-worlds-funniest-joke-revealed/) . *New Scientist* . Retrieved 7 January 2019 . -53. [**^**](#cite_ref-53) ["Howard the Duck (character)"](http://www.comics.org/character/name/Howard%20the%20Duck/sort/chrono/) . [*Grand Comics Database*](/wiki/Grand_Comics_Database) . -54. [**^**](#cite_ref-54) [Sanderson, Peter](/wiki/Peter_Sanderson) ; Gilbert, Laura (2008). "1970s". *Marvel Chronicle A Year by Year History* . London, United Kingdom: [Dorling Kindersley](/wiki/Dorling_Kindersley) . p. 161. [ISBN](/wiki/ISBN_(identifier)) [978-0756641238](/wiki/Special:BookSources/978-0756641238) . December saw the debut of the cigar-smoking Howard the Duck. In this story by writer Steve Gerber and artist Val Mayerik, various beings from different realities had begun turning up in the Man-Thing's Florida swamp, including this bad-tempered talking duck. -55. [**^**](#cite_ref-55) ["The Duck"](https://goducks.com/sports/2003/8/28/153778.aspx) . *University of Oregon Athletics* . Retrieved 2022-01-20 . +1. [**^**](#cite_ref-1) ["Duckling"](http://dictionary.reference.com/browse/duckling). *The American Heritage Dictionary of the English Language, Fourth Edition*. Houghton Mifflin Company. 2006. Retrieved 2015-05-22. +2. [**^**](#cite_ref-2) ["Duckling"](http://dictionary.reference.com/browse/duckling). *Kernerman English Multilingual Dictionary (Beta Version)*. K. Dictionaries Ltd. 2000-2006. Retrieved 2015-05-22. +3. [**^**](#cite_ref-3) Dohner, Janet Vorwald (2001). [*The Encyclopedia of Historic and Endangered Livestock and Poultry Breeds*](https://books.google.com/books?id=WJCTL_mC5w4C&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck&pg=PA457). Yale University Press. [ISBN](/wiki/ISBN_%28identifier%29) [978-0300138139](/wiki/Special:BookSources/978-0300138139). +4. [**^**](#cite_ref-4) Visca, Curt; Visca, Kelley (2003). [*How to Draw Cartoon Birds*](https://books.google.com/books?id=VqSquCLNrZcC&q=male+duck+is+called+a+drake+and+the+female+is+called+a+duck+%28or+hen%29&pg=PA16). The Rosen Publishing Group. [ISBN](/wiki/ISBN_%28identifier%29) [9780823961566](/wiki/Special:BookSources/9780823961566). +5. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992536_5-0) [***b***](#cite_ref-FOOTNOTECarboneras1992536_5-1) [***c***](#cite_ref-FOOTNOTECarboneras1992536_5-2) [***d***](#cite_ref-FOOTNOTECarboneras1992536_5-3) [Carboneras 1992](#CITEREFCarboneras1992), p. 536. +6. [**^**](#cite_ref-FOOTNOTELivezey1986737–738_6-0) [Livezey 1986](#CITEREFLivezey1986), pp. 737-738. +7. [**^**](#cite_ref-FOOTNOTEMadsenMcHughde_Kloet1988452_7-0) [Madsen, McHugh & de Kloet 1988](#CITEREFMadsenMcHughde_Kloet1988), p. 452. +8. [**^**](#cite_ref-FOOTNOTEDonne-GousséLaudetHänni2002353–354_8-0) [Donne-Goussé, Laudet & Hänni 2002](#CITEREFDonne-GousséLaudetHänni2002), pp. 353-354. +9. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992540_9-0) [***b***](#cite_ref-FOOTNOTECarboneras1992540_9-1) [***c***](#cite_ref-FOOTNOTECarboneras1992540_9-2) [***d***](#cite_ref-FOOTNOTECarboneras1992540_9-3) [***e***](#cite_ref-FOOTNOTECarboneras1992540_9-4) [***f***](#cite_ref-FOOTNOTECarboneras1992540_9-5) [Carboneras 1992](#CITEREFCarboneras1992), p. 540. +10. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001191_10-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001), p. 191. +11. [**^**](#cite_ref-FOOTNOTEKear2005448_11-0) [Kear 2005](#CITEREFKear2005), p. 448. +12. [**^**](#cite_ref-FOOTNOTEKear2005622–623_12-0) [Kear 2005](#CITEREFKear2005), p. 622-623. +13. [**^**](#cite_ref-FOOTNOTEKear2005686_13-0) [Kear 2005](#CITEREFKear2005), p. 686. +14. [**^**](#cite_ref-FOOTNOTEElphickDunningSibley2001193_14-0) [Elphick, Dunning & Sibley 2001](#CITEREFElphickDunningSibley2001), p. 193. +15. ^ [***a***](#cite_ref-FOOTNOTECarboneras1992537_15-0) [***b***](#cite_ref-FOOTNOTECarboneras1992537_15-1) [***c***](#cite_ref-FOOTNOTECarboneras1992537_15-2) [***d***](#cite_ref-FOOTNOTECarboneras1992537_15-3) [***e***](#cite_ref-FOOTNOTECarboneras1992537_15-4) [***f***](#cite_ref-FOOTNOTECarboneras1992537_15-5) [***g***](#cite_ref-FOOTNOTECarboneras1992537_15-6) [Carboneras 1992](#CITEREFCarboneras1992), p. 537. +16. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998xix_16-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998), p. xix. +17. [**^**](#cite_ref-FOOTNOTEAmerican_Ornithologists'_Union1998_17-0) [American Ornithologists' Union 1998](#CITEREFAmerican_Ornithologists'_Union1998). +18. [**^**](#cite_ref-FOOTNOTECarboneras1992538_18-0) [Carboneras 1992](#CITEREFCarboneras1992), p. 538. +19. [**^**](#cite_ref-FOOTNOTEChristidisBoles200862_19-0) [Christidis & Boles 2008](#CITEREFChristidisBoles2008), p. 62. +20. [**^**](#cite_ref-FOOTNOTEShirihai2008239,_245_20-0) [Shirihai 2008](#CITEREFShirihai2008), pp. 239, 245. +21. ^ [***a***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-0) [***b***](#cite_ref-FOOTNOTEPrattBrunerBerrett198798–107_21-1) [Pratt, Bruner & Berrett 1987](#CITEREFPrattBrunerBerrett1987), pp. 98-107. +22. [**^**](#cite_ref-FOOTNOTEFitterFitterHosking200052–3_22-0) [Fitter, Fitter & Hosking 2000](#CITEREFFitterFitterHosking2000), pp. 52-3. +23. [**^**](#cite_ref-23) ["Pacific Black Duck"](http://www.wiresnr.org/pacificblackduck.html). *www.wiresnr.org*. Retrieved 2018-04-27. +24. [**^**](#cite_ref-24) Ogden, Evans. ["Dabbling Ducks"](https://www.sfu.ca/biology/wildberg/species/dabbducks.html). CWE. Retrieved 2006-11-02. +25. [**^**](#cite_ref-25) Karl Mathiesen (16 March 2015). ["Don't feed the ducks bread, say conservationists"](https://www.theguardian.com/environment/2015/mar/16/dont-feed-the-ducks-bread-say-conservationists). *The Guardian*. Retrieved 13 November 2016. +26. [**^**](#cite_ref-26) Rohwer, Frank C.; Anderson, Michael G. (1988). "Female-Biased Philopatry, Monogamy, and the Timing of Pair Formation in Migratory Waterfowl". *Current Ornithology*. pp. 187-221. [doi](/wiki/Doi_%28identifier%29):[10.1007/978-1-4615-6787-5\_4](https://doi.org/10.1007%2F978-1-4615-6787-5_4). [ISBN](/wiki/ISBN_%28identifier%29) [978-1-4615-6789-9](/wiki/Special:BookSources/978-1-4615-6789-9). +27. [**^**](#cite_ref-27) Smith, Cyndi M.; Cooke, Fred; Robertson, Gregory J.; Goudie, R. Ian; Boyd, W. Sean (2000). ["Long-Term Pair Bonds in Harlequin Ducks"](https://doi.org/10.1093%2Fcondor%2F102.1.201). *The Condor*. **102** (1): 201-205. [doi](/wiki/Doi_%28identifier%29):[10.1093/condor/102.1.201](https://doi.org/10.1093%2Fcondor%2F102.1.201). [hdl](/wiki/Hdl_%28identifier%29):[10315/13797](https://hdl.handle.net/10315%2F13797). +28. [**^**](#cite_ref-28) ["If You Find An Orphaned Duckling - Wildlife Rehabber"](https://web.archive.org/web/20180923152911/http://wildliferehabber.com/content/if-you-find-duckling). *wildliferehabber.com*. Archived from [the original](https://wildliferehabber.com/content/if-you-find-duckling) on 2018-09-23. Retrieved 2018-12-22. +29. [**^**](#cite_ref-29) Carver, Heather (2011). [*The Duck Bible*](https://books.google.com/books?id=VGofAwAAQBAJ&q=mallard+sound+deep+and+raspy&pg=PA39). Lulu.com. [ISBN](/wiki/ISBN_%28identifier%29) [9780557901562](/wiki/Special:BookSources/9780557901562).[[*self-published source*](/wiki/Wikipedia:Verifiability#Self-published_sources)] +30. [**^**](#cite_ref-30) Titlow, Budd (2013-09-03). [*Bird Brains: Inside the Strange Minds of Our Fine Feathered Friends*](https://books.google.com/books?id=fXJBBAAAQBAJ&q=Females+of+most+dabbling+ducks+make+the+classic+%22quack%22+sound+but+most+ducks+don%27t+quack&pg=PA123). Rowman & Littlefield. [ISBN](/wiki/ISBN_%28identifier%29) [9780762797707](/wiki/Special:BookSources/9780762797707). +31. [**^**](#cite_ref-31) Amos, Jonathan (2003-09-08). ["Sound science is quackers"](http://news.bbc.co.uk/2/hi/science/nature/3086890.stm). *BBC News*. Retrieved 2006-11-02. +32. [**^**](#cite_ref-32) ["Mythbusters Episode 8"](http://mythbustersresults.com/episode8). 12 December 2003. +33. [**^**](#cite_ref-FOOTNOTEErlandson1994171_33-0) [Erlandson 1994](#CITEREFErlandson1994), p. 171. +34. [**^**](#cite_ref-FOOTNOTEJeffries2008168,_243_34-0) [Jeffries 2008](#CITEREFJeffries2008), pp. 168, 243. +35. ^ [***a***](#cite_ref-FOOTNOTESued-Badillo200365_35-0) [***b***](#cite_ref-FOOTNOTESued-Badillo200365_35-1) [Sued-Badillo 2003](#CITEREFSued-Badillo2003), p. 65. +36. [**^**](#cite_ref-FOOTNOTEThorpe199668_36-0) [Thorpe 1996](#CITEREFThorpe1996), p. 68. +37. [**^**](#cite_ref-FOOTNOTEMaisels199942_37-0) [Maisels 1999](#CITEREFMaisels1999), p. 42. +38. [**^**](#cite_ref-FOOTNOTERau1876133_38-0) [Rau 1876](#CITEREFRau1876), p. 133. +39. [**^**](#cite_ref-FOOTNOTEHigman201223_39-0) [Higman 2012](#CITEREFHigman2012), p. 23. +40. [**^**](#cite_ref-FOOTNOTEHume201253_40-0) [Hume 2012](#CITEREFHume2012), p. 53. +41. [**^**](#cite_ref-FOOTNOTEHume201252_41-0) [Hume 2012](#CITEREFHume2012), p. 52. +42. [**^**](#cite_ref-FOOTNOTEFieldhouse2002167_42-0) [Fieldhouse 2002](#CITEREFFieldhouse2002), p. 167. +43. [**^**](#cite_ref-43) Livingston, A. D. (1998-01-01). [*Guide to Edible Plants and Animals*](https://books.google.com/books?id=NViSMffyaSgC&q=%C2%A0%C2%A0In+many+areas,+wild+ducks+of+various+species+are+hunted+for+food+or+sport). Wordsworth Editions, Limited. [ISBN](/wiki/ISBN_%28identifier%29) [9781853263774](/wiki/Special:BookSources/9781853263774). +44. [**^**](#cite_ref-44) ["Study plan for waterfowl injury assessment: Determining PCB concentrations in Hudson river resident waterfowl"](https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF). *New York State Department of Environmental Conservation*. US Department of Commerce. December 2008. p. 3. [Archived](https://ghostarchive.org/archive/20221009/https://www.dec.ny.gov/docs/fish_marine_pdf/wfp09a.pdf) (PDF) from the original on 2022-10-09. Retrieved 2 July 2019. +45. [**^**](#cite_ref-45) ["FAOSTAT"](http://www.fao.org/faostat/en/#data/QL). *www.fao.org*. Retrieved 2019-10-25. +46. [**^**](#cite_ref-46) ["Anas platyrhynchos, Domestic Duck; DigiMorph Staff - The University of Texas at Austin"](http://digimorph.org/specimens/anas_platyrhynchos/skull/). Digimorph.org. Retrieved 2012-12-23. +47. [**^**](#cite_ref-47) Sy Montgomery. ["Mallard; Encyclopædia Britannica"](https://www.britannica.com/eb/topic-360302/mallard). *Britannica.com*. Retrieved 2012-12-23. +48. [**^**](#cite_ref-48) Glenday, Craig (2014). [*Guinness World Records*](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135). Guinness World Records Limited. pp. [135](https://archive.org/details/guinnessworldrec0000unse_r3e7/page/135). [ISBN](/wiki/ISBN_%28identifier%29) [978-1-908843-15-9](/wiki/Special:BookSources/978-1-908843-15-9). +49. [**^**](#cite_ref-49) *Suomen kunnallisvaakunat* (in Finnish). Suomen Kunnallisliitto. 1982. p. 147. [ISBN](/wiki/ISBN_%28identifier%29) [951-773-085-3](/wiki/Special:BookSources/951-773-085-3). +50. [**^**](#cite_ref-50) ["Lubānas simbolika"](http://www.lubana.lv/index.php/lv/homepage/lubanas-pilseta-2) (in Latvian). Retrieved September 9, 2021. +51. [**^**](#cite_ref-51) ["Föglö"](http://digi.narc.fi/digi/view.ka?kuid=1738595) (in Swedish). Retrieved September 9, 2021. +52. [**^**](#cite_ref-52) Young, Emma. ["World's funniest joke revealed"](https://www.newscientist.com/article/dn2876-worlds-funniest-joke-revealed/). *New Scientist*. Retrieved 7 January 2019. +53. [**^**](#cite_ref-53) ["Howard the Duck (character)"](http://www.comics.org/character/name/Howard%20the%20Duck/sort/chrono/). [*Grand Comics Database*](/wiki/Grand_Comics_Database). +54. [**^**](#cite_ref-54) [Sanderson, Peter](/wiki/Peter_Sanderson); Gilbert, Laura (2008). "1970s". *Marvel Chronicle A Year by Year History*. London, United Kingdom: [Dorling Kindersley](/wiki/Dorling_Kindersley). p. 161. [ISBN](/wiki/ISBN_%28identifier%29) [978-0756641238](/wiki/Special:BookSources/978-0756641238). December saw the debut of the cigar-smoking Howard the Duck. In this story by writer Steve Gerber and artist Val Mayerik, various beings from different realities had begun turning up in the Man-Thing's Florida swamp, including this bad-tempered talking duck. +55. [**^**](#cite_ref-55) ["The Duck"](https://goducks.com/sports/2003/8/28/153778.aspx). *University of Oregon Athletics*. Retrieved 2022-01-20. ### Sources -- American Ornithologists' Union (1998). [*Checklist of North American Birds*](https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) . Washington, DC: American Ornithologists' Union. [ISBN](/wiki/ISBN_(identifier)) [978-1-891276-00-2](/wiki/Special:BookSources/978-1-891276-00-2) . [Archived](https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) from the original on 2022-10-09. -- Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). *Handbook of the Birds of the World* . Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. [ISBN](/wiki/ISBN_(identifier)) [978-84-87334-10-8](/wiki/Special:BookSources/978-84-87334-10-8) . -- Christidis, Les; Boles, Walter E., eds. (2008). *Systematics and Taxonomy of Australian Birds* . Collingwood, VIC: Csiro Publishing. [ISBN](/wiki/ISBN_(identifier)) [978-0-643-06511-6](/wiki/Special:BookSources/978-0-643-06511-6) . -- Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). "A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis". *Molecular Phylogenetics and Evolution* . **23** (3): 339-356. [Bibcode](/wiki/Bibcode_(identifier)) : [2002MolPE..23..339D](https://ui.adsabs.harvard.edu/abs/2002MolPE..23..339D) . [doi](/wiki/Doi_(identifier)) : [10.1016/S1055-7903(02)00019-2](https://doi.org/10.1016%2FS1055-7903%2802%2900019-2) . [PMID](/wiki/PMID_(identifier)) [12099792](https://pubmed.ncbi.nlm.nih.gov/12099792) . -- Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). *The Sibley Guide to Bird Life and Behaviour* . London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-0-7136-6250-4](/wiki/Special:BookSources/978-0-7136-6250-4) . -- Erlandson, Jon M. (1994). [*Early Hunter-Gatherers of the California Coast*](https://books.google.com/books?id=nGTaBwAAQBAJ&pg=171) . New York, NY: Springer Science & Business Media. [ISBN](/wiki/ISBN_(identifier)) [978-1-4419-3231-0](/wiki/Special:BookSources/978-1-4419-3231-0) . -- Fieldhouse, Paul (2002). [*Food, Feasts, and Faith: An Encyclopedia of Food Culture in World Religions*](https://books.google.com/books?id=P-FqDgAAQBAJ&pg=PA167) . Vol. I: A-K. Santa Barbara: ABC-CLIO. [ISBN](/wiki/ISBN_(identifier)) [978-1-61069-412-4](/wiki/Special:BookSources/978-1-61069-412-4) . -- Fitter, Julian; Fitter, Daniel; Hosking, David (2000). *Wildlife of the Galápagos* . Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-10295-5](/wiki/Special:BookSources/978-0-691-10295-5) . -- Higman, B. W. (2012). [*How Food Made History*](https://books.google.com/books?id=YIUoz98yMvgC&pg=RA1-PA1801) . Chichester, UK: John Wiley & Sons. [ISBN](/wiki/ISBN_(identifier)) [978-1-4051-8947-7](/wiki/Special:BookSources/978-1-4051-8947-7) . -- Hume, Julian H. (2012). [*Extinct Birds*](https://books.google.com/books?id=40sxDwAAQBAJ&pg=PA53) . London: Christopher Helm. [ISBN](/wiki/ISBN_(identifier)) [978-1-4729-3744-5](/wiki/Special:BookSources/978-1-4729-3744-5) . -- Jeffries, Richard (2008). [*Holocene Hunter-Gatherers of the Lower Ohio River Valley*](https://archive.org/details/holocenehunterga0000jeff/mode/2up) . Tuscaloosa: University of Alabama Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-8173-1658-7](/wiki/Special:BookSources/978-0-8173-1658-7) . -- Kear, Janet, ed. (2005). *Ducks, Geese and Swans: Species Accounts (* Cairina *to* Mergus *)* . Bird Families of the World. Oxford: Oxford University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-19-861009-0](/wiki/Special:BookSources/978-0-19-861009-0) . -- Livezey, Bradley C. (October 1986). ["A phylogenetic analysis of recent Anseriform genera using morphological characters"](https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) . *The Auk* . **103** (4): 737-754. [doi](/wiki/Doi_(identifier)) : [10.1093/auk/103.4.737](https://doi.org/10.1093%2Fauk%2F103.4.737) . [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) from the original on 2022-10-09. -- Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ["A partial classification of waterfowl (Anatidae) based on single-copy DNA"](https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) . *The Auk* . **105** (3): 452-459. [doi](/wiki/Doi_(identifier)) : [10.1093/auk/105.3.452](https://doi.org/10.1093%2Fauk%2F105.3.452) . [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) from the original on 2022-10-09. -- Maisels, Charles Keith (1999). [*Early Civilizations of the Old World*](https://books.google.com/books?id=I2dgI2ijww8C&pg=PA42) . London: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-10975-8](/wiki/Special:BookSources/978-0-415-10975-8) . -- Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). *A Field Guide to the Birds of Hawaii and the Tropical Pacific* . Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [0-691-02399-9](/wiki/Special:BookSources/0-691-02399-9) . -- Rau, Charles (1876). [*Early Man in Europe*](https://books.google.com/books?id=9XBgAAAAIAAJ&pg=133) . New York: Harper & Brothers. [LCCN](/wiki/LCCN_(identifier)) [05040168](https://lccn.loc.gov/05040168) . -- Shirihai, Hadoram (2008). *A Complete Guide to Antarctic Wildlife* . Princeton, NJ, US: Princeton University Press. [ISBN](/wiki/ISBN_(identifier)) [978-0-691-13666-0](/wiki/Special:BookSources/978-0-691-13666-0) . -- Sued-Badillo, Jalil (2003). [*Autochthonous Societies*](https://books.google.com/books?id=zexcW7q-4LgC&pg=PA65) . General History of the Caribbean. Paris: UNESCO. [ISBN](/wiki/ISBN_(identifier)) [978-92-3-103832-7](/wiki/Special:BookSources/978-92-3-103832-7) . -- Thorpe, I. J. (1996). [*The Origins of Agriculture in Europe*](https://books.google.com/books?id=YA-EAgAAQBAJ&pg=PA68) . New York: Routledge. [ISBN](/wiki/ISBN_(identifier)) [978-0-415-08009-5](/wiki/Special:BookSources/978-0-415-08009-5) . +- American Ornithologists' Union (1998). [*Checklist of North American Birds*](https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF). Washington, DC: American Ornithologists' Union. [ISBN](/wiki/ISBN_%28identifier%29) [978-1-891276-00-2](/wiki/Special:BookSources/978-1-891276-00-2). [Archived](https://ghostarchive.org/archive/20221009/https://americanornithology.org/wp-content/uploads/2019/07/AOSChecklistTin-Falcon.pdf) (PDF) from the original on 2022-10-09. +- Carboneras, Carlos (1992). del Hoyo, Josep; Elliott, Andrew; Sargatal, Jordi (eds.). *Handbook of the Birds of the World*. Vol. 1: Ostrich to Ducks. Barcelona: Lynx Edicions. [ISBN](/wiki/ISBN_%28identifier%29) [978-84-87334-10-8](/wiki/Special:BookSources/978-84-87334-10-8). +- Christidis, Les; Boles, Walter E., eds. (2008). *Systematics and Taxonomy of Australian Birds*. Collingwood, VIC: Csiro Publishing. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-643-06511-6](/wiki/Special:BookSources/978-0-643-06511-6). +- Donne-Goussé, Carole; Laudet, Vincent; Hänni, Catherine (July 2002). "A molecular phylogeny of Anseriformes based on mitochondrial DNA analysis". *Molecular Phylogenetics and Evolution*. **23** (3): 339-356. [Bibcode](/wiki/Bibcode_%28identifier%29):[2002MolPE..23..339D](https://ui.adsabs.harvard.edu/abs/2002MolPE..23..339D). [doi](/wiki/Doi_%28identifier%29):[10.1016/S1055-7903(02)00019-2](https://doi.org/10.1016%2FS1055-7903%2802%2900019-2). [PMID](/wiki/PMID_%28identifier%29) [12099792](https://pubmed.ncbi.nlm.nih.gov/12099792). +- Elphick, Chris; Dunning, John B. Jr.; Sibley, David, eds. (2001). *The Sibley Guide to Bird Life and Behaviour*. London: Christopher Helm. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-7136-6250-4](/wiki/Special:BookSources/978-0-7136-6250-4). +- Erlandson, Jon M. (1994). [*Early Hunter-Gatherers of the California Coast*](https://books.google.com/books?id=nGTaBwAAQBAJ&pg=171). New York, NY: Springer Science & Business Media. [ISBN](/wiki/ISBN_%28identifier%29) [978-1-4419-3231-0](/wiki/Special:BookSources/978-1-4419-3231-0). +- Fieldhouse, Paul (2002). [*Food, Feasts, and Faith: An Encyclopedia of Food Culture in World Religions*](https://books.google.com/books?id=P-FqDgAAQBAJ&pg=PA167). Vol. I: A-K. Santa Barbara: ABC-CLIO. [ISBN](/wiki/ISBN_%28identifier%29) [978-1-61069-412-4](/wiki/Special:BookSources/978-1-61069-412-4). +- Fitter, Julian; Fitter, Daniel; Hosking, David (2000). *Wildlife of the Galápagos*. Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-691-10295-5](/wiki/Special:BookSources/978-0-691-10295-5). +- Higman, B. W. (2012). [*How Food Made History*](https://books.google.com/books?id=YIUoz98yMvgC&pg=RA1-PA1801). Chichester, UK: John Wiley & Sons. [ISBN](/wiki/ISBN_%28identifier%29) [978-1-4051-8947-7](/wiki/Special:BookSources/978-1-4051-8947-7). +- Hume, Julian H. (2012). [*Extinct Birds*](https://books.google.com/books?id=40sxDwAAQBAJ&pg=PA53). London: Christopher Helm. [ISBN](/wiki/ISBN_%28identifier%29) [978-1-4729-3744-5](/wiki/Special:BookSources/978-1-4729-3744-5). +- Jeffries, Richard (2008). [*Holocene Hunter-Gatherers of the Lower Ohio River Valley*](https://archive.org/details/holocenehunterga0000jeff/mode/2up). Tuscaloosa: University of Alabama Press. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-8173-1658-7](/wiki/Special:BookSources/978-0-8173-1658-7). +- Kear, Janet, ed. (2005). *Ducks, Geese and Swans: Species Accounts (*Cairina *to* Mergus*)*. Bird Families of the World. Oxford: Oxford University Press. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-19-861009-0](/wiki/Special:BookSources/978-0-19-861009-0). +- Livezey, Bradley C. (October 1986). ["A phylogenetic analysis of recent Anseriform genera using morphological characters"](https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF). *The Auk*. **103** (4): 737-754. [doi](/wiki/Doi_%28identifier%29):[10.1093/auk/103.4.737](https://doi.org/10.1093%2Fauk%2F103.4.737). [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v103n04/p0737-p0754.pdf) (PDF) from the original on 2022-10-09. +- Madsen, Cort S.; McHugh, Kevin P.; de Kloet, Siwo R. (July 1988). ["A partial classification of waterfowl (Anatidae) based on single-copy DNA"](https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF). *The Auk*. **105** (3): 452-459. [doi](/wiki/Doi_%28identifier%29):[10.1093/auk/105.3.452](https://doi.org/10.1093%2Fauk%2F105.3.452). [Archived](https://ghostarchive.org/archive/20221009/https://sora.unm.edu/sites/default/files/journals/auk/v105n03/p0452-p0459.pdf) (PDF) from the original on 2022-10-09. +- Maisels, Charles Keith (1999). [*Early Civilizations of the Old World*](https://books.google.com/books?id=I2dgI2ijww8C&pg=PA42). London: Routledge. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-415-10975-8](/wiki/Special:BookSources/978-0-415-10975-8). +- Pratt, H. Douglas; Bruner, Phillip L.; Berrett, Delwyn G. (1987). *A Field Guide to the Birds of Hawaii and the Tropical Pacific*. Princeton, NJ: Princeton University Press. [ISBN](/wiki/ISBN_%28identifier%29) [0-691-02399-9](/wiki/Special:BookSources/0-691-02399-9). +- Rau, Charles (1876). [*Early Man in Europe*](https://books.google.com/books?id=9XBgAAAAIAAJ&pg=133). New York: Harper & Brothers. [LCCN](/wiki/LCCN_%28identifier%29) [05040168](https://lccn.loc.gov/05040168). +- Shirihai, Hadoram (2008). *A Complete Guide to Antarctic Wildlife*. Princeton, NJ, US: Princeton University Press. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-691-13666-0](/wiki/Special:BookSources/978-0-691-13666-0). +- Sued-Badillo, Jalil (2003). [*Autochthonous Societies*](https://books.google.com/books?id=zexcW7q-4LgC&pg=PA65). General History of the Caribbean. Paris: UNESCO. [ISBN](/wiki/ISBN_%28identifier%29) [978-92-3-103832-7](/wiki/Special:BookSources/978-92-3-103832-7). +- Thorpe, I. J. (1996). [*The Origins of Agriculture in Europe*](https://books.google.com/books?id=YA-EAgAAQBAJ&pg=PA68). New York: Routledge. [ISBN](/wiki/ISBN_%28identifier%29) [978-0-415-08009-5](/wiki/Special:BookSources/978-0-415-08009-5). ## External links @@ -514,9 +514,9 @@ The 1992 Disney film [*The Mighty Ducks*](/wiki/The_Mighty_Ducks_(film)) , starr | National | - [United States](https://id.loc.gov/authorities/sh85039879) - [France](https://catalogue.bnf.fr/ark:/12148/cb119761481) - [BnF data](https://data.bnf.fr/ark:/12148/cb119761481) - [Japan](https://id.ndl.go.jp/auth/ndlna/00564819) - [Latvia](https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number=000090751&P_CON_LNG=ENG) - [Israel](http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007565486205171) | | Other | - [IdRef](https://www.idref.fr/027796124) | -Retrieved from " [https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351](https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351) " +Retrieved from "[https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351](https://en.wikipedia.org/w/index.php?title=Duck&oldid=1246843351)" -[Categories](/wiki/Help:Category) : +[Categories](/wiki/Help:Category): - [Ducks](/wiki/Category:Ducks) - [Game birds](/wiki/Category:Game_birds) @@ -526,20 +526,20 @@ Hidden categories: - [All accuracy disputes](/wiki/Category:All_accuracy_disputes) - [Accuracy disputes from February 2020](/wiki/Category:Accuracy_disputes_from_February_2020) -- [CS1 Finnish-language sources (fi)](/wiki/Category:CS1_Finnish-language_sources_(fi)) -- [CS1 Latvian-language sources (lv)](/wiki/Category:CS1_Latvian-language_sources_(lv)) -- [CS1 Swedish-language sources (sv)](/wiki/Category:CS1_Swedish-language_sources_(sv)) +- [CS1 Finnish-language sources (fi)](/wiki/Category:CS1_Finnish-language_sources_%28fi%29) +- [CS1 Latvian-language sources (lv)](/wiki/Category:CS1_Latvian-language_sources_%28lv%29) +- [CS1 Swedish-language sources (sv)](/wiki/Category:CS1_Swedish-language_sources_%28sv%29) - [Articles with short description](/wiki/Category:Articles_with_short_description) - [Short description is different from Wikidata](/wiki/Category:Short_description_is_different_from_Wikidata) - [Wikipedia indefinitely move-protected pages](/wiki/Category:Wikipedia_indefinitely_move-protected_pages) - [Wikipedia indefinitely semi-protected pages](/wiki/Category:Wikipedia_indefinitely_semi-protected_pages) - [Articles with 'species' microformats](/wiki/Category:Articles_with_%27species%27_microformats) -- [Articles containing Old English (ca. 450-1100)-language text](/wiki/Category:Articles_containing_Old_English_(ca._450-1100)-language_text) +- [Articles containing Old English (ca. 450-1100)-language text](/wiki/Category:Articles_containing_Old_English_%28ca._450-1100%29-language_text) - [Articles containing Dutch-language text](/wiki/Category:Articles_containing_Dutch-language_text) - [Articles containing German-language text](/wiki/Category:Articles_containing_German-language_text) - [Articles containing Norwegian-language text](/wiki/Category:Articles_containing_Norwegian-language_text) - [Articles containing Lithuanian-language text](/wiki/Category:Articles_containing_Lithuanian-language_text) -- [Articles containing Ancient Greek (to 1453)-language text](/wiki/Category:Articles_containing_Ancient_Greek_(to_1453)-language_text) +- [Articles containing Ancient Greek (to 1453)-language text](/wiki/Category:Articles_containing_Ancient_Greek_%28to_1453%29-language_text) - [All articles with self-published sources](/wiki/Category:All_articles_with_self-published_sources) - [Articles with self-published sources from February 2020](/wiki/Category:Articles_with_self-published_sources_from_February_2020) - [All articles with unsourced statements](/wiki/Category:All_articles_with_unsourced_statements) diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.itxt b/tests/data/jats/groundtruth/elife-56337.nxml.itxt index 7a401a7e90..84466fdea0 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.itxt +++ b/tests/data/jats/groundtruth/elife-56337.nxml.itxt @@ -7,9 +7,9 @@ item-0 at level 0: unspecified: group _root_ item-6 at level 2: section_header: Introduction item-7 at level 3: text: Nearly half of the human and mou ... s are active beyond early development. item-8 at level 3: inline: group group - item-9 at level 4: text: TEs, especially long terminal re ... ion by recruiting KAP1 to TEs. Indeed, + item-9 at level 4: text: TEs, especially long terminal re ... on by recruiting KAP1 to TEs. Indeed, item-10 at level 4: text: Zfp809 - item-11 at level 4: text: knock-out (KO) in mice resulted ... f evolutionarily young KRAB-ZFP genes. + item-11 at level 4: text: knock-out (KO) in mice resulted ... f evolutionarily young KRAB-ZFP genes. item-12 at level 2: section_header: Results item-13 at level 3: section_header: Mouse KRAB-ZFPs target retrotransposons item-14 at level 4: text: We analyzed the RNA expression p ... duplications (Kauzlaric et al., 2017). @@ -24,9 +24,9 @@ item-0 at level 0: unspecified: group _root_ item-21 at level 4: inline: group group item-22 at level 5: text: We generally observed that KRAB- ... ZFP961 motif closely resembles the PBS item-23 at level 5: text: Lys1,2 - item-24 at level 5: text: (Figure 1—figure supplement 3A), ... f et al., 2008). Repression of the PBS + item-24 at level 5: text: (Figure 1—figure supplement 3A) ... f et al., 2008). Repression of the PBS item-25 at level 5: text: Lys1,2 - item-26 at level 5: text: by ZFP961 was also confirmed in ... responsible for this silencing effect. + item-26 at level 5: text: by ZFP961 was also confirmed in ... responsible for this silencing effect. item-27 at level 4: text: To further test the hypothesis t ... t easily evade repression by mutation. item-28 at level 4: text: Our KRAB-ZFP ChIP-seq dataset al ... ntirely shift the mode of DNA binding. item-29 at level 3: section_header: Genetic deletion of KRAB-ZFP gen ... leads to retrotransposon reactivation @@ -38,15 +38,15 @@ item-0 at level 0: unspecified: group _root_ item-34 at level 4: picture item-34 at level 5: caption: Figure 3. TE-dependent gene activation in KRAB-ZFP cluster KO ES cells. (A) Differential gene expression in Chr2-cl and Chr4-cl KO ES cells. Significantly up- and downregulated genes (adjusted p-value<0.05) are highlighted in red and green, respectively, KRAB-ZFP genes within the deleted clusters are shown in blue. (B) Correlation of TEs and gene deregulation. Plots show enrichment of TE groups within 100 kb of up- and downregulated genes relative to all genes. Significantly overrepresented LTR and LINE groups (adjusted p-value<0.1) are highlighted in blue and red, respectively. (C) Schematic view of the downstream region of Chst1 where a 5’ truncated ETn insertion is located. ChIP-seq (Input subtracted from ChIP) data for overexpressed epitope-tagged Gm13051 (a Chr4-cl KRAB-ZFP) in F9 EC cells, and re-mapped KAP1 (GEO accession: GSM1406445) and H3K9me3 (GEO accession: GSM1327148) in WT ES cells are shown together with RNA-seq data from Chr4-cl WT and KO ES cells (mapped using Bowtie (-a -m 1 --strata -v 2) to exclude reads that cannot be uniquely mapped). (D) RT-qPCR analysis of Chst1 mRNA expression in Chr4-cl WT and KO ES cells with or without the CRISPR/Cas9 deleted ETn insertion near Chst1. Values represent mean expression (normalized to Gapdh) from three biological replicates per sample (each performed in three technical replicates) in arbitrary units. Error bars represent standard deviation and asterisks indicate significance (p<0.01, Student’s t-test). n.s.: not significant. (E) Mean coverage of ChIP-seq data (Input subtracted from ChIP) in Chr4-cl WT and KO ES cells over 127 full-length ETn insertions. The binding sites of the Chr4-cl KRAB-ZFPs Rex2 and Gm13051 are indicated by dashed lines. item-35 at level 4: inline: group group - item-36 at level 5: text: While we generally observed that ... ETn insertion to the first exon of the + item-36 at level 5: text: While we generally observed that ... Tn insertion to the first exon of the item-37 at level 5: text: Cd59a - item-38 at level 5: text: gene, which is strongly activate ... is located about 60 kb from the TSS of + item-38 at level 5: text: gene, which is strongly activat ... s located about 60 kb from the TSS of item-39 at level 5: text: Chst1 - item-40 at level 5: text: , one of the top-upregulated gen ... C). RT-qPCR analysis revealed that the + item-40 at level 5: text: , one of the top-upregulated gen ... ). RT-qPCR analysis revealed that the item-41 at level 5: text: Chst1 - item-42 at level 5: text: upregulation phenotype in Chr4-c ... ontrolled ETn-borne enhancer regulates + item-42 at level 5: text: upregulation phenotype in Chr4- ... ntrolled ETn-borne enhancer regulates item-43 at level 5: text: Chst1 - item-44 at level 5: text: expression (Figure 3D). Furtherm ... he internal region and not on the LTR. + item-44 at level 5: text: expression (Figure 3D). Further ... he internal region and not on the LTR. item-45 at level 3: section_header: ETn retrotransposition in Chr4-cl KO and WT mice item-46 at level 4: text: IAP, ETn/ETnERV and MuLV/RLTR4 r ... s may contribute to reduced viability. item-47 at level 4: text: We reasoned that retrotransposon ... Tn insertions at a high recovery rate. @@ -66,28 +66,28 @@ item-0 at level 0: unspecified: group _root_ item-59 at level 4: inline: group group item-60 at level 5: text: Mouse ES cells and F9 EC cells w ... nes originate from JM8A3.N1 C57BL/6N-A item-61 at level 5: text: tm1Brd - item-62 at level 5: text: ES cells (KOMP Repository). Chr2 ... KO/KO and KO/WT (B6/129 F2) offspring. + item-62 at level 5: text: ES cells (KOMP Repository). Chr ... KO/KO and KO/WT (B6/129 F2) offspring. item-63 at level 3: section_header: Generation of KRAB-ZFP expressing cell lines item-64 at level 4: inline: group group - item-65 at level 5: text: KRAB-ZFP ORFs were PCR-amplified ... r 3XHA tags in F9 EC or ES cells using + item-65 at level 5: text: KRAB-ZFP ORFs were PCR-amplified ... 3XHA tags in F9 EC or ES cells using item-66 at level 5: text: Sleeping beauty - item-67 at level 5: text: transposon-based (Wolf et al., 2 ... led and further expanded for ChIP-seq. + item-67 at level 5: text: transposon-based (Wolf et al., ... led and further expanded for ChIP-seq. item-68 at level 3: section_header: CRISPR/Cas9 mediated deletion of KRAB-ZFP clusters and an MMETn insertion item-69 at level 4: inline: group group item-70 at level 5: text: All gRNAs were expressed from th ... -Chimeric_BB-CBh-hSpCas9 vector (RRID: item-71 at level 5: text: Addgene_42230 item-72 at level 5: text: ) and nucleofected into 10 item-73 at level 5: text: 6 - item-74 at level 5: text: ES cells using Amaxa nucleofecti ... PCR genotyping (Supplementary file 3). + item-74 at level 5: text: ES cells using Amaxa nucleofect ... PCR genotyping (Supplementary file 3). item-75 at level 3: section_header: ChIP-seq analysis item-76 at level 4: inline: group group item-77 at level 5: text: For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 10 item-78 at level 5: text: 7 - item-79 at level 5: text: cells were crosslinked and immun ... -FLAG (Sigma-Aldrich Cat# F1804, RRID: + item-79 at level 5: text: cells were crosslinked and immu ... -FLAG (Sigma-Aldrich Cat# F1804, RRID: item-80 at level 5: text: AB_262044 item-81 at level 5: text: ) or anti-HA (Abcam Cat# ab9110, RRID: item-82 at level 5: text: AB_307019 - item-83 at level 5: text: or Covance Cat# MMS-101P-200, RRID: + item-83 at level 5: text: or Covance Cat# MMS-101P-200, RRID: item-84 at level 5: text: AB_10064068 item-85 at level 5: text: ) antibody using one of two prev ... serum (Active Motif Cat# 39161, RRID: item-86 at level 5: text: AB_2532132 @@ -112,9 +112,9 @@ item-0 at level 0: unspecified: group _root_ item-105 at level 5: text: ). The right-tailed p-values bet ... were re-mapped using Bowtie (--best). item-106 at level 3: section_header: Luciferase reporter assays item-107 at level 4: inline: group group - item-108 at level 5: text: For KRAB-ZFP repression assays, ... y of the MMETn element upstream of the + item-108 at level 5: text: For KRAB-ZFP repression assays, ... of the MMETn element upstream of the item-109 at level 5: text: Cd59a - item-110 at level 5: text: gene, fragments of varying sizes ... after transfection as described above. + item-110 at level 5: text: gene, fragments of varying size ... after transfection as described above. item-111 at level 3: section_header: RNA-seq analysis item-112 at level 4: inline: group group item-113 at level 5: text: Whole RNA was purified using RNe ... reads on an Illumina HiSeq2500 (RRID: @@ -127,25 +127,25 @@ item-0 at level 0: unspecified: group _root_ item-120 at level 5: text: SCR_012954 item-121 at level 5: text: ) were counted using BEDTools Mu ... expression analysis with DESeq2 (RRID: item-122 at level 5: text: SCR_015687 - item-123 at level 5: text: ). For differential gene express ... function of BED tools. The probability + item-123 at level 5: text: ). For differential gene express ... unction of BED tools. The probability item-124 at level 5: text: p - item-125 at level 5: text: in the binomial distribution was ... apped with KRAB-ZFP peaks. Then, given + item-125 at level 5: text: in the binomial distribution wa ... pped with KRAB-ZFP peaks. Then, given item-126 at level 5: text: n - item-127 at level 5: text: which is the number of specific groups of genes, and + item-127 at level 5: text: which is the number of specific groups of genes, and item-128 at level 5: text: x - item-129 at level 5: text: which is the number of this grou ... lemented in the R function p.adjust(). + item-129 at level 5: text: which is the number of this gro ... lemented in the R function p.adjust(). item-130 at level 3: section_header: Reduced representation bisulfite sequencing (RRBS-seq) item-131 at level 4: text: For RRBS-seq analysis, Chr4-cl W ... h sample were considered for analysis. item-132 at level 3: section_header: Retrotransposition assay item-133 at level 4: inline: group group item-134 at level 5: text: The retrotransposition vectors p ... MusD retrotransposition assays, 5 × 10 item-135 at level 5: text: 4 - item-136 at level 5: text: HeLa cells (ATCC CCL-2) were tra ... were stained with Amido Black (Sigma). + item-136 at level 5: text: HeLa cells (ATCC CCL-2) were tr ... were stained with Amido Black (Sigma). item-137 at level 3: section_header: Capture-seq screen item-138 at level 4: inline: group group item-139 at level 5: text: To identify novel retrotransposo ... target enrichment using the SureSelect item-140 at level 5: text: QXT - item-141 at level 5: text: Target Enrichment kit (Agilent). ... assembly using the Unicycler software. + item-141 at level 5: text: Target Enrichment kit (Agilent) ... assembly using the Unicycler software. item-142 at level 2: section_header: Funding Information item-143 at level 3: text: This paper was supported by the following grants: item-144 at level 3: list: group list @@ -262,7 +262,7 @@ item-0 at level 0: unspecified: group _root_ item-255 at level 3: text: This is the first study that add ... ontrol ever adapting retrotransposons. item-256 at level 3: text: Decision letter after peer review: item-257 at level 3: inline: group group - item-258 at level 4: text: Thank you for submitting your ar ... e murine lineage" for consideration by + item-258 at level 4: text: Thank you for submitting your ar ... murine lineage" for consideration by item-259 at level 4: text: eLife item-260 at level 4: text: . Your article has been reviewed ... ir identity: Joan Barau (Reviewer #3). item-261 at level 3: text: The reviewers have discussed the ... help you prepare a revised submission. diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.json b/tests/data/jats/groundtruth/elife-56337.nxml.json index 30b44f3eab..a7991edf33 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.json +++ b/tests/data/jats/groundtruth/elife-56337.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "elife-56337", "origin": { "mimetype": "application/xml", @@ -890,8 +890,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed,", - "text": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed," + "orig": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed, ", + "text": "TEs, especially long terminal repeat (LTR) retrotransposons, also known as endogenous retroviruses (ERVs), can affect expression of neighboring genes through their promoter and enhancer functions (Macfarlan et al., 2012; Wang et al., 2014; Thompson et al., 2016). KAP1 deletion in mouse ES cells causes rapid gene deregulation (Rowe et al., 2013), indicating that KRAB-ZFPs may regulate gene expression by recruiting KAP1 to TEs. Indeed, " }, { "self_ref": "#/texts/8", @@ -921,8 +921,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes.", - "text": "knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes." + "orig": " knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes.", + "text": " knock-out (KO) in mice resulted in transcriptional activation of a handful of genes in various tissues adjacent to ZFP809-targeted VL30-Pro elements (Wolf et al., 2015b). It has therefore been speculated that KRAB-ZFPs bind to TE sequences to domesticate them for gene regulatory innovation (Ecco et al., 2017). This idea is supported by the observation that many human KRAB-ZFPs target TE groups that have lost their coding potential millions of years ago and that KRAB-ZFP target sequences within TEs are in some cases under purifying selection (Imbeault et al., 2017). However, there are also clear signs of an evolutionary arms-race between human TEs and KRAB-ZFPs (Jacobs et al., 2014), indicating that some KRAB-ZFPs may limit TE mobility for stretches of evolutionary time, prior to their ultimate loss from the genome or adaptation for other regulatory functions. Here we use the laboratory mouse, which has undergone a recent expansion of the KRAB-ZFP family, to determine the in vivo requirement of the majority of evolutionarily young KRAB-ZFP genes." }, { "self_ref": "#/texts/10", @@ -1104,8 +1104,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS", - "text": "(Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS" + "orig": " (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS", + "text": " (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS" }, { "self_ref": "#/texts/21", @@ -1135,8 +1135,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect.", - "text": "by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect." + "orig": " by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect.", + "text": " by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect." }, { "self_ref": "#/texts/23", @@ -1262,8 +1262,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the", - "text": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the" + "orig": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the ", + "text": "While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the " }, { "self_ref": "#/texts/32", @@ -1293,8 +1293,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of", - "text": "gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of" + "orig": " gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of ", + "text": " gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of " }, { "self_ref": "#/texts/34", @@ -1324,8 +1324,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the", - "text": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the" + "orig": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the ", + "text": ", one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the " }, { "self_ref": "#/texts/36", @@ -1355,8 +1355,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates", - "text": "upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates" + "orig": " upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates ", + "text": " upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates " }, { "self_ref": "#/texts/38", @@ -1386,8 +1386,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR.", - "text": "expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR." + "orig": " expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR.", + "text": " expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR." }, { "self_ref": "#/texts/40", @@ -1665,8 +1665,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring.", - "text": "ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring." + "orig": " ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring.", + "text": " ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring." }, { "self_ref": "#/texts/57", @@ -1694,8 +1694,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using", - "text": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using" + "orig": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using ", + "text": "KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimization (Supplementary file 1), and stably expressed with 3XFLAG or 3XHA tags in F9 EC or ES cells using " }, { "self_ref": "#/texts/59", @@ -1725,8 +1725,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq.", - "text": "transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq." + "orig": " transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq.", + "text": " transposon-based (Wolf et al., 2015b) or lentiviral expression vectors (Imbeault et al., 2017; Supplementary file 1). Cells were selected with puromycin (1 µg/ml) and resistant clones were pooled and further expanded for ChIP-seq." }, { "self_ref": "#/texts/61", @@ -1810,8 +1810,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3).", - "text": "ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3)." + "orig": " ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3).", + "text": " ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3)." }, { "self_ref": "#/texts/67", @@ -1873,8 +1873,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:", - "text": "cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:" + "orig": " cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:", + "text": " cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:" }, { "self_ref": "#/texts/71", @@ -1923,8 +1923,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or Covance Cat# MMS-101P-200, RRID:", - "text": "or Covance Cat# MMS-101P-200, RRID:" + "orig": " or Covance Cat# MMS-101P-200, RRID:", + "text": " or Covance Cat# MMS-101P-200, RRID:" }, { "self_ref": "#/texts/75", @@ -2214,8 +2214,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the", - "text": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the" + "orig": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the ", + "text": "For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP target sequences (Supplementary file 3) were cloned upstream of the SV40 promoter of the pGL3-Promoter vector (Promega) between the restriction sites for NheI and XhoI. 33 ng of reporter vectors were co-transfected (Lipofectamine 2000, Thermofisher) with 33 ng pRL-SV40 (Promega) for normalization and 33 ng of transient KRAB-ZFP expression vectors (in pcDNA3.1) or empty pcDNA3.1 into 293 T cells seeded one day earlier in 96-well plates. Cells were lysed 48 hr after transfection and luciferase/Renilla luciferase activity was measured using the Dual-Luciferase Reporter Assay System (Promega). To measure the transcriptional activity of the MMETn element upstream of the " }, { "self_ref": "#/texts/98", @@ -2245,8 +2245,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above.", - "text": "gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above." + "orig": " gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above.", + "text": " gene, fragments of varying sizes (Supplementary file 3) were cloned into the promoter-less pGL3-basic vector (Promega) using NheI and NcoI sites. 70 ng of reporter vectors were cotransfected with 30 ng pRL-SV40 into feeder-depleted Chr4-cl WT and KO ES cells, seeded into a gelatinized 96-well plate 2 hr before transfection. Luciferase activity was measured 48 hr after transfection as described above." }, { "self_ref": "#/texts/100", @@ -2399,8 +2399,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability", - "text": "). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability" + "orig": "). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability ", + "text": "). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability " }, { "self_ref": "#/texts/112", @@ -2430,8 +2430,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given", - "text": "in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given" + "orig": " in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given ", + "text": " in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given " }, { "self_ref": "#/texts/114", @@ -2461,8 +2461,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "which is the number of specific groups of genes, and", - "text": "which is the number of specific groups of genes, and" + "orig": " which is the number of specific groups of genes, and ", + "text": " which is the number of specific groups of genes, and " }, { "self_ref": "#/texts/116", @@ -2492,8 +2492,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust().", - "text": "which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust()." + "orig": " which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust().", + "text": " which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust()." }, { "self_ref": "#/texts/118", @@ -2581,8 +2581,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma).", - "text": "HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma)." + "orig": " HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma).", + "text": " HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma)." }, { "self_ref": "#/texts/124", @@ -2641,8 +2641,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software.", - "text": "Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software." + "orig": " Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software.", + "text": " Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software." }, { "self_ref": "#/texts/128", @@ -4305,8 +4305,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Thank you for submitting your article \"KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage\" for consideration by", - "text": "Thank you for submitting your article \"KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage\" for consideration by" + "orig": "Thank you for submitting your article \"KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage\" for consideration by ", + "text": "Thank you for submitting your article \"KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage\" for consideration by " }, { "self_ref": "#/texts/239", diff --git a/tests/data/jats/groundtruth/elife-56337.nxml.md b/tests/data/jats/groundtruth/elife-56337.nxml.md index 61e7a26667..a5d9b50979 100644 --- a/tests/data/jats/groundtruth/elife-56337.nxml.md +++ b/tests/data/jats/groundtruth/elife-56337.nxml.md @@ -20,7 +20,7 @@ TEs, especially long terminal repeat (LTR) retrotransposons, also known as endog We analyzed the RNA expression profiles of mouse KRAB-ZFPs across a wide range of tissues to identify candidates active in early embryos/ES cells. While the majority of KRAB-ZFPs are expressed at low levels and uniformly across tissues, a group of KRAB-ZFPs are highly and almost exclusively expressed in ES cells (Figure 1—figure supplement 1A). About two thirds of these KRAB-ZFPs are physically linked in two clusters on chromosome 2 (Chr2-cl) and 4 (Chr4-cl) (Figure 1—figure supplement 1B). These two clusters encode 40 and 21 KRAB-ZFP annotated genes, respectively, which, with one exception on Chr4-cl, do not have orthologues in rat or any other sequenced mammals (Supplementary file 1). The KRAB-ZFPs within these two genomic clusters also group together phylogenetically (Figure 1—figure supplement 1C), indicating these gene clusters arose by a series of recent segmental gene duplications (Kauzlaric et al., 2017). -To determine the binding sites of the KRAB-ZFPs within these and other gene clusters, we expressed epitope-tagged KRAB-ZFPs using stably integrating vectors in mouse embryonic carcinoma (EC) or ES cells (Table 1, Supplementary file 1) and performed chromatin immunoprecipitation followed by deep sequencing (ChIP-seq). We then determined whether the identified binding sites are significantly enriched over annotated TEs and used the non-repetitive peak fraction to identify binding motifs. We discarded 7 of 68 ChIP-seq datasets because we could not obtain a binding motif or a target TE and manual inspection confirmed low signal to noise ratio. Of the remaining 61 KRAB-ZFPs, 51 significantly overlapped at least one TE subfamily ( *adjusted p-value* <1e-5). Altogether, 81 LTR retrotransposon, 18 LINE, 10 SINE and one DNA transposon subfamilies were targeted by at least one of the 51 KRAB-ZFPs (Figure 1A and Supplementary file 1). Chr2-cl KRAB-ZFPs preferably bound IAPEz retrotransposons and L1-type LINEs, while Chr4-cl KRAB-ZFPs targeted various retrotransposons, including the closely related MMETn (hereafter referred to as ETn) and ETnERV (also known as MusD) elements (Figure 1A). ETn elements are non-autonomous LTR retrotransposons that require trans-complementation by the fully coding ETnERV elements that contain Gag, Pro and Pol genes (Ribet et al., 2004). These elements have accumulated to ~240 and~100 copies in the reference C57BL/6 genome, respectively, with ~550 solitary LTRs (Baust et al., 2003). Both ETn and ETnERVs are still active, generating polymorphisms and mutations in several mouse strains (Gagnier et al., 2019). The validity of our ChIP-seq screen was confirmed by the identification of binding motifs - which often resembled the computationally predicted motifs (Figure 1—figure supplement 2A) - for the majority of screened KRAB-ZFPs (Supplementary file 1). Moreover, predicted and experimentally determined motifs were found in targeted TEs in most cases (Supplementary file 1), and reporter repression assays confirmed KRAB-ZFP induced silencing for all the tested sequences (Figure 1—figure supplement 2B). Finally, we observed KAP1 and H3K9me3 enrichment at most of the targeted TEs in wild type ES cells, indicating that most of these KRAB-ZFPs are functionally active in the early embryo (Figure 1A). +To determine the binding sites of the KRAB-ZFPs within these and other gene clusters, we expressed epitope-tagged KRAB-ZFPs using stably integrating vectors in mouse embryonic carcinoma (EC) or ES cells (Table 1, Supplementary file 1) and performed chromatin immunoprecipitation followed by deep sequencing (ChIP-seq). We then determined whether the identified binding sites are significantly enriched over annotated TEs and used the non-repetitive peak fraction to identify binding motifs. We discarded 7 of 68 ChIP-seq datasets because we could not obtain a binding motif or a target TE and manual inspection confirmed low signal to noise ratio. Of the remaining 61 KRAB-ZFPs, 51 significantly overlapped at least one TE subfamily (*adjusted p-value*<1e-5). Altogether, 81 LTR retrotransposon, 18 LINE, 10 SINE and one DNA transposon subfamilies were targeted by at least one of the 51 KRAB-ZFPs (Figure 1A and Supplementary file 1). Chr2-cl KRAB-ZFPs preferably bound IAPEz retrotransposons and L1-type LINEs, while Chr4-cl KRAB-ZFPs targeted various retrotransposons, including the closely related MMETn (hereafter referred to as ETn) and ETnERV (also known as MusD) elements (Figure 1A). ETn elements are non-autonomous LTR retrotransposons that require trans-complementation by the fully coding ETnERV elements that contain Gag, Pro and Pol genes (Ribet et al., 2004). These elements have accumulated to ~240 and~100 copies in the reference C57BL/6 genome, respectively, with ~550 solitary LTRs (Baust et al., 2003). Both ETn and ETnERVs are still active, generating polymorphisms and mutations in several mouse strains (Gagnier et al., 2019). The validity of our ChIP-seq screen was confirmed by the identification of binding motifs - which often resembled the computationally predicted motifs (Figure 1—figure supplement 2A) - for the majority of screened KRAB-ZFPs (Supplementary file 1). Moreover, predicted and experimentally determined motifs were found in targeted TEs in most cases (Supplementary file 1), and reporter repression assays confirmed KRAB-ZFP induced silencing for all the tested sequences (Figure 1—figure supplement 2B). Finally, we observed KAP1 and H3K9me3 enrichment at most of the targeted TEs in wild type ES cells, indicating that most of these KRAB-ZFPs are functionally active in the early embryo (Figure 1A). Figure 1. Genome-wide binding patterns of mouse KRAB-ZFPs. (A) Probability heatmap of KRAB-ZFP binding to TEs. Blue color intensity (main field) corresponds to -log10 (adjusted p-value) enrichment of ChIP-seq peak overlap with TE groups (Fisher’s exact test). The green/red color intensity (top panel) represents mean KAP1 (GEO accession: GSM1406445) and H3K9me3 (GEO accession: GSM1327148) enrichment (respectively) at peaks overlapping significantly targeted TEs (adjusted p-value<1e-5) in WT ES cells. (B) Summarized ChIP-seq signal for indicated KRAB-ZFPs and previously published KAP1 and H3K9me3 in WT ES cells across 127 intact ETn elements. (C) Heatmaps of KRAB-ZFP ChIP-seq signal at ChIP-seq peaks. For better comparison, peaks for all three KRAB-ZFPs were called with the same parameters (p<1e-10, peak enrichment >20). The top panel shows a schematic of the arrangement of the contact amino acid composition of each zinc finger. Zinc fingers are grouped and colored according to similarity, with amino acid differences relative to the five consensus fingers highlighted in white. @@ -39,7 +39,7 @@ Table 1. KRAB-ZFP genes clusters in the mouse genome that were investigated in t | Chr9 | Chr9 qA3 | 0.1 | 4 | 2 | | Other | - | - | 248 | 4 | -We generally observed that KRAB-ZFPs present exclusively in mouse target TEs that are restricted to the mouse genome, indicating KRAB-ZFPs and their targets emerged together. For example, several mouse-specific KRAB-ZFPs in Chr2-cl and Chr4-cl target IAP and ETn elements which are only found in the mouse genome and are highly active. This is the strongest data to date supporting that recent KRAB-ZFP expansions in these young clusters is a response to recent TE activity. Likewise, ZFP599 and ZFP617, both conserved in Muroidea, bind to various ORR1-type LTRs which are present in the rat genome (Supplementary file 1). However, ZFP961, a KRAB-ZFP encoded on a small gene cluster on chromosome 8 that is conserved in Muroidea targets TEs that are only found in the mouse genome (e.g. ETn), a paradox we have previously observed with ZFP809, which also targets TEs that are evolutionarily younger than itself (Wolf et al., 2015b). The ZFP961 binding site is located at the 5’ end of the internal region of ETn and ETnERV elements, a sequence that usually contains the primer binding site (PBS), which is required to prime retroviral reverse transcription. Indeed, the ZFP961 motif closely resembles the PBS Lys1,2 (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBS Lys1,2 by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect. +We generally observed that KRAB-ZFPs present exclusively in mouse target TEs that are restricted to the mouse genome, indicating KRAB-ZFPs and their targets emerged together. For example, several mouse-specific KRAB-ZFPs in Chr2-cl and Chr4-cl target IAP and ETn elements which are only found in the mouse genome and are highly active. This is the strongest data to date supporting that recent KRAB-ZFP expansions in these young clusters is a response to recent TE activity. Likewise, ZFP599 and ZFP617, both conserved in Muroidea, bind to various ORR1-type LTRs which are present in the rat genome (Supplementary file 1). However, ZFP961, a KRAB-ZFP encoded on a small gene cluster on chromosome 8 that is conserved in Muroidea targets TEs that are only found in the mouse genome (e.g. ETn), a paradox we have previously observed with ZFP809, which also targets TEs that are evolutionarily younger than itself (Wolf et al., 2015b). The ZFP961 binding site is located at the 5’ end of the internal region of ETn and ETnERV elements, a sequence that usually contains the primer binding site (PBS), which is required to prime retroviral reverse transcription. Indeed, the ZFP961 motif closely resembles the PBSLys1,2 (Figure 1—figure supplement 3A), which had been previously identified as a KAP1-dependent target of retroviral repression (Yamauchi et al., 1995; Wolf et al., 2008). Repression of the PBSLys1,2 by ZFP961 was also confirmed in reporter assays (Figure 1—figure supplement 2B), indicating that ZFP961 is likely responsible for this silencing effect. To further test the hypothesis that KRAB-ZFPs target sites necessary for retrotransposition, we utilized previously generated ETn and ETnERV retrotransposition reporters in which we mutated KRAB-ZFP binding sites (Ribet et al., 2004). Whereas the ETnERV reporters are sufficient for retrotransposition, the ETn reporter requires ETnERV genes supplied in trans. We tested and confirmed that the REX2/ZFP600 and GM13051 binding sites within these TEs are required for efficient retrotransposition (Figure 1—figure supplement 3B). REX2 and ZFP600 both bind a target about 200 bp from the start of the internal region (Figure 1B), a region that often encodes the packaging signal. GM13051 binds a target coding for part of a highly structured mRNA export signal (Legiewicz et al., 2010) near the 3’ end of the internal region of ETn (Figure 1—figure supplement 3C). Both signals are characterized by stem-loop intramolecular base-pairing in which a single mutation can disrupt loop formation. This indicates that at least some KRAB-ZFPs evolved to bind functionally essential target sequences which cannot easily evade repression by mutation. @@ -61,7 +61,7 @@ Figure 3. TE-dependent gene activation in KRAB-ZFP cluster KO ES cells. (A) Diff -While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the *Cd59a* gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of *Chst1* , one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the *Chst1* upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates *Chst1* expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR. +While we generally observed that TE-associated gene reactivation is not caused by elongated or spliced transcription starting at the retrotransposons, we did observe that the strength of the effect of ETn elements on gene expression is stronger on genes in closer proximity. About 25% of genes located within 20 kb of an ETn element, but only 5% of genes located at a distance between 50 and 100 kb from the nearest ETn insertion, become upregulated in Chr4-cl KO ES cells. Importantly however, the correlation is still significant for genes that are located at distances between 50 and 100 kb from the nearest ETn insertion, indicating that ETn elements can act as long-range enhancers of gene expression in the absence of KRAB-ZFPs that target them. To confirm that Chr4-cl KRAB-ZFPs such as GM13051 block ETn-borne enhancers, we tested the ability of a putative ETn enhancer to activate transcription in a reporter assay. For this purpose, we cloned a 5 kb fragment spanning from the GM13051 binding site within the internal region of a truncated ETn insertion to the first exon of the *Cd59a* gene, which is strongly activated in Chr4-cl KO ES cells (Figure 2—figure supplement 1B). We observed strong transcriptional activity of this fragment which was significantly higher in Chr4-cl KO ES cells. Surprisingly, this activity was reduced to background when the internal segment of the ETn element was not included in the fragment, suggesting the internal segment of the ETn element, but not its LTR, contains a Chr4-cl KRAB-ZFP sensitive enhancer. To further corroborate these findings, we genetically deleted an ETn element that is located about 60 kb from the TSS of *Chst1*, one of the top-upregulated genes in Chr4-cl KO ES cells (Figure 3C). RT-qPCR analysis revealed that the *Chst1* upregulation phenotype in Chr4-cl KO ES cells diminishes when the ETn insertion is absent, providing direct evidence that a KRAB-ZFP controlled ETn-borne enhancer regulates *Chst1* expression (Figure 3D). Furthermore, ChIP-seq confirmed a general increase of H3K4me3, H3K4me1 and H3K27ac marks at ETn elements in Chr4-cl KO ES cells (Figure 3E). Notably, enhancer marks were most pronounced around the GM13051 binding site near the 3’ end of the internal region, confirming that the enhancer activity of ETn is located on the internal region and not on the LTR. ### ETn retrotransposition in Chr4-cl KO and WT mice @@ -126,7 +126,7 @@ Key resources table ### Cell lines and transgenic mice -Mouse ES cells and F9 EC cells were cultivated as described previously (Wolf et al., 2015b) unless stated otherwise. Chr4-cl KO ES cells originate from B6;129‐ Gt(ROSA)26Sortm1(cre/ERT)Nat/J mice (Jackson lab), all other KRAB-ZFP cluster KO ES cell lines originate from JM8A3.N1 C57BL/6N-A tm1Brd ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring. +Mouse ES cells and F9 EC cells were cultivated as described previously (Wolf et al., 2015b) unless stated otherwise. Chr4-cl KO ES cells originate from B6;129‐ Gt(ROSA)26Sortm1(cre/ERT)Nat/J mice (Jackson lab), all other KRAB-ZFP cluster KO ES cell lines originate from JM8A3.N1 C57BL/6N-Atm1Brd ES cells (KOMP Repository). Chr2-cl KO and WT ES cells were initially grown in serum-containing media (Wolf et al., 2015b) but changed to 2i media (De Iaco et al., 2017) for several weeks before analysis. To generate Chr4-cl and Chr2-cl KO mice, the cluster deletions were repeated in B6 ES (KOMP repository) or R1 (Nagy lab) ES cells, respectively, and heterozygous clones were injected into B6 albino blastocysts. Chr2-cl KO mice were therefore kept on a mixed B6/Svx129/Sv-CP strain background while Chr4-cl KO mice were initially derived on a pure C57BL/6 background. For capture-seq screens, Chr4-cl KO mice were crossed with 129 × 1/SvJ mice (Jackson lab) to produce the founder mice for Chr4-cl KO and WT (B6/129 F1) offspring. Chr4-cl KO/WT (B6/129 F1) were also crossed with 129 × 1/SvJ mice to get Chr4-cl KO/WT (B6/129 F1) mice, which were intercrossed to give rise to the parents of Chr4-cl KO/KO and KO/WT (B6/129 F2) offspring. ### Generation of KRAB-ZFP expressing cell lines @@ -134,13 +134,13 @@ KRAB-ZFP ORFs were PCR-amplified from cDNA or synthesized with codon-optimizatio ### CRISPR/Cas9 mediated deletion of KRAB-ZFP clusters and an MMETn insertion -All gRNAs were expressed from the pX330-U6-Chimeric\_BB-CBh-hSpCas9 vector (RRID: [Addgene\_42230](https://scicrunch.org/resolver/Addgene_42230) ) and nucleofected into 10 6 ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3). +All gRNAs were expressed from the pX330-U6-Chimeric\_BB-CBh-hSpCas9 vector (RRID:[Addgene\_42230](https://scicrunch.org/resolver/Addgene_42230)) and nucleofected into 106 ES cells using Amaxa nucleofection in the following amounts: 5 µg of each pX330-gRNA plasmid, 1 µg pPGK-puro and 500 pmoles single-stranded repair oligos (Supplementary file 3). One day after nucleofection, cells were kept under puromycin selection (1 µg/ml) for 24 hr. Individual KO and WT clones were picked 7–8 days after nucleofection and expanded for PCR genotyping (Supplementary file 3). ### ChIP-seq analysis -For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 10 7 cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID: [AB\_262044](https://scicrunch.org/resolver/AB_262044) ) or anti-HA (Abcam Cat# ab9110, RRID: [AB\_307019](https://scicrunch.org/resolver/AB_307019) or Covance Cat# MMS-101P-200, RRID: [AB\_10064068](https://scicrunch.org/resolver/AB_10064068) ) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID: [AB\_2532132](https://scicrunch.org/resolver/AB_2532132) ) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID: [AB\_221569](https://scicrunch.org/resolver/AB_221569) ) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID: [AB\_306649](https://scicrunch.org/resolver/AB_306649) ), H3K4me1 (Abcam Cat# ab8895, RRID: [AB\_306847](https://scicrunch.org/resolver/AB_306847) ) and H3K27ac (Abcam Cat# ab4729, RRID: [AB\_2118291](https://scicrunch.org/resolver/AB_2118291) ) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively. +For ChIP-seq analysis of KRAB-ZFP expressing cells, 5–10 × 107 cells were crosslinked and immunoprecipitated with anti-FLAG (Sigma-Aldrich Cat# F1804, RRID:[AB\_262044](https://scicrunch.org/resolver/AB_262044)) or anti-HA (Abcam Cat# ab9110, RRID:[AB\_307019](https://scicrunch.org/resolver/AB_307019) or Covance Cat# MMS-101P-200, RRID:[AB\_10064068](https://scicrunch.org/resolver/AB_10064068)) antibody using one of two previously described protocols (O'Geen et al., 2010; Imbeault et al., 2017) as indicated in Supplementary file 1. H3K9me3 distribution in Chr4-cl, Chr10-cl, Chr13.1-cl and Chr13.2-cl KO ES cells was determined by native ChIP-seq with anti-H3K9me3 serum (Active Motif Cat# 39161, RRID:[AB\_2532132](https://scicrunch.org/resolver/AB_2532132)) as described previously (Karimi et al., 2011). In Chr2-cl KO ES cells, H3K9me3 and KAP1 ChIP-seq was performed as previously described (Ecco et al., 2016). In Chr4-cl KO and WT ES cells KAP1 binding was determined by endogenous tagging of KAP1 with C-terminal GFP (Supplementary file 3), followed by FACS to enrich for GFP-positive cells and ChIP with anti-GFP (Thermo Fisher Scientific Cat# A-11122, RRID:[AB\_221569](https://scicrunch.org/resolver/AB_221569)) using a previously described protocol (O'Geen et al., 2010). For ChIP-seq analysis of active histone marks, cross-linked chromatin from ES cells or testis (from two-week old mice) was immunoprecipitated with antibodies against H3K4me3 (Abcam Cat# ab8580, RRID:[AB\_306649](https://scicrunch.org/resolver/AB_306649)), H3K4me1 (Abcam Cat# ab8895, RRID:[AB\_306847](https://scicrunch.org/resolver/AB_306847)) and H3K27ac (Abcam Cat# ab4729, RRID:[AB\_2118291](https://scicrunch.org/resolver/AB_2118291)) following the protocol developed by O'Geen et al., 2010 or Khil et al., 2012 respectively. -ChIP-seq libraries were constructed and sequenced as indicated in Supplementary file 4. Reads were mapped to the mm9 genome using Bowtie (RRID: [SCR\_005476](https://scicrunch.org/resolver/SCR_005476) ; settings: --best) or Bowtie2 (Langmead and Salzberg, 2012) as indicated in Supplementary file 4. Under these settings, reads that map to multiple genomic regions are assigned to the top-scored match and, if a set of equally good choices is encountered, a pseudo-random number is used to choose one location. Peaks were called using MACS14 (RRID: [SCR\_013291](https://scicrunch.org/resolver/SCR_013291) ) under high stringency settings (p<1e-10, peak enrichment >20) (Zhang et al., 2008). Peaks were called both over the Input control and a FLAG or HA control ChIP (unless otherwise stated in Supplementary file 4) and only peaks that were called in both settings were kept for further analysis. In cases when the stringency settings did not result in at least 50 peaks, the settings were changed to medium (p<1e-10, peak enrichment >10) or low (p<1e-5, peak enrichment >10) stringency (Supplementary file 4). For further analysis, all peaks were scaled to 200 bp regions centered around the peak summits. The overlap of the scaled peaks to each repeat element in UCSC Genome Browser (RRID: [SCR\_005780](https://scicrunch.org/resolver/SCR_005780) ) were calculated by using the bedfisher function (settings: -f 0.25) from BEDTools (RRID: [SCR\_006646](https://scicrunch.org/resolver/SCR_006646) ). The right-tailed p-values between pair-wise comparison of each ChIP-seq peak and repeat element were extracted, and then adjusted using the Benjamini-Hochberg approach implemented in the R function p.adjust(). Binding motifs were determined using only nonrepetitive (<10% repeat content) peaks with MEME (Bailey et al., 2009). MEME motifs were compared with in silico predicted motifs (Najafabadi et al., 2015) using Tomtom (Bailey et al., 2009) and considered as significantly overlapping with a False Discovery Rate (FDR) below 0.1. To find MEME and predicted motifs in repetitive peaks, we used FIMO (Bailey et al., 2009). Differential H3K9me3 and KAP1 distribution in WT and Chr2-cl or Chr4-cl KO ES cells at TEs was determined by counting ChIP-seq reads overlapping annotated insertions of each TE group using BEDTools (MultiCovBed). Additionally, ChIP-seq reads were counted at the TE fraction that was bound by Chr2-cl or Chr4-cl KRAB-ZFPs (overlapping with 200 bp peaks). Count tables were concatenated and analyzed using DESeq2 (Love et al., 2014). The previously published ChIP-seq datasets for KAP1 (Castro-Diaz et al., 2014) and H3K9me3 (Dan et al., 2014) were re-mapped using Bowtie (--best). +ChIP-seq libraries were constructed and sequenced as indicated in Supplementary file 4. Reads were mapped to the mm9 genome using Bowtie (RRID:[SCR\_005476](https://scicrunch.org/resolver/SCR_005476); settings: --best) or Bowtie2 (Langmead and Salzberg, 2012) as indicated in Supplementary file 4. Under these settings, reads that map to multiple genomic regions are assigned to the top-scored match and, if a set of equally good choices is encountered, a pseudo-random number is used to choose one location. Peaks were called using MACS14 (RRID:[SCR\_013291](https://scicrunch.org/resolver/SCR_013291)) under high stringency settings (p<1e-10, peak enrichment >20) (Zhang et al., 2008). Peaks were called both over the Input control and a FLAG or HA control ChIP (unless otherwise stated in Supplementary file 4) and only peaks that were called in both settings were kept for further analysis. In cases when the stringency settings did not result in at least 50 peaks, the settings were changed to medium (p<1e-10, peak enrichment >10) or low (p<1e-5, peak enrichment >10) stringency (Supplementary file 4). For further analysis, all peaks were scaled to 200 bp regions centered around the peak summits. The overlap of the scaled peaks to each repeat element in UCSC Genome Browser (RRID:[SCR\_005780](https://scicrunch.org/resolver/SCR_005780)) were calculated by using the bedfisher function (settings: -f 0.25) from BEDTools (RRID:[SCR\_006646](https://scicrunch.org/resolver/SCR_006646)). The right-tailed p-values between pair-wise comparison of each ChIP-seq peak and repeat element were extracted, and then adjusted using the Benjamini-Hochberg approach implemented in the R function p.adjust(). Binding motifs were determined using only nonrepetitive (<10% repeat content) peaks with MEME (Bailey et al., 2009). MEME motifs were compared with in silico predicted motifs (Najafabadi et al., 2015) using Tomtom (Bailey et al., 2009) and considered as significantly overlapping with a False Discovery Rate (FDR) below 0.1. To find MEME and predicted motifs in repetitive peaks, we used FIMO (Bailey et al., 2009). Differential H3K9me3 and KAP1 distribution in WT and Chr2-cl or Chr4-cl KO ES cells at TEs was determined by counting ChIP-seq reads overlapping annotated insertions of each TE group using BEDTools (MultiCovBed). Additionally, ChIP-seq reads were counted at the TE fraction that was bound by Chr2-cl or Chr4-cl KRAB-ZFPs (overlapping with 200 bp peaks). Count tables were concatenated and analyzed using DESeq2 (Love et al., 2014). The previously published ChIP-seq datasets for KAP1 (Castro-Diaz et al., 2014) and H3K9me3 (Dan et al., 2014) were re-mapped using Bowtie (--best). ### Luciferase reporter assays @@ -148,7 +148,7 @@ For KRAB-ZFP repression assays, double-stranded DNA oligos containing KRAB-ZFP t ### RNA-seq analysis -Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID: [SCR\_016383](https://scicrunch.org/resolver/SCR_016383) ) or HiSeq3000 (RRID: [SCR\_016386](https://scicrunch.org/resolver/SCR_016386) ) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID: [SCR\_013035](https://scicrunch.org/resolver/SCR_013035) ; settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID: [SCR\_012954](https://scicrunch.org/resolver/SCR_012954) ) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID: [SCR\_015687](https://scicrunch.org/resolver/SCR_015687) ). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability *p* in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given *n* which is the number of specific groups of genes, and *x* which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust(). +Whole RNA was purified using RNeasy columns (Qiagen) with on column DNase treatment or the High Pure RNA Isolation Kit (Roche) (Supplementary file 4). Tissues were first lysed in TRIzol reagent (ThermoFisher) and RNA was purified after the isopropanol precipitation step using RNeasy columns (Qiagen) with on column DNase treatment. Libraries were generated using the SureSelect Strand-Specific RNA Library Prep kit (Agilent) or Illumina’s TruSeq RNA Library Prep Kit (with polyA selection) and sequenced as 50 or 100 bp paired-end reads on an Illumina HiSeq2500 (RRID:[SCR\_016383](https://scicrunch.org/resolver/SCR_016383)) or HiSeq3000 (RRID:[SCR\_016386](https://scicrunch.org/resolver/SCR_016386)) machine (Supplementary file 4). RNA-seq reads were mapped to the mouse genome (mm9) using Tophat (RRID:[SCR\_013035](https://scicrunch.org/resolver/SCR_013035); settings: --I 200000 g 1) unless otherwise stated. These settings allow each mappable read to be reported once, in case the read maps to multiple locations equally well, one match is randomly chosen. For differential transposon expression, mapped reads that overlap with TEs annotated in Repeatmasker (RRID:[SCR\_012954](https://scicrunch.org/resolver/SCR_012954)) were counted using BEDTools MultiCovBed (setting: -split). Reads mapping to multiple fragments that belong to the same TE insertion (as indicated by the repeat ID) were summed up. Only transposons with a total of at least 20 (for two biological replicates) or 30 (for three biological replicates) mapped reads across WT and KO samples were considered for differential expression analysis. Transposons within the deleted KRAB-ZFP cluster were excluded from the analysis. Read count tables were used for differential expression analysis with DESeq2 (RRID:[SCR\_015687](https://scicrunch.org/resolver/SCR_015687)). For differential gene expression analysis, reads overlapping with gene exons were counted using HTSeq-count and analyzed using DESeq2. To test if KRAB-ZFP peaks are significantly enriched near up- or down-regulated genes, a binomial test was performed. Briefly, the proportion of the peaks that are located within a certain distance up- or downstream to the TSS of genes was determined using the windowBed function of BED tools. The probability *p* in the binomial distribution was estimated as the fraction of all genes overlapped with KRAB-ZFP peaks. Then, given *n* which is the number of specific groups of genes, and *x* which is the number of this group of genes overlapped with peaks, the R function binom.test() was used to estimate the p-value based on right-tailed Binomial test. Finally, the adjusted p-values were determined separately for LTR and LINE retrotransposon groups using the Benjamini-Hochberg approach implemented in the R function p.adjust(). ### Reduced representation bisulfite sequencing (RRBS-seq) @@ -156,11 +156,11 @@ For RRBS-seq analysis, Chr4-cl WT and KO ES cells were grown in either standard ### Retrotransposition assay -The retrotransposition vectors pCMV-MusD2, pCMV-MusD2-neoTNF and pCMV-ETnI1-neoTNF (Ribet et al., 2004) were a kind gift from Dixie Mager. To partially delete the Gm13051 binding site within pCMV-MusD2-neoTNF, the vector was cut with KpnI and re-ligated using a repair oligo, leaving a 24 bp deletion within the Gm13051 binding site. The Rex2 binding site in pCMV-ETnI1-neoTNF was deleted by cutting the vector with EcoRI and XbaI followed by re-ligation using two overlapping PCR products, leaving a 45 bp deletion while maintaining the rest of the vector unchanged (see Supplementary file 3 for primer sequences). For MusD retrotransposition assays, 5 × 10 4 HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma). +The retrotransposition vectors pCMV-MusD2, pCMV-MusD2-neoTNF and pCMV-ETnI1-neoTNF (Ribet et al., 2004) were a kind gift from Dixie Mager. To partially delete the Gm13051 binding site within pCMV-MusD2-neoTNF, the vector was cut with KpnI and re-ligated using a repair oligo, leaving a 24 bp deletion within the Gm13051 binding site. The Rex2 binding site in pCMV-ETnI1-neoTNF was deleted by cutting the vector with EcoRI and XbaI followed by re-ligation using two overlapping PCR products, leaving a 45 bp deletion while maintaining the rest of the vector unchanged (see Supplementary file 3 for primer sequences). For MusD retrotransposition assays, 5 × 104 HeLa cells (ATCC CCL-2) were transfected in a 24-well dish with 100 ng pCMV-MusD2-neoTNF or pCMV-MusD2-neoTNF (ΔGm13051-m) using Lipofectamine 2000. For ETn retrotransposition assays, 50 ng of pCMV-ETnI1-neoTNF or pCMV-ETnI1-neoTNF (ΔRex2) vectors were cotransfected with 50 ng pCMV-MusD2 to provide gag and pol proteins in trans. G418 (0.6 mg/ml) was added five days after transfection and cells were grown under selection until colonies were readily visible by eye. G418-resistant colonies were stained with Amido Black (Sigma). ### Capture-seq screen -To identify novel retrotransposon insertions, genomic DNA from various tissues (Supplementary file 4) was purified and used for library construction with target enrichment using the SureSelect QXT Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4\_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4\_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software. +To identify novel retrotransposon insertions, genomic DNA from various tissues (Supplementary file 4) was purified and used for library construction with target enrichment using the SureSelectQXT Target Enrichment kit (Agilent). Custom RNA capture probes were designed to hybridize with the 120 bp 5’ ends of the 5’ LTRs and the 120 bp 3’ ends of the 3’ LTR of about 600 intact (internal region flanked by two LTRs) MMETn/RLTRETN retrotransposons or of 140 RLTR4\_MM/RLTR4 retrotransposons that were upregulated in Chr4-cl KO ES cells (Figure 4—source data 2). Enriched libraries were sequenced on an Illumina HiSeq as paired-end 50 bp reads. R1 and R2 reads were mapped to the mm9 genome separately, using settings that only allow non-duplicated, uniquely mappable reads (Bowtie -m 1 --best --strata; samtools rmdup -s) and under settings that allow multimapping and duplicated reads (Bowtie --best). Of the latter, only reads that overlap (min. 50% of read) with RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeats (ETn) or RLTR4, RLTR4\_MM-int or MuLV-int repeats (RLTR4) were kept. Only uniquely mappable reads whose paired reads were overlapping with the repeats mentioned above were used for further analysis. All ETn- and RLTR4-paired reads were then clustered (as bed files) using BEDTools (bedtools merge -i -n -d 1000) to receive a list of all potential annotated and non-annotated new ETn or RLTR4 insertion sites and all overlapping ETn- or RLTR4-paired reads were counted for each sample at each locus. Finally, all regions that were located within 1 kb of an annotated RLTRETN, MMETn-int, ETnERV-int, ETnERV2-int or ETnERV3-int repeat as well as regions overlapping with previously identified polymorphic ETn elements (Nellåker et al., 2012) were removed. Genomic loci with at least 10 reads per million unique ETn- or RLTR4-paired reads were considered as insertion sites. To qualify for a de-novo insertion, we allowed no called insertions in any of the other screened mice at the locus and not a single read at the locus in the ancestors of the mouse. Insertions at the same locus in at least two siblings from the same offspring were considered as germ line insertions, if the insertion was absent in the parents and mice who were not direct descendants from these siblings. Full-length sequencing of new ETn insertions was done by Sanger sequencing of short PCR products in combination with Illumina sequencing of a large PCR product (Supplementary file 3), followed by de-novo assembly using the Unicycler software. ## Funding Information @@ -302,7 +302,7 @@ This is the first study that addresses in vivo the targets and function of genom **Decision letter after peer review:** -Thank you for submitting your article "KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage" for consideration by *eLife* . Your article has been reviewed by three peer reviewers, including Deborah Bourc'his as the Reviewing Editor and Reviewer #1, and the evaluation has been overseen by George Perry as the Senior Editor. The following individual involved in review of your submission has agreed to reveal their identity: Joan Barau (Reviewer #3). +Thank you for submitting your article "KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage" for consideration by *eLife*. Your article has been reviewed by three peer reviewers, including Deborah Bourc'his as the Reviewing Editor and Reviewer #1, and the evaluation has been overseen by George Perry as the Senior Editor. The following individual involved in review of your submission has agreed to reveal their identity: Joan Barau (Reviewer #3). The reviewers have discussed the reviews with one another and the Reviewing Editor has drafted this decision to help you prepare a revised submission. diff --git a/tests/data/jats/groundtruth/pmc2231364.nxml.itxt b/tests/data/jats/groundtruth/pmc2231364.nxml.itxt index c314c160b2..564afeb7b5 100644 --- a/tests/data/jats/groundtruth/pmc2231364.nxml.itxt +++ b/tests/data/jats/groundtruth/pmc2231364.nxml.itxt @@ -4,21 +4,21 @@ item-0 at level 0: unspecified: group _root_ item-3 at level 2: section_header: Abstract item-4 at level 3: section_header: Background item-5 at level 4: inline: group group - item-6 at level 5: text: Environmental modulation of gene expression in + item-6 at level 5: text: Environmental modulation of gene expression in item-7 at level 5: text: Yersinia pestis - item-8 at level 5: text: is critical for its life style a ... rown under different stress conditions + item-8 at level 5: text: is critical for its life style ... own under different stress conditions item-9 at level 5: text: in vitro item-10 at level 5: text: . item-11 at level 3: section_header: Results item-12 at level 4: inline: group group - item-13 at level 5: text: To provide us with a comprehensi ... odulation of global gene expression in + item-13 at level 5: text: To provide us with a comprehensi ... dulation of global gene expression in item-14 at level 5: text: Y. pestis - item-15 at level 5: text: , we have analyzed the gene expr ... s. Almost all known virulence genes of + item-15 at level 5: text: , we have analyzed the gene expr ... . Almost all known virulence genes of item-16 at level 5: text: Y. pestis - item-17 at level 5: text: were differentially regulated un ... ophoretic mobility shift assay (EMSA). + item-17 at level 5: text: were differentially regulated u ... ophoretic mobility shift assay (EMSA). item-18 at level 3: section_header: Conclusion item-19 at level 4: inline: group group - item-20 at level 5: text: The comparative transcriptomics ... is and cellular regulatory circuits in + item-20 at level 5: text: The comparative transcriptomics ... s and cellular regulatory circuits in item-21 at level 5: text: Y. pestis item-22 at level 5: text: , it also serves as a basis for ... icroarray data using existing methods. item-23 at level 2: section_header: Introduction diff --git a/tests/data/jats/groundtruth/pmc2231364.nxml.json b/tests/data/jats/groundtruth/pmc2231364.nxml.json index 62b9c859bf..63c6f00d7a 100644 --- a/tests/data/jats/groundtruth/pmc2231364.nxml.json +++ b/tests/data/jats/groundtruth/pmc2231364.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pmc2231364", "origin": { "mimetype": "application/xml", @@ -183,8 +183,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Environmental modulation of gene expression in", - "text": "Environmental modulation of gene expression in" + "orig": "Environmental modulation of gene expression in ", + "text": "Environmental modulation of gene expression in " }, { "self_ref": "#/texts/5", @@ -214,8 +214,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions", - "text": "is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions" + "orig": " is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions ", + "text": " is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions " }, { "self_ref": "#/texts/7", @@ -274,8 +274,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "To provide us with a comprehensive view of environmental modulation of global gene expression in", - "text": "To provide us with a comprehensive view of environmental modulation of global gene expression in" + "orig": "To provide us with a comprehensive view of environmental modulation of global gene expression in ", + "text": "To provide us with a comprehensive view of environmental modulation of global gene expression in " }, { "self_ref": "#/texts/11", @@ -305,8 +305,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of", - "text": ", we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of" + "orig": ", we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of ", + "text": ", we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of " }, { "self_ref": "#/texts/13", @@ -336,8 +336,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA).", - "text": "were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA)." + "orig": " were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA).", + "text": " were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA)." }, { "self_ref": "#/texts/15", @@ -365,8 +365,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in", - "text": "The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in" + "orig": "The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in ", + "text": "The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in " }, { "self_ref": "#/texts/17", diff --git a/tests/data/jats/groundtruth/pmc2231364.nxml.md b/tests/data/jats/groundtruth/pmc2231364.nxml.md index d67a234765..89b709b5de 100644 --- a/tests/data/jats/groundtruth/pmc2231364.nxml.md +++ b/tests/data/jats/groundtruth/pmc2231364.nxml.md @@ -6,15 +6,15 @@ Yiquan Hu, Yarong Miao ### Background -Environmental modulation of gene expression in *Yersinia pestis* is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions *in vitro* . +Environmental modulation of gene expression in *Yersinia pestis* is critical for its life style and pathogenesis. Using cDNA microarray technology, we have analyzed the global gene expression of this deadly pathogen when grown under different stress conditions *in vitro*. ### Results -To provide us with a comprehensive view of environmental modulation of global gene expression in *Y. pestis* , we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of *Y. pestis* were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA). +To provide us with a comprehensive view of environmental modulation of global gene expression in *Y. pestis*, we have analyzed the gene expression profiles of 25 different stress conditions. Almost all known virulence genes of *Y. pestis* were differentially regulated under multiple environmental perturbations. Clustering enabled us to functionally classify co-expressed genes, including some uncharacterized genes. Collections of operons were predicted from the microarray data, and some of these were confirmed by reverse-transcription polymerase chain reaction (RT-PCR). Several regulatory DNA motifs, probably recognized by the regulatory protein Fur, PurR, or Fnr, were predicted from the clustered genes, and a Fur binding site in the corresponding promoter regions was verified by electrophoretic mobility shift assay (EMSA). ### Conclusion -The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in *Y. pestis* , it also serves as a basis for integrating increasing volumes of microarray data using existing methods. +The comparative transcriptomics analysis we present here not only benefits our understanding of the molecular determinants of pathogenesis and cellular regulatory circuits in *Y. pestis*, it also serves as a basis for integrating increasing volumes of microarray data using existing methods. ## Introduction diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt b/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt index c02654ddaa..43bdeeda10 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.itxt @@ -4,12 +4,12 @@ item-0 at level 0: unspecified: group _root_ item-3 at level 2: paragraph: Global Health Division, RTI Inte ... shington, DC, United States of America item-4 at level 2: section_header: Abstract item-5 at level 3: inline: group group - item-6 at level 4: text: Achieving elimination of lymphat ... s Test Strips (FTS), primary vector of + item-6 at level 4: text: Achieving elimination of lymphat ... Test Strips (FTS), primary vector of item-7 at level 4: text: Culex item-8 at level 4: text: , treatment with diethylcarbamaz ... as at highest risk of failing pre-TAS. item-9 at level 2: section_header: Author summary item-10 at level 3: inline: group group - item-11 at level 4: text: Achieving elimination of lymphat ... 10%, use of the FTS, primary vector of + item-11 at level 4: text: Achieving elimination of lymphat ... 0%, use of the FTS, primary vector of item-12 at level 4: text: Culex item-13 at level 4: text: , treatment with diethylcarbamaz ... ine prevalence and/or lower elevation. item-14 at level 2: section_header: Introduction @@ -28,44 +28,44 @@ item-0 at level 0: unspecified: group _root_ item-26 at level 3: section_header: Outcome and covariate variables item-27 at level 4: text: The outcome of interest for this ... r than or equal to 1% Mf or 2% Ag [4]. item-28 at level 4: inline: group group - item-29 at level 5: text: Potential covariates were derive ... ous variables were derived from either + item-29 at level 5: text: Potential covariates were derive ... us variables were derived from either item-30 at level 5: text: a priori - item-31 at level 5: text: knowledge or through exploratory ... is and the final categorizations used. + item-31 at level 5: text: knowledge or through explorator ... is and the final categorizations used. item-32 at level 4: section_header: Baseline prevalence item-33 at level 5: text: Baseline prevalence can be assum ... (2) using the cut-off of <10% or ≥10%. item-34 at level 4: section_header: Agent item-35 at level 5: inline: group group - item-36 at level 6: text: In terms of differences in trans ... mics by agent, research has shown that + item-36 at level 6: text: In terms of differences in trans ... ics by agent, research has shown that item-37 at level 6: text: Brugia - item-38 at level 6: text: spp. are more susceptible to the anti-filarial drug regimens than + item-38 at level 6: text: spp. are more susceptible to the anti-filarial drug regimens than item-39 at level 6: text: Wuchereria bancrofti - item-40 at level 6: text: parasites [23]. Thus, we combined districts reporting + item-40 at level 6: text: parasites [23]. Thus, we combined districts reporting item-41 at level 6: text: B - item-42 at level 6: text: . + item-42 at level 6: text: . item-43 at level 6: text: malayi - item-44 at level 6: text: and + item-44 at level 6: text: and item-45 at level 6: text: B - item-46 at level 6: text: . + item-46 at level 6: text: . item-47 at level 6: text: timori - item-48 at level 6: text: and compared them to areas with + item-48 at level 6: text: and compared them to areas with item-49 at level 6: text: W - item-50 at level 6: text: . + item-50 at level 6: text: . item-51 at level 6: text: bancrofti - item-52 at level 6: text: or mixed parasites. Two variable ... e were variables delineating vectors ( + item-52 at level 6: text: or mixed parasites. Two variabl ... e were variables delineating vectors ( item-53 at level 6: text: Anopheles - item-54 at level 6: text: or + item-54 at level 6: text: or item-55 at level 6: text: Mansonia - item-56 at level 6: text: compared to + item-56 at level 6: text: compared to item-57 at level 6: text: Culex item-58 at level 6: text: ) from the environmental domain ... dazole (DEC-ALB)] from the MDA domain. item-59 at level 4: section_header: Environment item-60 at level 5: text: LF transmission intensity is inf ... dicates a higher level of “greenness.” item-61 at level 5: inline: group group - item-62 at level 6: text: We included the socio-economic v ... countries LF is mostly transmitted by + item-62 at level 6: text: We included the socio-economic v ... countries LF is mostly transmitted by item-63 at level 6: text: Culex - item-64 at level 6: text: in urban areas and by + item-64 at level 6: text: in urban areas and by item-65 at level 6: text: Anopheles - item-66 at level 6: text: in rural areas [32]. Additionall ... proxy for socio-economic status [33]. + item-66 at level 6: text: in rural areas [32]. Additional ... proxy for socio-economic status [33]. item-67 at level 5: text: Finally, all or parts of distric ... s were co-endemic with onchocerciasis. item-68 at level 4: section_header: MDA item-69 at level 5: text: Treatment effectiveness depends ... esent a threat to elimination [41,42]. @@ -77,13 +77,13 @@ item-0 at level 0: unspecified: group _root_ item-75 at level 3: section_header: Statistical analysis and modeling item-76 at level 4: text: Statistical analysis and modelin ... d the number of variables accordingly. item-77 at level 4: inline: group group - item-78 at level 5: text: Sensitivity analysis was perform ... ica, (3) including only districts with + item-78 at level 5: text: Sensitivity analysis was perform ... ca, (3) including only districts with item-79 at level 5: text: W - item-80 at level 5: text: . + item-80 at level 5: text: . item-81 at level 5: text: bancrofti - item-82 at level 5: text: parasite, and (4) including only districts with + item-82 at level 5: text: parasite, and (4) including only districts with item-83 at level 5: text: Anopheles - item-84 at level 5: text: as the primary vector. The sensi ... ot have been truly LF-endemic [43,44]. + item-84 at level 5: text: as the primary vector. The sens ... ot have been truly LF-endemic [43,44]. item-85 at level 2: section_header: Results item-86 at level 3: text: The overall pre-TAS pass rate fo ... ts had baseline prevalences below 20%. item-87 at level 3: picture @@ -91,7 +91,7 @@ item-0 at level 0: unspecified: group _root_ item-88 at level 3: picture item-88 at level 4: caption: Fig 2 District-level baseline prevalence by country. item-89 at level 3: inline: group group - item-90 at level 4: text: Fig 3 shows the unadjusted analy ... FTS diagnostic test, primary vector of + item-90 at level 4: text: Fig 3 shows the unadjusted analy ... TS diagnostic test, primary vector of item-91 at level 4: text: Culex item-92 at level 4: text: , treatment with DEC-ALB, higher ... overage, and sufficient rounds of MDA. item-93 at level 3: picture @@ -101,17 +101,17 @@ item-0 at level 0: unspecified: group _root_ item-96 at level 3: picture item-96 at level 4: caption: Fig 4 Adjusted risk ratios for pre-TAS failure with 95% Confidence Interval from log-binomial model. item-97 at level 3: inline: group group - item-98 at level 4: text: Sensitivity analyses were conduc ... cts in Africa, (3) only districts with + item-98 at level 4: text: Sensitivity analyses were conduc ... ts in Africa, (3) only districts with item-99 at level 4: text: W - item-100 at level 4: text: . + item-100 at level 4: text: . item-101 at level 4: text: bancrofti - item-102 at level 4: text: , and (4) only districts with + item-102 at level 4: text: , and (4) only districts with item-103 at level 4: text: Anopheles - item-104 at level 4: text: as primary vector. The results o ... hough the estimate was unstable in the + item-104 at level 4: text: as primary vector. The results ... ough the estimate was unstable in the item-105 at level 4: text: W - item-106 at level 4: text: . + item-106 at level 4: text: . item-107 at level 4: text: bancrofti - item-108 at level 4: text: -only and + item-108 at level 4: text: -only and item-109 at level 4: text: Anopheles item-110 at level 4: text: -only models (models 3 and 4 res ... gnified by large confidence intervals. item-111 at level 3: table with [11x6] @@ -121,30 +121,30 @@ item-0 at level 0: unspecified: group _root_ item-113 at level 4: caption: Fig 5 Analysis of failures by model combinations. item-114 at level 2: section_header: Discussion item-115 at level 3: inline: group group - item-116 at level 4: text: This paper reports for the first ... similar to what was found in Goldberg + item-116 at level 4: text: This paper reports for the first ... similar to what was found in Goldberg item-117 at level 4: text: et al item-118 at level 4: text: ., which explored ecological and ... ctors associated with TAS failure [7]. item-119 at level 3: text: Though diagnostic test used was ... FTS was more sensitive than ICT [45]. item-120 at level 3: inline: group group - item-121 at level 4: text: Elevation was the only environme ... ous studies [8,31], including Goldberg + item-121 at level 4: text: Elevation was the only environme ... us studies [8,31], including Goldberg item-122 at level 4: text: et al item-123 at level 4: text: . [7], who used a cutoff of 200 ... ich impact vector chances of survival. item-124 at level 3: inline: group group - item-125 at level 4: text: The small number of failures ove ... ied in the bivariate analyses, such as + item-125 at level 4: text: The small number of failures ove ... ed in the bivariate analyses, such as item-126 at level 4: text: Culex - item-127 at level 4: text: vector, higher population densit ... ecisions. Other models have shown that + item-127 at level 4: text: vector, higher population densi ... cisions. Other models have shown that item-128 at level 4: text: Culex - item-129 at level 4: text: as the predominant vector in a district, compared to + item-129 at level 4: text: as the predominant vector in a district, compared to item-130 at level 4: text: Anopheles item-131 at level 4: text: , results in more intense interv ... search has shown the opposite [15,16]. item-132 at level 3: inline: group group - item-133 at level 4: text: All other variables included in ... -TAS failure in our analysis. Goldberg + item-133 at level 4: text: All other variables included in ... TAS failure in our analysis. Goldberg item-134 at level 4: text: et al - item-135 at level 4: text: . found + item-135 at level 4: text: . found item-136 at level 4: text: Brugia - item-137 at level 4: text: spp. to be significantly associa ... to the small number of districts with + item-137 at level 4: text: spp. to be significantly associ ... to the small number of districts with item-138 at level 4: text: Brugia - item-139 at level 4: text: spp. in our dataset (6%) compared to 46% in the Goldberg + item-139 at level 4: text: spp. in our dataset (6%) compared to 46% in the Goldberg item-140 at level 4: text: et al item-141 at level 4: text: . article [7]. MDA coverage leve ... are not necessary to lower prevalence. item-142 at level 3: text: Limitations to this study includ ... reducing LF prevalence [41,48,51–53]. diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.json b/tests/data/jats/groundtruth/pntd.0008301.nxml.json index 0221913779..07398095a9 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.json +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pntd.0008301", "origin": { "mimetype": "application/xml", @@ -690,8 +690,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of", - "text": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of" + "orig": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of ", + "text": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of " }, { "self_ref": "#/texts/5", @@ -750,8 +750,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of", - "text": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of" + "orig": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of ", + "text": "Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of " }, { "self_ref": "#/texts/9", @@ -1029,8 +1029,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either", - "text": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either" + "orig": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either ", + "text": "Potential covariates were derived from the available data for each factor in the domain groups listed in Table 1. New dichotomous variables were created for all variables that had multiple categories or were continuous for ease of interpretation in models and use in program decision-making. Cut-points for continuous variables were derived from either " }, { "self_ref": "#/texts/26", @@ -1060,8 +1060,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used.", - "text": "knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used." + "orig": " knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used.", + "text": " knowledge or through exploratory analysis considering the mean or median value of the dataset, looking to create two groups of similar size with logical cut-points (e.g. rounding numbers to whole numbers). All the variables derived from publicly available global spatial raster datasets were summarized to the district level in ArcGIS Pro using the “zonal statistics” tool. The final output used the continuous value measuring the mean pixel value for the district for all variables except geographic area. Categories for each variable were determined by selecting the mean or median dataset value or cut-off used in other relevant literature [7]. The following section describes the variables that were included in the final analysis and the final categorizations used." }, { "self_ref": "#/texts/28", @@ -1118,8 +1118,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "In terms of differences in transmission dynamics by agent, research has shown that", - "text": "In terms of differences in transmission dynamics by agent, research has shown that" + "orig": "In terms of differences in transmission dynamics by agent, research has shown that ", + "text": "In terms of differences in transmission dynamics by agent, research has shown that " }, { "self_ref": "#/texts/32", @@ -1149,8 +1149,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. are more susceptible to the anti-filarial drug regimens than", - "text": "spp. are more susceptible to the anti-filarial drug regimens than" + "orig": " spp. are more susceptible to the anti-filarial drug regimens than ", + "text": " spp. are more susceptible to the anti-filarial drug regimens than " }, { "self_ref": "#/texts/34", @@ -1180,8 +1180,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "parasites [23]. Thus, we combined districts reporting", - "text": "parasites [23]. Thus, we combined districts reporting" + "orig": " parasites [23]. Thus, we combined districts reporting ", + "text": " parasites [23]. Thus, we combined districts reporting " }, { "self_ref": "#/texts/36", @@ -1211,8 +1211,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/38", @@ -1242,8 +1242,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and", - "text": "and" + "orig": " and ", + "text": " and " }, { "self_ref": "#/texts/40", @@ -1273,8 +1273,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/42", @@ -1304,8 +1304,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and compared them to areas with", - "text": "and compared them to areas with" + "orig": " and compared them to areas with ", + "text": " and compared them to areas with " }, { "self_ref": "#/texts/44", @@ -1335,8 +1335,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/46", @@ -1366,8 +1366,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (", - "text": "or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (" + "orig": " or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (", + "text": " or mixed parasites. Two variables from other domains were identified in exploratory analyses to be highly colinear with the parasite, and thus we considered them in the same group of variables for the final regression models. These were variables delineating vectors (" }, { "self_ref": "#/texts/48", @@ -1397,8 +1397,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "or", - "text": "or" + "orig": " or ", + "text": " or " }, { "self_ref": "#/texts/50", @@ -1428,8 +1428,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "compared to", - "text": "compared to" + "orig": " compared to ", + "text": " compared to " }, { "self_ref": "#/texts/52", @@ -1506,8 +1506,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by", - "text": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by" + "orig": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by ", + "text": "We included the socio-economic variable of population density, as it has been positively associated with LF prevalence in some studies [8,27,29], but no significant association has been found in others [30]. Population density could be correlated with vector, as in eastern African countries LF is mostly transmitted by " }, { "self_ref": "#/texts/57", @@ -1537,8 +1537,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in urban areas and by", - "text": "in urban areas and by" + "orig": " in urban areas and by ", + "text": " in urban areas and by " }, { "self_ref": "#/texts/59", @@ -1568,8 +1568,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33].", - "text": "in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33]." + "orig": " in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33].", + "text": " in rural areas [32]. Additionally, inclusion of the satellite imagery of nighttime lights data is another a proxy for socio-economic status [33]." }, { "self_ref": "#/texts/61", @@ -1726,8 +1726,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with", - "text": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with" + "orig": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with ", + "text": "Sensitivity analysis was performed for the final log-binomial model to test for the validity of results under different parameters by excluding some sub-sets of districts from the dataset and rerunning the model. This analysis was done to understand the robustness of the model when (1) excluding all districts in Cameroon, (2) including only districts in Africa, (3) including only districts with " }, { "self_ref": "#/texts/72", @@ -1757,8 +1757,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/74", @@ -1788,8 +1788,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "parasite, and (4) including only districts with", - "text": "parasite, and (4) including only districts with" + "orig": " parasite, and (4) including only districts with ", + "text": " parasite, and (4) including only districts with " }, { "self_ref": "#/texts/76", @@ -1819,8 +1819,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44].", - "text": "as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]." + "orig": " as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44].", + "text": " as the primary vector. The sensitivity analysis excluding Cameroon was done for two reasons. First, Cameroon had the most pre-TAS results included, but no failures. Second, 70% of the Cameroon districts included in the analysis are co-endemic for loiasis. Given that diagnostic tests used in LF mapping have since been shown to cross-react with loiasis, there is some concern that these districts might not have been truly LF-endemic [43,44]." }, { "self_ref": "#/texts/78", @@ -1917,8 +1917,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of", - "text": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of" + "orig": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of ", + "text": "Fig 3 shows the unadjusted analysis for key variables by pre-TAS result. Variables statistically significantly associated with failure (p-value ≤0.05) included higher baseline prevalence at or above 5% or 10%, FTS diagnostic test, primary vector of " }, { "self_ref": "#/texts/83", @@ -2008,8 +2008,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with", - "text": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with" + "orig": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with ", + "text": "Sensitivity analyses were conducted using the same model with different subsets of the dataset including (1) all districts except for districts in Cameroon (134 total with no failures), (2) only districts in Africa, (3) only districts with " }, { "self_ref": "#/texts/90", @@ -2039,8 +2039,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/92", @@ -2070,8 +2070,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", and (4) only districts with", - "text": ", and (4) only districts with" + "orig": ", and (4) only districts with ", + "text": ", and (4) only districts with " }, { "self_ref": "#/texts/94", @@ -2101,8 +2101,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the", - "text": "as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the" + "orig": " as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the ", + "text": " as primary vector. The results of the sensitivity models (Table 2) indicate an overall robust model. High baseline and lower elevation remained significant across all the models. The ICT diagnostic test used remains insignificant across all models. The FTS diagnostic test was positively significant in model 1 and negatively significant in model 4. The interaction term of baseline prevalence and FTS diagnostic test was significant in three models though the estimate was unstable in the " }, { "self_ref": "#/texts/96", @@ -2132,8 +2132,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ".", - "text": "." + "orig": ". ", + "text": ". " }, { "self_ref": "#/texts/98", @@ -2163,8 +2163,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "-only and", - "text": "-only and" + "orig": "-only and ", + "text": "-only and " }, { "self_ref": "#/texts/100", @@ -2283,8 +2283,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg", - "text": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg" + "orig": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg ", + "text": "This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. Variables significantly associated with failure were higher baseline prevalence and lower elevation. Districts with a baseline prevalence of 10% or more were at 2.52 times higher risk to fail pre-TAS in the final log-binomial model. In the bivariate analysis, baseline prevalence above 5% was also significantly more likely to fail compared to lower baselines, which indicates that the threshold for higher baseline prevalence may be as little as 5%, similar to what was found in Goldberg " }, { "self_ref": "#/texts/107", @@ -2338,8 +2338,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg", - "text": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg" + "orig": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg ", + "text": "Elevation was the only environmental domain variable selected for the final log-binomial model during the model selection process, with areas of lower elevation (<350m) found to be at 3.07 times higher risk to fail pre-TAS compared to districts with a higher elevation. Similar results related to elevation were found in previous studies [8,31], including Goldberg " }, { "self_ref": "#/texts/111", @@ -2381,8 +2381,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as", - "text": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as" + "orig": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as ", + "text": "The small number of failures overall prevented the inclusion of a large number of variables in the final log-binomial model. However, other variables that are associated with failure as identified in the bivariate analyses, such as " }, { "self_ref": "#/texts/114", @@ -2412,8 +2412,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that", - "text": "vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that" + "orig": " vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that ", + "text": " vector, higher population density, higher EVI, higher rainfall and more rounds of MDA, should not be discounted when making programmatic decisions. Other models have shown that " }, { "self_ref": "#/texts/116", @@ -2443,8 +2443,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "as the predominant vector in a district, compared to", - "text": "as the predominant vector in a district, compared to" + "orig": " as the predominant vector in a district, compared to ", + "text": " as the predominant vector in a district, compared to " }, { "self_ref": "#/texts/118", @@ -2486,8 +2486,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg", - "text": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg" + "orig": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg ", + "text": "All other variables included in this analysis were not significantly associated with pre-TAS failure in our analysis. Goldberg " }, { "self_ref": "#/texts/121", @@ -2517,8 +2517,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". found", - "text": ". found" + "orig": ". found ", + "text": ". found " }, { "self_ref": "#/texts/123", @@ -2548,8 +2548,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with", - "text": "spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with" + "orig": " spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with ", + "text": " spp. to be significantly associated with failure, but our results did not. This is likely due in part to the small number of districts with " }, { "self_ref": "#/texts/125", @@ -2579,8 +2579,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "spp. in our dataset (6%) compared to 46% in the Goldberg", - "text": "spp. in our dataset (6%) compared to 46% in the Goldberg" + "orig": " spp. in our dataset (6%) compared to 46% in the Goldberg ", + "text": " spp. in our dataset (6%) compared to 46% in the Goldberg " }, { "self_ref": "#/texts/127", diff --git a/tests/data/jats/groundtruth/pntd.0008301.nxml.md b/tests/data/jats/groundtruth/pntd.0008301.nxml.md index 3e2424f621..1bf40a82d2 100644 --- a/tests/data/jats/groundtruth/pntd.0008301.nxml.md +++ b/tests/data/jats/groundtruth/pntd.0008301.nxml.md @@ -6,11 +6,11 @@ Global Health Division, RTI International, Washington, DC, United States of Amer ## Abstract -Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of *Culex* , treatment with diethylcarbamazine-albendazole, higher elevation, higher population density, higher enhanced vegetation index (EVI), higher annual rainfall, and 6 or more rounds of MDA. This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. This information can help countries more effectively forecast program activities, such as the potential need for more rounds of MDA, and prioritize resources to ensure adequate coverage of all persons in areas at highest risk of failing pre-TAS. +Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five effective rounds of mass drug administration (MDA) and demonstrating low prevalence in subsequent assessments. The first assessments recommended by the World Health Organization (WHO) are sentinel and spot-check sites—referred to as pre-transmission assessment surveys (pre-TAS)—in each implementation unit after MDA. If pre-TAS shows that prevalence in each site has been lowered to less than 1% microfilaremia or less than 2% antigenemia, the implementation unit conducts a TAS to determine whether MDA can be stopped. Failure to pass pre-TAS means that further rounds of MDA are required. This study aims to understand factors influencing pre-TAS results using existing programmatic data from 554 implementation units, of which 74 (13%) failed, in 13 countries. Secondary data analysis was completed using existing data from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. Additional covariate data were obtained from spatial raster data sets. Bivariate analysis and multilinear regression were performed to establish potential relationships between variables and the pre-TAS result. Higher baseline prevalence and lower elevation were significant in the regression model. Variables statistically significantly associated with failure (p-value ≤0.05) in the bivariate analyses included baseline prevalence at or above 5% or 10%, use of Filariasis Test Strips (FTS), primary vector of *Culex*, treatment with diethylcarbamazine-albendazole, higher elevation, higher population density, higher enhanced vegetation index (EVI), higher annual rainfall, and 6 or more rounds of MDA. This paper reports for the first time factors associated with pre-TAS results from a multi-country analysis. This information can help countries more effectively forecast program activities, such as the potential need for more rounds of MDA, and prioritize resources to ensure adequate coverage of all persons in areas at highest risk of failing pre-TAS. ## Author summary -Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of *Culex* , treatment with diethylcarbamazine-albendazole, lower elevation, higher population density, higher Enhanced Vegetation Index, higher annual rainfall, and six or more rounds of mass drug administration. These results can help national programs plan MDA more effectively, e.g., by focusing resources on areas with higher baseline prevalence and/or lower elevation. +Achieving elimination of lymphatic filariasis (LF) as a public health problem requires a minimum of five rounds of mass drug administration (MDA) and being able to demonstrate low prevalence in several subsequent assessments. LF elimination programs implement sentinel and spot-check site assessments, called pre-TAS, to determine whether districts are eligible to implement more rigorous population-based surveys to determine whether MDA can be stopped or if further rounds are required. Reasons for failing pre-TAS are not well understood and have not previously been examined with data compiled from multiple countries. For this analysis, we analyzed data from routine USAID and WHO reports from Bangladesh, Benin, Burkina Faso, Cameroon, Ghana, Haiti, Indonesia, Mali, Nepal, Niger, Sierra Leone, Tanzania, and Uganda. In a model that included multiple variables, high baseline prevalence and lower elevation were significant. In models comparing only one variable to the outcome, the following were statistically significantly associated with failure: higher baseline prevalence at or above 5% or 10%, use of the FTS, primary vector of *Culex*, treatment with diethylcarbamazine-albendazole, lower elevation, higher population density, higher Enhanced Vegetation Index, higher annual rainfall, and six or more rounds of mass drug administration. These results can help national programs plan MDA more effectively, e.g., by focusing resources on areas with higher baseline prevalence and/or lower elevation. ## Introduction diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.itxt b/tests/data/jats/groundtruth/pone.0234687.nxml.itxt index 05490bad52..4243f73f2e 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.itxt +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.itxt @@ -12,11 +12,11 @@ item-0 at level 0: unspecified: group _root_ item-11 at level 4: text: -1 item-12 at level 4: text: , encompasses emissions from fee ... g an average of 7,000 kg ECM lactation item-13 at level 4: text: -1 - item-14 at level 4: text: . The milk production response a ... re evaluated: total mixed ration (TMR) + item-14 at level 4: text: . The milk production response a ... e evaluated: total mixed ration (TMR) item-15 at level 4: text: ad libitum - item-16 at level 4: text: intake, 75, and 50% of + item-16 at level 4: text: intake, 75, and 50% of item-17 at level 4: text: ad libitum - item-18 at level 4: text: TMR intake with access to grazin ... etween scenarios, averaging 1.06 kg CO + item-18 at level 4: text: TMR intake with access to grazi ... etween scenarios, averaging 1.06 kg CO item-19 at level 4: text: 2 item-20 at level 4: text: e (kg ECM) item-21 at level 4: text: -1 @@ -24,14 +24,14 @@ item-0 at level 0: unspecified: group _root_ item-23 at level 4: text: 2 item-24 at level 4: text: e (kg ECM) item-25 at level 4: text: -1 - item-26 at level 4: text: in scenarios including pastures compared to + item-26 at level 4: text: in scenarios including pastures compared to item-27 at level 4: text: ad libitum - item-28 at level 4: text: TMR. Regardless of factors consi ... uce the C footprint to a small extent. + item-28 at level 4: text: TMR. Regardless of factors cons ... uce the C footprint to a small extent. item-29 at level 2: section_header: Introduction item-30 at level 3: inline: group group item-31 at level 4: text: Greenhouse gas (GHG) emissions f ... ssions [1], ranging from 5.5–7.5 Gt CO item-32 at level 4: text: 2 - item-33 at level 4: text: equivalents (CO + item-33 at level 4: text: equivalents (CO item-34 at level 4: text: 2 item-35 at level 4: text: e) yr item-36 at level 4: text: -1 @@ -41,13 +41,13 @@ item-0 at level 0: unspecified: group _root_ item-40 at level 4: text: 4 item-41 at level 4: text: ) emissions from enteric ferment ... ment [6] and manure management [7]. CH item-42 at level 4: text: 4 - item-43 at level 4: text: emissions from enteric fermentat ... anagement to mitigate the C footprint. + item-43 at level 4: text: emissions from enteric fermenta ... anagement to mitigate the C footprint. item-44 at level 3: text: In subtropical climate zones, co ... t in tropical pastures (e.g. [17–19]). item-45 at level 3: text: It has been shown that dairy cow ... sions from crop and reduced DM intake. item-46 at level 3: text: The aim of this work was to quan ... uring lactation periods was evaluated. item-47 at level 2: section_header: Materials and methods item-48 at level 3: inline: group group - item-49 at level 4: text: An LCA was developed according t ... 15, 2016—Approval number 4373090816 - + item-49 at level 4: text: An LCA was developed according t ... 15, 2016—Approval number 4373090816 - item-50 at level 4: text: https://www.udesc.br/cav/ceua item-51 at level 4: text: . item-52 at level 3: section_header: System boundary @@ -61,23 +61,23 @@ item-0 at level 0: unspecified: group _root_ item-58 at level 5: caption: Table 1 Descriptive characteristics of the herd. item-59 at level 3: section_header: Data sources and livestock system description item-60 at level 4: inline: group group - item-61 at level 5: text: The individual feed requirements ... cows that received both 75 and 50% of + item-61 at level 5: text: The individual feed requirements ... cows that received both 75 and 50% of item-62 at level 5: text: ad libitum - item-63 at level 5: text: TMR intake with access to grazing a tropical pasture (pearl-millet, + item-63 at level 5: text: TMR intake with access to grazing a tropical pasture (pearl-millet, item-64 at level 5: text: Pennisetum glaucum - item-65 at level 5: text: ‘Campeiro’) compared to cows receiving + item-65 at level 5: text: ‘Campeiro’) compared to cows receiving item-66 at level 5: text: ad libitum - item-67 at level 5: text: TMR intake. Cows grazing on a temperate pasture (ryegrass, + item-67 at level 5: text: TMR intake. Cows grazing on a temperate pasture (ryegrass, item-68 at level 5: text: Lolium multiflorum - item-69 at level 5: text: ‘Maximus’) did not need changes to ECM production compared to the + item-69 at level 5: text: ‘Maximus’) did not need changes to ECM production compared to the item-70 at level 5: text: ad libitum - item-71 at level 5: text: TMR intake group. + item-71 at level 5: text: TMR intake group. item-72 at level 4: inline: group group - item-73 at level 5: text: Using experimental data, three s ... evaluated during the lactation period: + item-73 at level 5: text: Using experimental data, three s ... valuated during the lactation period: item-74 at level 5: text: ad libitum - item-75 at level 5: text: TMR intake, and 75, and 50% of + item-75 at level 5: text: TMR intake, and 75, and 50% of item-76 at level 5: text: ad libitum - item-77 at level 5: text: TMR intake with access to grazin ... nction of month ([26], Civiero et al., + item-77 at level 5: text: TMR intake with access to grazi ... ction of month ([26], Civiero et al., item-78 at level 5: text: in press item-79 at level 5: text: ). From April to October (210 da ... med during an entire lactation period. item-80 at level 3: section_header: Impact assessment @@ -88,23 +88,23 @@ item-0 at level 0: unspecified: group _root_ item-85 at level 5: text: 2 item-86 at level 5: text: , CH item-87 at level 5: text: 4 - item-88 at level 5: text: and N + item-88 at level 5: text: and N item-89 at level 5: text: 2 item-90 at level 5: text: O by their 100-year global warming potential (GWP item-91 at level 5: text: 100 item-92 at level 5: text: ), based on IPCC assessment report 5 (AR5; [27]). The values of GWP item-93 at level 5: text: 100 - item-94 at level 5: text: are 1, 28 and 265 for CO + item-94 at level 5: text: are 1, 28 and 265 for CO item-95 at level 5: text: 2 item-96 at level 5: text: , CH item-97 at level 5: text: 4 - item-98 at level 5: text: and N + item-98 at level 5: text: and N item-99 at level 5: text: 2 item-100 at level 5: text: O, respectively. item-101 at level 3: section_header: Feed production item-102 at level 4: section_header: Diets composition item-103 at level 5: inline: group group - item-104 at level 6: text: The DM intake of each ingredient ... ennial tropical pasture (kikuyu grass, + item-104 at level 6: text: The DM intake of each ingredient ... nnial tropical pasture (kikuyu grass, item-105 at level 6: text: Pennisetum clandestinum item-106 at level 6: text: ). The DM intake of calves, heif ... meet the net energy for lactation (NE item-107 at level 6: text: L @@ -147,49 +147,49 @@ item-0 at level 0: unspecified: group _root_ item-142 at level 6: text: 2 item-143 at level 6: text: -C emissions from lime + urea, d ... stures, a C sequestration of 0.57 t ha item-144 at level 6: text: -1 - item-145 at level 6: text: was used based on a 9-year study ... red was 8.9 (no-tillage) and 14.3 L ha + item-145 at level 6: text: was used based on a 9-year stud ... red was 8.9 (no-tillage) and 14.3 L ha item-146 at level 6: text: -1 - item-147 at level 6: text: (disking) for annual tropical an ... te pastures, respectively [40]. The CO + item-147 at level 6: text: (disking) for annual tropical a ... te pastures, respectively [40]. The CO item-148 at level 6: text: 2 - item-149 at level 6: text: from fuel combustion was 2.7 kg CO + item-149 at level 6: text: from fuel combustion was 2.7 kg CO item-150 at level 6: text: 2 - item-151 at level 6: text: L + item-151 at level 6: text: L item-152 at level 6: text: -1 - item-153 at level 6: text: [41]. Secondary sources of emiss ... factors described by Rotz et al. [42]. + item-153 at level 6: text: [41]. Secondary sources of emis ... factors described by Rotz et al. [42]. item-154 at level 5: table with [28x5] item-154 at level 6: caption: Table 4 GHG emissions from On-farm feed production. item-155 at level 3: section_header: Animal husbandry item-156 at level 4: inline: group group item-157 at level 5: text: The CH item-158 at level 5: text: 4 - item-159 at level 5: text: emissions from enteric fermentation intensity (g (kg ECM) + item-159 at level 5: text: emissions from enteric fermentation intensity (g (kg ECM) item-160 at level 5: text: -1 item-161 at level 5: text: ) was a function of estimated CH item-162 at level 5: text: 4 - item-163 at level 5: text: yield (g (kg DM intake) + item-163 at level 5: text: yield (g (kg DM intake) item-164 at level 5: text: -1 item-165 at level 5: text: ), actual DM intake and ECM. The enteric CH item-166 at level 5: text: 4 - item-167 at level 5: text: yield was estimated as a functio ... proposed by Niu et al. [43], where: CH + item-167 at level 5: text: yield was estimated as a functi ... proposed by Niu et al. [43], where: CH item-168 at level 5: text: 4 - item-169 at level 5: text: yield (g (kg DM intake) + item-169 at level 5: text: yield (g (kg DM intake) item-170 at level 5: text: -1 item-171 at level 5: text: ) = 13.8 + 0.185 × NDF (% DM intake). item-172 at level 3: section_header: Manure from confined cows and urine and dung from grazing animals item-173 at level 4: inline: group group item-174 at level 5: text: The CH item-175 at level 5: text: 4 - item-176 at level 5: text: emission from manure (kg (kg ECM) + item-176 at level 5: text: emission from manure (kg (kg ECM) item-177 at level 5: text: -1 item-178 at level 5: text: ) was a function of daily CH item-179 at level 5: text: 4 - item-180 at level 5: text: emission from manure (kg cow + item-180 at level 5: text: emission from manure (kg cow item-181 at level 5: text: -1 item-182 at level 5: text: ) and daily ECM (kg cow item-183 at level 5: text: -1 item-184 at level 5: text: ). The daily CH item-185 at level 5: text: 4 - item-186 at level 5: text: emission from manure was estimat ... olatile solid (VS) excreted (kg DM cow + item-186 at level 5: text: emission from manure was estima ... olatile solid (VS) excreted (kg DM cow item-187 at level 5: text: -1 item-188 at level 5: text: ) in manure. The daily VS was es ... n an organic matter (OM) basis (kg day item-189 at level 5: text: -1 @@ -218,11 +218,11 @@ item-0 at level 0: unspecified: group _root_ item-212 at level 5: text: 2 item-213 at level 5: text: O-N (kg N) item-214 at level 5: text: -1 - item-215 at level 5: text: stored in a pit below animal confinements, and 0.02 kg N + item-215 at level 5: text: stored in a pit below animal confinements, and 0.02 kg N item-216 at level 5: text: 2 item-217 at level 5: text: O-N (kg of urine and dung) item-218 at level 5: text: -1 - item-219 at level 5: text: deposited on pasture [38]. The indirect N + item-219 at level 5: text: deposited on pasture [38]. The indirect N item-220 at level 5: text: 2 item-221 at level 5: text: O emissions from storage manure ... using the IPCC [38] emission factors. item-222 at level 3: section_header: Farm management @@ -246,36 +246,36 @@ item-0 at level 0: unspecified: group _root_ item-239 at level 5: text: -1 item-240 at level 5: text: ) [41]. Emissions from manufactu ... w (t) × (kg machinery mass (kg manure) item-241 at level 5: text: -1 - item-242 at level 5: text: × 10 + item-242 at level 5: text: × 10 item-243 at level 5: text: −3 item-244 at level 5: text: ) [42] × kg CO item-245 at level 5: text: 2 item-246 at level 5: text: e (kg machinery mass) item-247 at level 5: text: -1 - item-248 at level 5: text: [42]. + item-248 at level 5: text: [42]. item-249 at level 4: inline: group group item-250 at level 5: text: Emissions from electricity for m ... ated using two emission factors (kg CO item-251 at level 5: text: 2 - item-252 at level 5: text: kWh + item-252 at level 5: text: kWh item-253 at level 5: text: -1 item-254 at level 5: text: ). The first one is based on Uni ... ivities is 0.06 kWh (kg milk produced) item-255 at level 5: text: -1 - item-256 at level 5: text: [47]. The annual electricity use for lighting was 75 kWh cow + item-256 at level 5: text: [47]. The annual electricity use for lighting was 75 kWh cow item-257 at level 5: text: -1 item-258 at level 5: text: , which is the value considered ... ws in naturally ventilated barns [47]. item-259 at level 3: section_header: Co-product allocation item-260 at level 4: inline: group group item-261 at level 5: text: The C footprint for milk produce ... ibed by Thoma et al. [48]. Briefly, AR item-262 at level 5: text: milk - item-263 at level 5: text: = 1–6.04 × BMR, where + item-263 at level 5: text: = 1–6.04 × BMR, where item-264 at level 5: text: : - item-265 at level 5: text: AR + item-265 at level 5: text: AR item-266 at level 5: text: milk - item-267 at level 5: text: is the allocation ratio for milk ... during cow`s entire life (kg). The AR + item-267 at level 5: text: is the allocation ratio for mil ... during cow`s entire life (kg). The AR item-268 at level 5: text: milk - item-269 at level 5: text: were 0.854 and 0.849 for TMR and ... asture scenarios, respectively. The AR + item-269 at level 5: text: were 0.854 and 0.849 for TMR an ... asture scenarios, respectively. The AR item-270 at level 5: text: milk - item-271 at level 5: text: was applied to the whole emissio ... directly assigned to milk production. + item-271 at level 5: text: was applied to the whole emissi ... directly assigned to milk production. item-272 at level 3: section_header: Sensitivity analysis item-273 at level 4: text: A sensitivity index was calculat ... ses a similar change in the footprint. item-274 at level 2: section_header: Results and discussion @@ -286,17 +286,17 @@ item-0 at level 0: unspecified: group _root_ item-279 at level 5: text: 2 item-280 at level 5: text: e (kg ECM) item-281 at level 5: text: -1 - item-282 at level 5: text: (Fig 2C and 2D) in scenarios that included pastures compared to + item-282 at level 5: text: (Fig 2C and 2D) in scenarios that included pastures compared to item-283 at level 5: text: ad libitum - item-284 at level 5: text: TMR intake. Due to differences i ... values ranged from 0.92 to 1.04 kg CO + item-284 at level 5: text: TMR intake. Due to differences ... values ranged from 0.92 to 1.04 kg CO item-285 at level 5: text: 2 item-286 at level 5: text: e (kg ECM) item-287 at level 5: text: -1 - item-288 at level 5: text: for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO + item-288 at level 5: text: for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO item-289 at level 5: text: 2 item-290 at level 5: text: e (kg ECM) item-291 at level 5: text: -1 - item-292 at level 5: text: for cows with access to pasture. ... ocal emission factors for estimating N + item-292 at level 5: text: for cows with access to pasture ... ocal emission factors for estimating N item-293 at level 5: text: 2 item-294 at level 5: text: O-N emissions [37], manure emiss ... more than 5% of overall GHG emissions. item-295 at level 4: picture @@ -328,13 +328,13 @@ item-0 at level 0: unspecified: group _root_ item-320 at level 5: text: 2 item-321 at level 5: text: e (kg ECM) item-322 at level 5: text: -1 - item-323 at level 5: text: [8,55]. Thus, even though differ ... e emissions estimation, sequestered CO + item-323 at level 5: text: [8,55]. Thus, even though diffe ... e emissions estimation, sequestered CO item-324 at level 5: text: 2 item-325 at level 5: text: -C, etc.), herd productivity and ... the C footprint of the dairy systems. item-326 at level 4: inline: group group item-327 at level 5: text: The similarity of C footprint be ... served that an increase of 1000 kg cow item-328 at level 5: text: -1 - item-329 at level 5: text: (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO + item-329 at level 5: text: (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO item-330 at level 5: text: 2 item-331 at level 5: text: e (kg ECM) item-332 at level 5: text: -1 @@ -344,55 +344,55 @@ item-0 at level 0: unspecified: group _root_ item-336 at level 4: inline: group group item-337 at level 5: text: The lower C footprint in scenari ... emission factors [37] were used for N item-338 at level 5: text: 2 - item-339 at level 5: text: O emissions from urine and dung ... enarios including pastures compared to + item-339 at level 5: text: O emissions from urine and dung ... narios including pastures compared to item-340 at level 5: text: ad libitum - item-341 at level 5: text: TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N + item-341 at level 5: text: TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N item-342 at level 5: text: 2 item-343 at level 5: text: O-N (kg N) item-344 at level 5: text: -1 - item-345 at level 5: text: for urine and dung from grazing ... five times lower, averaging 0.004 kg N + item-345 at level 5: text: for urine and dung from grazing ... five times lower, averaging 0.004 kg N item-346 at level 5: text: 2 item-347 at level 5: text: O-N kg item-348 at level 5: text: -1 - item-349 at level 5: text: [37]. + item-349 at level 5: text: [37]. item-350 at level 3: section_header: Methane emissions item-351 at level 4: inline: group group item-352 at level 5: text: The enteric CH item-353 at level 5: text: 4 - item-354 at level 5: text: intensity was similar between di ... Fig 3). The large effect of enteric CH + item-354 at level 5: text: intensity was similar between d ... Fig 3). The large effect of enteric CH item-355 at level 5: text: 4 - item-356 at level 5: text: emissions on the whole C footpri ... cted, because the impact of enteric CH + item-356 at level 5: text: emissions on the whole C footpr ... cted, because the impact of enteric CH item-357 at level 5: text: 4 - item-358 at level 5: text: on GHG emissions of milk product ... o range from 44 to 60% of the total CO + item-358 at level 5: text: on GHG emissions of milk produc ... o range from 44 to 60% of the total CO item-359 at level 5: text: 2 item-360 at level 5: text: e [50,52,57,58]. However, emissi ... trate feeds are greater than 0.7 kg CO item-361 at level 5: text: 2 item-362 at level 5: text: e kg item-363 at level 5: text: -1 - item-364 at level 5: text: [59], which did not happen in this study. + item-364 at level 5: text: [59], which did not happen in this study. item-365 at level 4: picture item-365 at level 5: caption: Fig 3 Sensitivity of the C footprint. Sensitivity index = percentage change in C footprint for a 10% change in the given emission source divided by 10% of. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. item-366 at level 4: inline: group group item-367 at level 5: text: The lack of difference in enteric CH item-368 at level 5: text: 4 - item-369 at level 5: text: emissions in different systems c ... nual temperate pastures (495 g (kg DM) + item-369 at level 5: text: emissions in different systems ... nual temperate pastures (495 g (kg DM) item-370 at level 5: text: -1 item-371 at level 5: text: ) compared to corn silage (550 g (kg DM) item-372 at level 5: text: -1 item-373 at level 5: text: ). Hence, an expected, increase ... have shown that the actual enteric CH item-374 at level 5: text: 4 - item-375 at level 5: text: emissions may decrease with incl ... ybean meal [60] or increase enteric CH + item-375 at level 5: text: emissions may decrease with inc ... ybean meal [60] or increase enteric CH item-376 at level 5: text: 4 - item-377 at level 5: text: emissions when dairy cows grazin ... silage [61]. Additionally, enteric CH + item-377 at level 5: text: emissions when dairy cows grazi ... silage [61]. Additionally, enteric CH item-378 at level 5: text: 4 - item-379 at level 5: text: emissions did not differ between ... same scenarios as in this study [26]. + item-379 at level 5: text: emissions did not differ betwee ... same scenarios as in this study [26]. item-380 at level 3: section_header: Emissions from excreta and feed production item-381 at level 4: inline: group group item-382 at level 5: text: Using IPCC emission factors for N item-383 at level 5: text: 2 item-384 at level 5: text: O emissions from urine and dung [38] and those from Table 3, CH item-385 at level 5: text: 4 - item-386 at level 5: text: emissions from manure decreased 0.07 kg CO + item-386 at level 5: text: emissions from manure decreased 0.07 kg CO item-387 at level 5: text: 2 item-388 at level 5: text: e (kg ECM) item-389 at level 5: text: -1 @@ -402,9 +402,9 @@ item-0 at level 0: unspecified: group _root_ item-393 at level 5: text: 2 item-394 at level 5: text: e (kg ECM) item-395 at level 5: text: -1 - item-396 at level 5: text: , as TMR intake was restricted to 50% + item-396 at level 5: text: , as TMR intake was restricted to 50% item-397 at level 5: text: ad libitum - item-398 at level 5: text: (Fig 4A). Emissions for pastures increased by 0.06 kg CO + item-398 at level 5: text: (Fig 4A). Emissions for pastures increased by 0.06 kg CO item-399 at level 5: text: 2 item-400 at level 5: text: e (kg ECM) item-401 at level 5: text: -1 @@ -420,9 +420,9 @@ item-0 at level 0: unspecified: group _root_ item-411 at level 5: text: -1 item-412 at level 5: text: , N intake decreased by 20% and ... g dairy cows ranged from 150 g (kg DM) item-413 at level 5: text: -1 - item-414 at level 5: text: on TMR system to 198 g (kg DM) + item-414 at level 5: text: on TMR system to 198 g (kg DM) item-415 at level 5: text: -1 - item-416 at level 5: text: on 50% TMR with pasture. Additio ... may not be captured by microbes [65]. + item-416 at level 5: text: on 50% TMR with pasture. Additi ... may not be captured by microbes [65]. item-417 at level 4: picture item-417 at level 5: caption: Fig 4 Greenhouse gas emissions (GHG) from manure and feed production in dairy cattle systems. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38]. (b) Feed production emission factors from Table 3. (c) N2O emission factors for urine and dung from local data [37]. (d) Feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture. item-418 at level 4: inline: group group @@ -430,7 +430,7 @@ item-0 at level 0: unspecified: group _root_ item-420 at level 5: text: 2 item-421 at level 5: text: O emissions from urine and dung ... d those from Table 4, reductions in CH item-422 at level 5: text: 4 - item-423 at level 5: text: emissions from stocked manure, w ... iets, did not offset by increases in N + item-423 at level 5: text: emissions from stocked manure, ... iets, did not offset by increases in N item-424 at level 5: text: 2 item-425 at level 5: text: O emissions from excreta (Fig 4C ... much lower emission factors used for N item-426 at level 5: text: 2 @@ -443,26 +443,26 @@ item-0 at level 0: unspecified: group _root_ item-433 at level 5: text: 2 item-434 at level 5: text: e kWh item-435 at level 5: text: -1 - item-436 at level 5: text: [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO + item-436 at level 5: text: [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO item-437 at level 5: text: 2 item-438 at level 5: text: e kWh item-439 at level 5: text: -1 - item-440 at level 5: text: [42]). This apparent discrepancy ... has an emission factor of 0.074 kg CO + item-440 at level 5: text: [42]). This apparent discrepanc ... has an emission factor of 0.074 kg CO item-441 at level 5: text: 2 item-442 at level 5: text: e kWh item-443 at level 5: text: -1 - item-444 at level 5: text: against 0.382 and 0.926 kg CO + item-444 at level 5: text: against 0.382 and 0.926 kg CO item-445 at level 5: text: 2 item-446 at level 5: text: e kWh item-447 at level 5: text: -1 - item-448 at level 5: text: produced by natural gas and hard coal, respectively [46]. + item-448 at level 5: text: produced by natural gas and hard coal, respectively [46]. item-449 at level 3: section_header: Assumptions and limitations item-450 at level 4: inline: group group item-451 at level 5: text: The milk production and composit ... sion factors for direct and indirect N item-452 at level 5: text: 2 item-453 at level 5: text: O emissions from urine and dung ... sary to reduce the uncertainty. The CO item-454 at level 5: text: 2 - item-455 at level 5: text: emitted from lime and urea appli ... ions as a function of soil management. + item-455 at level 5: text: emitted from lime and urea appl ... ions as a function of soil management. item-456 at level 3: section_header: Further considerations item-457 at level 4: inline: group group item-458 at level 5: text: The potential for using pasture ... reduced the C footprint by 0.12 kg CO @@ -477,34 +477,34 @@ item-0 at level 0: unspecified: group _root_ item-467 at level 5: text: 2 item-468 at level 5: text: e (kg ECM) item-469 at level 5: text: -1 - item-470 at level 5: text: in subclinical ketosis [71] and by 0.02 kg CO + item-470 at level 5: text: in subclinical ketosis [71] and by 0.02 kg CO item-471 at level 5: text: 2 item-472 at level 5: text: e (kg ECM) item-473 at level 5: text: -1 - item-474 at level 5: text: in case of foot lesions [72]. + item-474 at level 5: text: in case of foot lesions [72]. item-475 at level 4: inline: group group item-476 at level 5: text: Grazing lands may also improve b ... n subtropical areas by 0.5 to 1.5 t ha item-477 at level 5: text: -1 - item-478 at level 5: text: [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha + item-478 at level 5: text: [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha item-479 at level 5: text: -1 - item-480 at level 5: text: would be sequestered, further re ... e C footprint by 0.015 and 0.025 kg CO + item-480 at level 5: text: would be sequestered, further r ... e C footprint by 0.015 and 0.025 kg CO item-481 at level 5: text: 2 item-482 at level 5: text: e (kg ECM) item-483 at level 5: text: -1 - item-484 at level 5: text: for the scenarios using 75 and 5 ... emissions would be 0.03 and 0.05 kg CO + item-484 at level 5: text: for the scenarios using 75 and ... emissions would be 0.03 and 0.05 kg CO item-485 at level 5: text: 2 item-486 at level 5: text: e (kg ECM) item-487 at level 5: text: -1 - item-488 at level 5: text: for 75 and 50% TMR, respectively ... C storage, so that net exchange of CO + item-488 at level 5: text: for 75 and 50% TMR, respectivel ... C storage, so that net exchange of CO item-489 at level 5: text: 2 - item-490 at level 5: text: would be negligible [76]. + item-490 at level 5: text: would be negligible [76]. item-491 at level 2: section_header: Conclusions item-492 at level 3: inline: group group item-493 at level 4: text: This study assessed the C footpr ... attributable to the evidence of low N item-494 at level 4: text: 2 item-495 at level 4: text: O emissions from urine and dung ... ical areas. Even though the enteric CH item-496 at level 4: text: 4 - item-497 at level 4: text: intensity was the largest source of CO + item-497 at level 4: text: intensity was the largest source of CO item-498 at level 4: text: 2 item-499 at level 4: text: e emissions, it did not change b ... on with or without access to pastures. item-500 at level 2: section_header: Acknowledgments diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.json b/tests/data/jats/groundtruth/pone.0234687.nxml.json index c084f0edfd..80fdcc6435 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.json +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "pone.0234687", "origin": { "mimetype": "application/xml", @@ -2104,8 +2104,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ". The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR)", - "text": ". The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR)" + "orig": ". The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR) ", + "text": ". The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR) " }, { "self_ref": "#/texts/13", @@ -2135,8 +2135,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "intake, 75, and 50% of", - "text": "intake, 75, and 50% of" + "orig": " intake, 75, and 50% of ", + "text": " intake, 75, and 50% of " }, { "self_ref": "#/texts/15", @@ -2166,8 +2166,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO", - "text": "TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO" + "orig": " TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO", + "text": " TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO" }, { "self_ref": "#/texts/17", @@ -2290,8 +2290,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in scenarios including pastures compared to", - "text": "in scenarios including pastures compared to" + "orig": " in scenarios including pastures compared to ", + "text": " in scenarios including pastures compared to " }, { "self_ref": "#/texts/25", @@ -2321,8 +2321,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent.", - "text": "TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent." + "orig": " TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent.", + "text": " TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent." }, { "self_ref": "#/texts/27", @@ -2393,8 +2393,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "equivalents (CO", - "text": "equivalents (CO" + "orig": " equivalents (CO", + "text": " equivalents (CO" }, { "self_ref": "#/texts/31", @@ -2529,8 +2529,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint.", - "text": "emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint." + "orig": " emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint.", + "text": " emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint." }, { "self_ref": "#/texts/40", @@ -2624,8 +2624,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 -", - "text": "An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 -" + "orig": "An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 - ", + "text": "An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 - " }, { "self_ref": "#/texts/45", @@ -2784,8 +2784,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of", - "text": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of" + "orig": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of ", + "text": "The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of " }, { "self_ref": "#/texts/56", @@ -2815,8 +2815,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake with access to grazing a tropical pasture (pearl-millet,", - "text": "TMR intake with access to grazing a tropical pasture (pearl-millet," + "orig": " TMR intake with access to grazing a tropical pasture (pearl-millet, ", + "text": " TMR intake with access to grazing a tropical pasture (pearl-millet, " }, { "self_ref": "#/texts/58", @@ -2846,8 +2846,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "‘Campeiro’) compared to cows receiving", - "text": "‘Campeiro’) compared to cows receiving" + "orig": " ‘Campeiro’) compared to cows receiving ", + "text": " ‘Campeiro’) compared to cows receiving " }, { "self_ref": "#/texts/60", @@ -2877,8 +2877,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Cows grazing on a temperate pasture (ryegrass,", - "text": "TMR intake. Cows grazing on a temperate pasture (ryegrass," + "orig": " TMR intake. Cows grazing on a temperate pasture (ryegrass, ", + "text": " TMR intake. Cows grazing on a temperate pasture (ryegrass, " }, { "self_ref": "#/texts/62", @@ -2908,8 +2908,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "‘Maximus’) did not need changes to ECM production compared to the", - "text": "‘Maximus’) did not need changes to ECM production compared to the" + "orig": " ‘Maximus’) did not need changes to ECM production compared to the ", + "text": " ‘Maximus’) did not need changes to ECM production compared to the " }, { "self_ref": "#/texts/64", @@ -2939,8 +2939,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake group.", - "text": "TMR intake group." + "orig": " TMR intake group.", + "text": " TMR intake group." }, { "self_ref": "#/texts/66", @@ -2951,8 +2951,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "Using experimental data, three scenarios were evaluated during the lactation period:", - "text": "Using experimental data, three scenarios were evaluated during the lactation period:" + "orig": "Using experimental data, three scenarios were evaluated during the lactation period: ", + "text": "Using experimental data, three scenarios were evaluated during the lactation period: " }, { "self_ref": "#/texts/67", @@ -2982,8 +2982,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake, and 75, and 50% of", - "text": "TMR intake, and 75, and 50% of" + "orig": " TMR intake, and 75, and 50% of ", + "text": " TMR intake, and 75, and 50% of " }, { "self_ref": "#/texts/69", @@ -3013,8 +3013,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al.,", - "text": "TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al.," + "orig": " TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., ", + "text": " TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., " }, { "self_ref": "#/texts/71", @@ -3166,8 +3166,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and N", - "text": "and N" + "orig": " and N", + "text": " and N" }, { "self_ref": "#/texts/81", @@ -3259,8 +3259,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "are 1, 28 and 265 for CO", - "text": "are 1, 28 and 265 for CO" + "orig": " are 1, 28 and 265 for CO", + "text": " are 1, 28 and 265 for CO" }, { "self_ref": "#/texts/87", @@ -3321,8 +3321,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "and N", - "text": "and N" + "orig": " and N", + "text": " and N" }, { "self_ref": "#/texts/91", @@ -3404,8 +3404,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass,", - "text": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass," + "orig": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, ", + "text": "The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, " }, { "self_ref": "#/texts/96", @@ -3999,8 +3999,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha", - "text": "was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha" + "orig": " was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha", + "text": " was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha" }, { "self_ref": "#/texts/135", @@ -4030,8 +4030,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(disking) for annual tropical and temperate pastures, respectively [40]. The CO", - "text": "(disking) for annual tropical and temperate pastures, respectively [40]. The CO" + "orig": " (disking) for annual tropical and temperate pastures, respectively [40]. The CO", + "text": " (disking) for annual tropical and temperate pastures, respectively [40]. The CO" }, { "self_ref": "#/texts/137", @@ -4061,8 +4061,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "from fuel combustion was 2.7 kg CO", - "text": "from fuel combustion was 2.7 kg CO" + "orig": " from fuel combustion was 2.7 kg CO", + "text": " from fuel combustion was 2.7 kg CO" }, { "self_ref": "#/texts/139", @@ -4092,8 +4092,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "L", - "text": "L" + "orig": " L", + "text": " L" }, { "self_ref": "#/texts/141", @@ -4123,8 +4123,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42].", - "text": "[41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]." + "orig": " [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42].", + "text": " [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]." }, { "self_ref": "#/texts/143", @@ -4195,8 +4195,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from enteric fermentation intensity (g (kg ECM)", - "text": "emissions from enteric fermentation intensity (g (kg ECM)" + "orig": " emissions from enteric fermentation intensity (g (kg ECM)", + "text": " emissions from enteric fermentation intensity (g (kg ECM)" }, { "self_ref": "#/texts/148", @@ -4257,8 +4257,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield (g (kg DM intake)", - "text": "yield (g (kg DM intake)" + "orig": " yield (g (kg DM intake)", + "text": " yield (g (kg DM intake)" }, { "self_ref": "#/texts/152", @@ -4319,8 +4319,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH", - "text": "yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH" + "orig": " yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH", + "text": " yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH" }, { "self_ref": "#/texts/156", @@ -4350,8 +4350,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "yield (g (kg DM intake)", - "text": "yield (g (kg DM intake)" + "orig": " yield (g (kg DM intake)", + "text": " yield (g (kg DM intake)" }, { "self_ref": "#/texts/158", @@ -4447,8 +4447,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure (kg (kg ECM)", - "text": "emission from manure (kg (kg ECM)" + "orig": " emission from manure (kg (kg ECM)", + "text": " emission from manure (kg (kg ECM)" }, { "self_ref": "#/texts/164", @@ -4509,8 +4509,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure (kg cow", - "text": "emission from manure (kg cow" + "orig": " emission from manure (kg cow", + "text": " emission from manure (kg cow" }, { "self_ref": "#/texts/168", @@ -4602,8 +4602,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow", - "text": "emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow" + "orig": " emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow", + "text": " emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow" }, { "self_ref": "#/texts/174", @@ -5029,8 +5029,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "stored in a pit below animal confinements, and 0.02 kg N", - "text": "stored in a pit below animal confinements, and 0.02 kg N" + "orig": " stored in a pit below animal confinements, and 0.02 kg N", + "text": " stored in a pit below animal confinements, and 0.02 kg N" }, { "self_ref": "#/texts/202", @@ -5091,8 +5091,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "deposited on pasture [38]. The indirect N", - "text": "deposited on pasture [38]. The indirect N" + "orig": " deposited on pasture [38]. The indirect N", + "text": " deposited on pasture [38]. The indirect N" }, { "self_ref": "#/texts/206", @@ -5416,8 +5416,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "× 10", - "text": "× 10" + "orig": " × 10", + "text": " × 10" }, { "self_ref": "#/texts/227", @@ -5509,8 +5509,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[42].", - "text": "[42]." + "orig": " [42].", + "text": " [42]." }, { "self_ref": "#/texts/233", @@ -5552,8 +5552,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "kWh", - "text": "kWh" + "orig": " kWh", + "text": " kWh" }, { "self_ref": "#/texts/236", @@ -5614,8 +5614,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[47]. The annual electricity use for lighting was 75 kWh cow", - "text": "[47]. The annual electricity use for lighting was 75 kWh cow" + "orig": " [47]. The annual electricity use for lighting was 75 kWh cow", + "text": " [47]. The annual electricity use for lighting was 75 kWh cow" }, { "self_ref": "#/texts/240", @@ -5705,8 +5705,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "= 1–6.04 × BMR, where", - "text": "= 1–6.04 × BMR, where" + "orig": " = 1–6.04 × BMR, where", + "text": " = 1–6.04 × BMR, where" }, { "self_ref": "#/texts/246", @@ -5736,8 +5736,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "AR", - "text": "AR" + "orig": " AR", + "text": " AR" }, { "self_ref": "#/texts/248", @@ -5767,8 +5767,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR", - "text": "is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR" + "orig": " is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR", + "text": " is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR" }, { "self_ref": "#/texts/250", @@ -5798,8 +5798,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR", - "text": "were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR" + "orig": " were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR", + "text": " were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR" }, { "self_ref": "#/texts/252", @@ -5829,8 +5829,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production.", - "text": "was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production." + "orig": " was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production.", + "text": " was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production." }, { "self_ref": "#/texts/254", @@ -6008,8 +6008,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Fig 2C and 2D) in scenarios that included pastures compared to", - "text": "(Fig 2C and 2D) in scenarios that included pastures compared to" + "orig": " (Fig 2C and 2D) in scenarios that included pastures compared to ", + "text": " (Fig 2C and 2D) in scenarios that included pastures compared to " }, { "self_ref": "#/texts/264", @@ -6039,8 +6039,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO", - "text": "TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO" + "orig": " TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO", + "text": " TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO" }, { "self_ref": "#/texts/266", @@ -6101,8 +6101,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO", - "text": "for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO" + "orig": " for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO", + "text": " for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO" }, { "self_ref": "#/texts/270", @@ -6163,8 +6163,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N", - "text": "for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N" + "orig": " for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N", + "text": " for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N" }, { "self_ref": "#/texts/274", @@ -6621,8 +6621,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO", - "text": "[8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO" + "orig": " [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO", + "text": " [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO" }, { "self_ref": "#/texts/304", @@ -6695,8 +6695,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO", - "text": "(5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO" + "orig": " (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO", + "text": " (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO" }, { "self_ref": "#/texts/309", @@ -6831,8 +6831,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to", - "text": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to" + "orig": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to ", + "text": "O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to " }, { "self_ref": "#/texts/318", @@ -6862,8 +6862,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N", - "text": "TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N" + "orig": " TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N", + "text": " TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N" }, { "self_ref": "#/texts/320", @@ -6924,8 +6924,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N", - "text": "for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N" + "orig": " for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N", + "text": " for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N" }, { "self_ref": "#/texts/324", @@ -6986,8 +6986,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[37].", - "text": "[37]." + "orig": " [37].", + "text": " [37]." }, { "self_ref": "#/texts/328", @@ -7052,8 +7052,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH", - "text": "intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH" + "orig": " intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH", + "text": " intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH" }, { "self_ref": "#/texts/332", @@ -7083,8 +7083,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions on the whole C footprint was expected, because the impact of enteric CH", - "text": "emissions on the whole C footprint was expected, because the impact of enteric CH" + "orig": " emissions on the whole C footprint was expected, because the impact of enteric CH", + "text": " emissions on the whole C footprint was expected, because the impact of enteric CH" }, { "self_ref": "#/texts/334", @@ -7114,8 +7114,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO", - "text": "on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO" + "orig": " on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO", + "text": " on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO" }, { "self_ref": "#/texts/336", @@ -7207,8 +7207,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[59], which did not happen in this study.", - "text": "[59], which did not happen in this study." + "orig": " [59], which did not happen in this study.", + "text": " [59], which did not happen in this study." }, { "self_ref": "#/texts/342", @@ -7262,8 +7262,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)", - "text": "emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)" + "orig": " emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)", + "text": " emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)" }, { "self_ref": "#/texts/346", @@ -7355,8 +7355,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH", - "text": "emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH" + "orig": " emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH", + "text": " emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH" }, { "self_ref": "#/texts/352", @@ -7386,8 +7386,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH", - "text": "emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH" + "orig": " emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH", + "text": " emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH" }, { "self_ref": "#/texts/354", @@ -7417,8 +7417,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26].", - "text": "emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]." + "orig": " emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26].", + "text": " emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]." }, { "self_ref": "#/texts/356", @@ -7517,8 +7517,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from manure decreased 0.07 kg CO", - "text": "emissions from manure decreased 0.07 kg CO" + "orig": " emissions from manure decreased 0.07 kg CO", + "text": " emissions from manure decreased 0.07 kg CO" }, { "self_ref": "#/texts/362", @@ -7672,8 +7672,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": ", as TMR intake was restricted to 50%", - "text": ", as TMR intake was restricted to 50%" + "orig": ", as TMR intake was restricted to 50% ", + "text": ", as TMR intake was restricted to 50% " }, { "self_ref": "#/texts/372", @@ -7703,8 +7703,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "(Fig 4A). Emissions for pastures increased by 0.06 kg CO", - "text": "(Fig 4A). Emissions for pastures increased by 0.06 kg CO" + "orig": " (Fig 4A). Emissions for pastures increased by 0.06 kg CO", + "text": " (Fig 4A). Emissions for pastures increased by 0.06 kg CO" }, { "self_ref": "#/texts/374", @@ -7951,8 +7951,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on TMR system to 198 g (kg DM)", - "text": "on TMR system to 198 g (kg DM)" + "orig": " on TMR system to 198 g (kg DM)", + "text": " on TMR system to 198 g (kg DM)" }, { "self_ref": "#/texts/390", @@ -7982,8 +7982,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65].", - "text": "on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]." + "orig": " on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65].", + "text": " on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]." }, { "self_ref": "#/texts/392", @@ -8068,8 +8068,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emissions from stocked manure, when pastures were included on diets, did not offset by increases in N", - "text": "emissions from stocked manure, when pastures were included on diets, did not offset by increases in N" + "orig": " emissions from stocked manure, when pastures were included on diets, did not offset by increases in N", + "text": " emissions from stocked manure, when pastures were included on diets, did not offset by increases in N" }, { "self_ref": "#/texts/398", @@ -8248,8 +8248,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[46]) is much lower than that in a LCA study conducted in US (0.73 kg CO", - "text": "[46]) is much lower than that in a LCA study conducted in US (0.73 kg CO" + "orig": " [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO", + "text": " [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO" }, { "self_ref": "#/texts/410", @@ -8310,8 +8310,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO", - "text": "[42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO" + "orig": " [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO", + "text": " [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO" }, { "self_ref": "#/texts/414", @@ -8372,8 +8372,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "against 0.382 and 0.926 kg CO", - "text": "against 0.382 and 0.926 kg CO" + "orig": " against 0.382 and 0.926 kg CO", + "text": " against 0.382 and 0.926 kg CO" }, { "self_ref": "#/texts/418", @@ -8434,8 +8434,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "produced by natural gas and hard coal, respectively [46].", - "text": "produced by natural gas and hard coal, respectively [46]." + "orig": " produced by natural gas and hard coal, respectively [46].", + "text": " produced by natural gas and hard coal, respectively [46]." }, { "self_ref": "#/texts/422", @@ -8525,8 +8525,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management.", - "text": "emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management." + "orig": " emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management.", + "text": " emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management." }, { "self_ref": "#/texts/428", @@ -8743,8 +8743,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in subclinical ketosis [71] and by 0.02 kg CO", - "text": "in subclinical ketosis [71] and by 0.02 kg CO" + "orig": " in subclinical ketosis [71] and by 0.02 kg CO", + "text": " in subclinical ketosis [71] and by 0.02 kg CO" }, { "self_ref": "#/texts/442", @@ -8805,8 +8805,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "in case of foot lesions [72].", - "text": "in case of foot lesions [72]." + "orig": " in case of foot lesions [72].", + "text": " in case of foot lesions [72]." }, { "self_ref": "#/texts/446", @@ -8848,8 +8848,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "[75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha", - "text": "[75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha" + "orig": " [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha", + "text": " [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha" }, { "self_ref": "#/texts/449", @@ -8879,8 +8879,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO", - "text": "would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO" + "orig": " would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO", + "text": " would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO" }, { "self_ref": "#/texts/451", @@ -8941,8 +8941,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO", - "text": "for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO" + "orig": " for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO", + "text": " for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO" }, { "self_ref": "#/texts/455", @@ -9003,8 +9003,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO", - "text": "for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO" + "orig": " for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO", + "text": " for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO" }, { "self_ref": "#/texts/459", @@ -9034,8 +9034,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "would be negligible [76].", - "text": "would be negligible [76]." + "orig": " would be negligible [76].", + "text": " would be negligible [76]." }, { "self_ref": "#/texts/461", @@ -9125,8 +9125,8 @@ "content_layer": "body", "label": "text", "prov": [], - "orig": "intensity was the largest source of CO", - "text": "intensity was the largest source of CO" + "orig": " intensity was the largest source of CO", + "text": " intensity was the largest source of CO" }, { "self_ref": "#/texts/467", diff --git a/tests/data/jats/groundtruth/pone.0234687.nxml.md b/tests/data/jats/groundtruth/pone.0234687.nxml.md index 098b61f1a6..08d1ee5902 100644 --- a/tests/data/jats/groundtruth/pone.0234687.nxml.md +++ b/tests/data/jats/groundtruth/pone.0234687.nxml.md @@ -6,13 +6,13 @@ Department of Animal Science, University of California, Davis, California, Unite ## Abstract -Carbon (C) footprint of dairy production, expressed in kg C dioxide (CO 2 ) equivalents (CO 2 e) (kg energy-corrected milk (ECM)) -1 , encompasses emissions from feed production, diet management and total product output. The proportion of pasture on diets may affect all these factors, mainly in subtropical climate zones, where cows may access tropical and temperate pastures during warm and cold seasons, respectively. The aim of the study was to assess the C footprint of a dairy system with annual tropical and temperate pastures in a subtropical region. The system boundary included all processes up to the animal farm gate. Feed requirement during the entire life of each cow was based on data recorded from Holstein × Jersey cow herds producing an average of 7,000 kg ECM lactation -1 . The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR) *ad libitum* intake, 75, and 50% of *ad libitum* TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO 2 e (kg ECM) -1 . Considering factors from studies conducted in subtropical conditions and actual inputs for on-farm feed production, the C footprint decreased 0.04 kg CO 2 e (kg ECM) -1 in scenarios including pastures compared to *ad libitum* TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent. +Carbon (C) footprint of dairy production, expressed in kg C dioxide (CO2) equivalents (CO2e) (kg energy-corrected milk (ECM))-1, encompasses emissions from feed production, diet management and total product output. The proportion of pasture on diets may affect all these factors, mainly in subtropical climate zones, where cows may access tropical and temperate pastures during warm and cold seasons, respectively. The aim of the study was to assess the C footprint of a dairy system with annual tropical and temperate pastures in a subtropical region. The system boundary included all processes up to the animal farm gate. Feed requirement during the entire life of each cow was based on data recorded from Holstein × Jersey cow herds producing an average of 7,000 kg ECM lactation-1. The milk production response as consequence of feed strategies (scenarios) was based on results from two experiments (warm and cold seasons) using lactating cows from the same herd. Three scenarios were evaluated: total mixed ration (TMR) *ad libitum* intake, 75, and 50% of *ad libitum* TMR intake with access to grazing either a tropical or temperate pasture during lactation periods. Considering IPCC and international literature values to estimate emissions from urine/dung, feed production and electricity, the C footprint was similar between scenarios, averaging 1.06 kg CO2e (kg ECM)-1. Considering factors from studies conducted in subtropical conditions and actual inputs for on-farm feed production, the C footprint decreased 0.04 kg CO2e (kg ECM)-1 in scenarios including pastures compared to *ad libitum* TMR. Regardless of factors considered, emissions from feed production decreased as the proportion of pasture went up. In conclusion, decreasing TMR intake and including pastures in dairy cow diets in subtropical conditions have the potential to maintain or reduce the C footprint to a small extent. ## Introduction -Greenhouse gas (GHG) emissions from livestock activities represent 10–12% of global emissions [1], ranging from 5.5–7.5 Gt CO 2 equivalents (CO 2 e) yr -1 , with almost 30% coming from dairy cattle production systems [2]. However, the livestock sector supply between 13 and 17% of calories and between 28 and 33% of human edible protein consumption globally [3]. Additionally, livestock produce more human-edible protein per unit area than crops when land is unsuitable for food crop production [4]. +Greenhouse gas (GHG) emissions from livestock activities represent 10–12% of global emissions [1], ranging from 5.5–7.5 Gt CO2 equivalents (CO2e) yr-1, with almost 30% coming from dairy cattle production systems [2]. However, the livestock sector supply between 13 and 17% of calories and between 28 and 33% of human edible protein consumption globally [3]. Additionally, livestock produce more human-edible protein per unit area than crops when land is unsuitable for food crop production [4]. -Considering the key role of livestock systems in global food security, several technical and management interventions have been investigated to mitigate methane (CH 4 ) emissions from enteric fermentation [5], animal management [6] and manure management [7]. CH 4 emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint. +Considering the key role of livestock systems in global food security, several technical and management interventions have been investigated to mitigate methane (CH4) emissions from enteric fermentation [5], animal management [6] and manure management [7]. CH4 emissions from enteric fermentation represents around 34% of total emissions from livestock sector, which is the largest source [2]. Increasing proportions of concentrate and digestibility of forages in the diet have been proposed as mitigation strategies [1,5]. In contrast, some life cycle assessment (LCA) studies of dairy systems in temperate regions [8–11] have identified that increasing concentrate proportion may increase carbon (C) footprint due to greater resource use and pollutants from the production of feed compared to forage. Thus, increasing pasture proportion on dairy cattle systems may be an alternative management to mitigate the C footprint. In subtropical climate zones, cows may graze tropical pastures rather than temperate pastures during the warm season [12]. Some important dairy production areas, such as southern Brazil, central to northern Argentina, Uruguay, South Africa, New Zealand and Australia, are located in these climate zones, having more than 900 million ha in native, permanent or temporary pastures, producing almost 20% of global milk production [13]. However, due to a considerable inter-annual variation in pasture growth rates [14,15], the interest in mixed systems, using total mixed ration (TMR) + pasture has been increasing [16]. Nevertheless, to our best knowledge, studies conducted to evaluate milk production response in dairy cow diets receiving TMR and pastures have only been conducted in temperate pastures and not in tropical pastures (e.g. [17–19]). @@ -22,7 +22,7 @@ The aim of this work was to quantify the C footprint and land use of dairy syste ## Materials and methods -An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 - [https://www.udesc.br/cav/ceua](https://www.udesc.br/cav/ceua) . +An LCA was developed according to the ISO standards [23,24] and Food and Agriculture Organization of the United Nations (FAO) Livestock Environmental Assessment Protocol guidelines [25]. All procedures were approved by the ‘Comissão de Ética no Uso de Animais’ (CEUA/UDESC) on September 15, 2016—Approval number 4373090816 - [https://www.udesc.br/cav/ceua](https://www.udesc.br/cav/ceua). ### System boundary @@ -59,17 +59,17 @@ Table 1 Descriptive characteristics of the herd. The individual feed requirements, as well as the milk production responses based on feed strategies were based on data recorded from the herd described above and two experiments performed using lactating cows from the same herd. Due to the variation on herbage production throughout the year, feed requirements were estimated taking into consideration that livestock systems have a calving period in April, which represents the beginning of fall season in the southern Hemisphere. The experiments have shown a 10% reduction in ECM production in dairy cows that received both 75 and 50% of *ad libitum* TMR intake with access to grazing a tropical pasture (pearl-millet, *Pennisetum glaucum* ‘Campeiro’) compared to cows receiving *ad libitum* TMR intake. Cows grazing on a temperate pasture (ryegrass, *Lolium multiflorum* ‘Maximus’) did not need changes to ECM production compared to the *ad libitum* TMR intake group. -Using experimental data, three scenarios were evaluated during the lactation period: *ad libitum* TMR intake, and 75, and 50% of *ad libitum* TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., *in press* ). From April to October (210 days) cows accessed an annual temperate pasture (ryegrass), and from November to beginning of February (95 days) cows grazed an annual tropical pasture (pearl-millet). The average annual reduction in ECM production in dairy cows with access to pastures is 3%. This value was assumed during an entire lactation period. +Using experimental data, three scenarios were evaluated during the lactation period: *ad libitum* TMR intake, and 75, and 50% of *ad libitum* TMR intake with access to grazing either an annual tropical or temperate pasture as a function of month ([26], Civiero et al., *in press*). From April to October (210 days) cows accessed an annual temperate pasture (ryegrass), and from November to beginning of February (95 days) cows grazed an annual tropical pasture (pearl-millet). The average annual reduction in ECM production in dairy cows with access to pastures is 3%. This value was assumed during an entire lactation period. ### Impact assessment -The CO 2 e emissions were calculated by multiplying the emissions of CO 2 , CH 4 and N 2 O by their 100-year global warming potential (GWP 100 ), based on IPCC assessment report 5 (AR5; [27]). The values of GWP 100 are 1, 28 and 265 for CO 2 , CH 4 and N 2 O, respectively. +The CO2e emissions were calculated by multiplying the emissions of CO2, CH4 and N2O by their 100-year global warming potential (GWP100), based on IPCC assessment report 5 (AR5; [27]). The values of GWP100 are 1, 28 and 265 for CO2, CH4 and N2O, respectively. ### Feed production #### Diets composition -The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, *Pennisetum clandestinum* ). The DM intake of calves, heifers and dry cows was calculated assuming 2.8, 2.5 and 1.9% body weight, respectively [20]. In each case, the actual DM intake of concentrate and corn silage was recorded, and pasture DM intake was estimated by the difference between daily expected DM intake and actual DM intake of concentrate and corn silage. For lactating heifers and cows, TMR was formulated to meet the net energy for lactation (NE L ) and metabolizable protein (MP) requirements of experimental animals, according to [28]. The INRA system was used because it is possible to estimate pasture DM intake taking into account the TMR intake, pasture management and the time of access to pasture using the GrazeIn model [29], which was integrated in the software INRAtion 4.07 ( [https://www.inration.educagri.fr/fr/forum.php](https://www.inration.educagri.fr/fr/forum.php) ). The nutrient intake was calculated as a product of TMR and pasture intake and the nutrient contents of TMR and pasture, respectively, which were determined in feed samples collected throughout the experiments. +The DM intake of each ingredient throughout the entire life of animals during lactation periods was calculated for each scenario: cows receiving only TMR, cows receiving 75% of TMR with annual pastures and cows receiving 50% of TMR with annual pastures (Table 2). In each of other phases of life (calf, heifer, dry cow), animals received the same diet, including a perennial tropical pasture (kikuyu grass, *Pennisetum clandestinum*). The DM intake of calves, heifers and dry cows was calculated assuming 2.8, 2.5 and 1.9% body weight, respectively [20]. In each case, the actual DM intake of concentrate and corn silage was recorded, and pasture DM intake was estimated by the difference between daily expected DM intake and actual DM intake of concentrate and corn silage. For lactating heifers and cows, TMR was formulated to meet the net energy for lactation (NEL) and metabolizable protein (MP) requirements of experimental animals, according to [28]. The INRA system was used because it is possible to estimate pasture DM intake taking into account the TMR intake, pasture management and the time of access to pasture using the GrazeIn model [29], which was integrated in the software INRAtion 4.07 ([https://www.inration.educagri.fr/fr/forum.php](https://www.inration.educagri.fr/fr/forum.php)). The nutrient intake was calculated as a product of TMR and pasture intake and the nutrient contents of TMR and pasture, respectively, which were determined in feed samples collected throughout the experiments. Table 2 Dairy cows’ diets in different scenariosa. @@ -97,7 +97,7 @@ Table 2 Dairy cows’ diets in different scenariosa. #### GHG emissions from crop and pasture production -GHG emission factors used for off- and on-farm feed production were based on literature values, and are presented in Table 3. The emission factor used for corn grain is the average of emission factors observed in different levels of synthetic N fertilization [30]. The emission factor used for soybean is based on Brazilian soybean production [31]. The emissions used for corn silage, including feed processing (cutting, crushing and mixing), and annual or perennial grass productions were 3300 and 1500 kg CO 2 e ha -1 , respectively [32]. The DM production (kg ha -1 ) of corn silage and pastures were based on regional and locally recorded data [33–36], assuming that animals are able to consume 70% of pastures during grazing. +GHG emission factors used for off- and on-farm feed production were based on literature values, and are presented in Table 3. The emission factor used for corn grain is the average of emission factors observed in different levels of synthetic N fertilization [30]. The emission factor used for soybean is based on Brazilian soybean production [31]. The emissions used for corn silage, including feed processing (cutting, crushing and mixing), and annual or perennial grass productions were 3300 and 1500 kg CO2e ha-1, respectively [32]. The DM production (kg ha-1) of corn silage and pastures were based on regional and locally recorded data [33–36], assuming that animals are able to consume 70% of pastures during grazing. Table 3 GHG emission factors for Off- and On-farm feed production. @@ -112,7 +112,7 @@ Table 3 GHG emission factors for Off- and On-farm feed production. | Pearl milletd | 11,000 | 0.195 | kg CO2e (kg DM)-1 | [32,35] | | Kikuyu grasse | 9,500 | 0.226 | kg CO2e (kg DM)-1 | [32,36] | -Emissions from on-farm feed production (corn silage and pasture) were estimated using primary and secondary sources based on the actual amount of each input (Table 4). Primary sources were direct and indirect N 2 O-N emissions from organic and synthetic fertilizers and crop/pasture residues, CO 2 -C emissions from lime and urea applications, as well as fuel combustion. The direct N 2 O-N emission factor (kg (kg N input) -1 ) is based on a local study performed previously [37]. For indirect N 2 O-N emissions (kg N 2 O-N (kg NH 3 -N + NO x ) -1 ), as well as CO 2 -C emissions from lime + urea, default values proposed by IPCC [38] were used. For perennial pastures, a C sequestration of 0.57 t ha -1 was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha -1 (disking) for annual tropical and temperate pastures, respectively [40]. The CO 2 from fuel combustion was 2.7 kg CO 2 L -1 [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]. +Emissions from on-farm feed production (corn silage and pasture) were estimated using primary and secondary sources based on the actual amount of each input (Table 4). Primary sources were direct and indirect N2O-N emissions from organic and synthetic fertilizers and crop/pasture residues, CO2-C emissions from lime and urea applications, as well as fuel combustion. The direct N2O-N emission factor (kg (kg N input)-1) is based on a local study performed previously [37]. For indirect N2O-N emissions (kg N2O-N (kg NH3-N + NOx)-1), as well as CO2-C emissions from lime + urea, default values proposed by IPCC [38] were used. For perennial pastures, a C sequestration of 0.57 t ha-1 was used based on a 9-year study conducted in southern Brazil [39]. Due to the use of conventional tillage, no C sequestration was considered for annual pastures. The amount of fuel required was 8.9 (no-tillage) and 14.3 L ha-1 (disking) for annual tropical and temperate pastures, respectively [40]. The CO2 from fuel combustion was 2.7 kg CO2 L-1 [41]. Secondary sources of emissions during the production of fuel, machinery, fertilizer, pesticides, seeds and plastic for ensilage were estimated using emission factors described by Rotz et al. [42]. Table 4 GHG emissions from On-farm feed production. @@ -148,15 +148,15 @@ Table 4 GHG emissions from On-farm feed production. ### Animal husbandry -The CH 4 emissions from enteric fermentation intensity (g (kg ECM) -1 ) was a function of estimated CH 4 yield (g (kg DM intake) -1 ), actual DM intake and ECM. The enteric CH 4 yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH 4 yield (g (kg DM intake) -1 ) = 13.8 + 0.185 × NDF (% DM intake). +The CH4 emissions from enteric fermentation intensity (g (kg ECM)-1) was a function of estimated CH4 yield (g (kg DM intake)-1), actual DM intake and ECM. The enteric CH4 yield was estimated as a function of neutral detergent fiber (NDF) concentration on total DM intake, as proposed by Niu et al. [43], where: CH4 yield (g (kg DM intake)-1) = 13.8 + 0.185 × NDF (% DM intake). ### Manure from confined cows and urine and dung from grazing animals -The CH 4 emission from manure (kg (kg ECM) -1 ) was a function of daily CH 4 emission from manure (kg cow -1 ) and daily ECM (kg cow -1 ). The daily CH 4 emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow -1 ) in manure. The daily VS was estimated as proposed by Eugène et al. [44] as: VS = NDOMI + (UE × GE) × (OM/18.45), where: VS = volatile solid excretion on an organic matter (OM) basis (kg day -1 ), NDOMI = non-digestible OM intake (kg day -1 ): (1- OM digestibility) × OM intake, UE = urinary energy excretion as a fraction of GE (0.04), GE = gross energy intake (MJ day -1 ), OM = organic matter (g), 18.45 = conversion factor for dietary GE per kg of DM (MJ kg -1 ). +The CH4 emission from manure (kg (kg ECM)-1) was a function of daily CH4 emission from manure (kg cow-1) and daily ECM (kg cow-1). The daily CH4 emission from manure was estimated according to IPCC [38], which considered daily volatile solid (VS) excreted (kg DM cow-1) in manure. The daily VS was estimated as proposed by Eugène et al. [44] as: VS = NDOMI + (UE × GE) × (OM/18.45), where: VS = volatile solid excretion on an organic matter (OM) basis (kg day-1), NDOMI = non-digestible OM intake (kg day-1): (1- OM digestibility) × OM intake, UE = urinary energy excretion as a fraction of GE (0.04), GE = gross energy intake (MJ day-1), OM = organic matter (g), 18.45 = conversion factor for dietary GE per kg of DM (MJ kg-1). The OM digestibility was estimated as a function of chemical composition, using equations published by INRA [21], which takes into account the effects of digestive interactions due to feeding level, the proportion of concentrate and rumen protein balance on OM digestibility. For scenarios where cows had access to grazing, the amount of calculated VS were corrected as a function of the time at pasture. The biodegradability of manure factor (0.13 for dairy cows in Latin America) and methane conversion factor (MCF) values were taken from IPCC [38]. The MCF values for pit storage below animal confinements (> 1 month) were used for the calculation, taking into account the annual average temperature (16.6ºC) or the average temperatures during the growth period of temperate (14.4ºC) or tropical (21ºC) annual pastures, which were 31%, 26% and 46%, respectively. -The N 2 O-N emissions from urine and feces were estimated considering the proportion of N excreted as manure and storage or as urine and dung deposited by grazing animals. These proportions were calculated based on the proportion of daily time that animals stayed on pasture (7 h/24 h = 0.29) or confinement (1−0.29 = 0.71). For lactating heifers and cows, the total amount of N excreted was calculated by the difference between N intake and milk N excretion. For heifers and non-lactating cows, urinary and fecal N excretion were estimated as proposed by Reed et al. [45] (Table 3: equations 10 and 12, respectively). The N 2 O emissions from stored manure as well as urine and dung during grazing were calculated based on the conversion of N 2 O-N emissions to N 2 O emissions, where N 2 O emissions = N 2 O-N emissions × 44/28. The emission factors were 0.002 kg N 2 O-N (kg N) -1 stored in a pit below animal confinements, and 0.02 kg N 2 O-N (kg of urine and dung) -1 deposited on pasture [38]. The indirect N 2 O emissions from storage manure and urine and dung deposits on pasture were also estimated using the IPCC [38] emission factors. +The N2O-N emissions from urine and feces were estimated considering the proportion of N excreted as manure and storage or as urine and dung deposited by grazing animals. These proportions were calculated based on the proportion of daily time that animals stayed on pasture (7 h/24 h = 0.29) or confinement (1−0.29 = 0.71). For lactating heifers and cows, the total amount of N excreted was calculated by the difference between N intake and milk N excretion. For heifers and non-lactating cows, urinary and fecal N excretion were estimated as proposed by Reed et al. [45] (Table 3: equations 10 and 12, respectively). The N2O emissions from stored manure as well as urine and dung during grazing were calculated based on the conversion of N2O-N emissions to N2O emissions, where N2O emissions = N2O-N emissions × 44/28. The emission factors were 0.002 kg N2O-N (kg N)-1 stored in a pit below animal confinements, and 0.02 kg N2O-N (kg of urine and dung)-1 deposited on pasture [38]. The indirect N2O emissions from storage manure and urine and dung deposits on pasture were also estimated using the IPCC [38] emission factors. ### Farm management @@ -178,15 +178,15 @@ Table 5 Factors for major resource inputs in farm management. | Electricity for milking | 0.06 | kWh (kg milk)-1 | [47] | | Electricity for lightingd | 75 | kWh cow-1 | [47] | -The amount of fuel use for manure handling were estimated taking into consideration the amount of manure produced per cow and the amounts of fuel required for manure handling (L diesel t -1 ) [42]. The amount of manure was estimated from OM excretions (kg cow -1 ), assuming that the manure has 8% ash on DM basis and 60% DM content. The OM excretions were calculated by NDOMI × days in confinement × proportion of daily time that animals stayed on confinement. +The amount of fuel use for manure handling were estimated taking into consideration the amount of manure produced per cow and the amounts of fuel required for manure handling (L diesel t-1) [42]. The amount of manure was estimated from OM excretions (kg cow-1), assuming that the manure has 8% ash on DM basis and 60% DM content. The OM excretions were calculated by NDOMI × days in confinement × proportion of daily time that animals stayed on confinement. -The emissions from fuel were estimated considering the primary (emissions from fuel burned) and secondary (emissions for producing and transporting fuel) emissions. The primary emissions were calculated by the amount of fuel required for manure handling (L) × (kg CO 2 e L -1 ) [41]. The secondary emissions from fuel were calculated by the amount of fuel required for manure handling × emissions for production and transport of fuel (kg CO 2 e L -1 ) [41]. Emissions from manufacture and repair of machinery for manure handling were estimated by manure produced per cow (t) × (kg machinery mass (kg manure) -1 × 10 −3 ) [42] × kg CO 2 e (kg machinery mass) -1 [42]. +The emissions from fuel were estimated considering the primary (emissions from fuel burned) and secondary (emissions for producing and transporting fuel) emissions. The primary emissions were calculated by the amount of fuel required for manure handling (L) × (kg CO2e L-1) [41]. The secondary emissions from fuel were calculated by the amount of fuel required for manure handling × emissions for production and transport of fuel (kg CO2e L-1) [41]. Emissions from manufacture and repair of machinery for manure handling were estimated by manure produced per cow (t) × (kg machinery mass (kg manure)-1 × 10−3) [42] × kg CO2e (kg machinery mass)-1 [42]. -Emissions from electricity for milking and confinement were estimated using two emission factors (kg CO 2 kWh -1 ). The first one is based on United States electricity matrix [41], and was used as a reference of an electricity matrix with less hydroelectric power than the region under study. The second is based on the Brazilian electricity matrix [46]. The electricity required for milking activities is 0.06 kWh (kg milk produced) -1 [47]. The annual electricity use for lighting was 75 kWh cow -1 , which is the value considered for lactating cows in naturally ventilated barns [47]. +Emissions from electricity for milking and confinement were estimated using two emission factors (kg CO2 kWh-1). The first one is based on United States electricity matrix [41], and was used as a reference of an electricity matrix with less hydroelectric power than the region under study. The second is based on the Brazilian electricity matrix [46]. The electricity required for milking activities is 0.06 kWh (kg milk produced)-1 [47]. The annual electricity use for lighting was 75 kWh cow-1, which is the value considered for lactating cows in naturally ventilated barns [47]. ### Co-product allocation -The C footprint for milk produced in the system was calculated using a biophysical allocation approach, as recommended by the International Dairy Federation [49], and described by Thoma et al. [48]. Briefly, AR milk = 1–6.04 × BMR, where : AR milk is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The AR milk were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The AR milk was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production. +The C footprint for milk produced in the system was calculated using a biophysical allocation approach, as recommended by the International Dairy Federation [49], and described by Thoma et al. [48]. Briefly, ARmilk = 1–6.04 × BMR, where: ARmilk is the allocation ratio for milk and BMR is cow BW at the time of slaughter (kg) + calf BW sold (kg) divided by the total ECM produced during cow`s entire life (kg). The ARmilk were 0.854 and 0.849 for TMR and TMR with both pasture scenarios, respectively. The ARmilk was applied to the whole emissions, except for the electricity consumed for milking (milking parlor) and refrigerant loss, which was directly assigned to milk production. ### Sensitivity analysis @@ -198,37 +198,37 @@ The study has assessed the impact of tropical and temperate pastures in dairy co ### Greenhouse gas emissions -Depending on emission factors used for calculating emissions from urine and dung (IPCC or local data) and feed production (Tables 3 or 4), the C footprint was similar (Fig 2A and 2B) or decreased by 0.04 kg CO 2 e (kg ECM) -1 (Fig 2C and 2D) in scenarios that included pastures compared to *ad libitum* TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO 2 e (kg ECM) -1 for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO 2 e (kg ECM) -1 for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N 2 O-N emissions [37], manure emissions decreased as TMR intake went down (Fig 2C and 2D). Regardless of emission factors used (Tables 3 or 4), emissions from feed production decreased to a small extent as the proportion of TMR intake decreased. Emissions from farm management did not contribute more than 5% of overall GHG emissions. +Depending on emission factors used for calculating emissions from urine and dung (IPCC or local data) and feed production (Tables 3 or 4), the C footprint was similar (Fig 2A and 2B) or decreased by 0.04 kg CO2e (kg ECM)-1 (Fig 2C and 2D) in scenarios that included pastures compared to *ad libitum* TMR intake. Due to differences in emission factors, the overall GHG emission values ranged from 0.92 to 1.04 kg CO2e (kg ECM)-1 for dairy cows receiving TMR exclusively, and from 0.88 to 1.04 kg CO2e (kg ECM)-1 for cows with access to pasture. Using IPCC emission factors [38], manure emissions increased as TMR intake went down (Fig 2A and 2B). However, using local emission factors for estimating N2O-N emissions [37], manure emissions decreased as TMR intake went down (Fig 2C and 2D). Regardless of emission factors used (Tables 3 or 4), emissions from feed production decreased to a small extent as the proportion of TMR intake decreased. Emissions from farm management did not contribute more than 5% of overall GHG emissions. Fig 2 Overall greenhouse gas emissions in dairy cattle systems under various scenarios. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting for sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. -Considering IPCC emission factors for N 2 O emissions from urine and dung [38] and those from Table 3, the C footprint ranged from 0.99 to 1.04 kg CO 2 e (kg ECM) -1 , and was close to those reported under confined based systems in California [49], Canada [50], China [8], Ireland [9], different scenarios in Australia [51,52] and Uruguay [11], which ranged from 0.98 to 1.16 kg CO 2 e (kg ECM) -1 . When local emission factors for N 2 O emissions from urine and dung [37] and those from Table 4 were taking into account, the C footprint for scenarios including pasture, without accounting for sequestered CO 2 -C from perennial pasture—0.91 kg CO 2 e (kg ECM) -1 —was lower than the range of values described above. However, these values were still greater than high-performance confinement systems in UK and USA [53] or grass based dairy systems in Ireland [9,53] and New Zealand [8,54], which ranged from 0.52 to 0.89 kg CO 2 e (kg ECM) -1 . Regardless of which emission factor was used, we found a lower C footprint in all conditions compared to scenarios with lower milk production per cow or in poor conditions of manure management, which ranged from 1.4 to 2.3 kg CO 2 e (kg ECM) -1 [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO 2 -C, etc.), herd productivity and manure management were systematically associated with the C footprint of the dairy systems. +Considering IPCC emission factors for N2O emissions from urine and dung [38] and those from Table 3, the C footprint ranged from 0.99 to 1.04 kg CO2e (kg ECM)-1, and was close to those reported under confined based systems in California [49], Canada [50], China [8], Ireland [9], different scenarios in Australia [51,52] and Uruguay [11], which ranged from 0.98 to 1.16 kg CO2e (kg ECM)-1. When local emission factors for N2O emissions from urine and dung [37] and those from Table 4 were taking into account, the C footprint for scenarios including pasture, without accounting for sequestered CO2-C from perennial pasture—0.91 kg CO2e (kg ECM)-1—was lower than the range of values described above. However, these values were still greater than high-performance confinement systems in UK and USA [53] or grass based dairy systems in Ireland [9,53] and New Zealand [8,54], which ranged from 0.52 to 0.89 kg CO2e (kg ECM)-1. Regardless of which emission factor was used, we found a lower C footprint in all conditions compared to scenarios with lower milk production per cow or in poor conditions of manure management, which ranged from 1.4 to 2.3 kg CO2e (kg ECM)-1 [8,55]. Thus, even though differences between studies may be partially explained by various assumptions (e.g., emission factors, co-product allocation, methane emissions estimation, sequestered CO2-C, etc.), herd productivity and manure management were systematically associated with the C footprint of the dairy systems. -The similarity of C footprint between different scenarios using IPCC [38] for estimating emissions from manure and for emissions from feed production (Table 3) was a consequence of the trade-off between greater manure emissions and lower emissions to produce feed, as the proportion of pasture in diets increased. Additionally, the small negative effect of pasture on ECM production also contributed to the trade-off. The impact of milk production on the C footprint was reported in a meta-analysis comprising 30 studies from 15 different countries [22]. As observed in this study (Fig 2A and 2B) the authors reported no significant difference between the C footprint of pasture-based vs. confinement systems. However, they observed that an increase of 1000 kg cow -1 (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO 2 e (kg ECM) -1 , which may explain an apparent discrepancy between our study and an LCA performed in south Brazilian conditions [56]. Their study compared a confinement and a grazing-based dairy system with annual average milk production of 7667 and 5535 kg cow, respectively. In this study, the same herd was used in all systems, with an annual average milk production of around 7000 kg cow -1 . Experimental data showed a reduction not greater than 3% of ECM when 50% of TMR was replaced by pasture access. +The similarity of C footprint between different scenarios using IPCC [38] for estimating emissions from manure and for emissions from feed production (Table 3) was a consequence of the trade-off between greater manure emissions and lower emissions to produce feed, as the proportion of pasture in diets increased. Additionally, the small negative effect of pasture on ECM production also contributed to the trade-off. The impact of milk production on the C footprint was reported in a meta-analysis comprising 30 studies from 15 different countries [22]. As observed in this study (Fig 2A and 2B) the authors reported no significant difference between the C footprint of pasture-based vs. confinement systems. However, they observed that an increase of 1000 kg cow-1 (5000 to 6000 kg ECM) reduced the C footprint by 0.12 kg CO2e (kg ECM)-1, which may explain an apparent discrepancy between our study and an LCA performed in south Brazilian conditions [56]. Their study compared a confinement and a grazing-based dairy system with annual average milk production of 7667 and 5535 kg cow, respectively. In this study, the same herd was used in all systems, with an annual average milk production of around 7000 kg cow-1. Experimental data showed a reduction not greater than 3% of ECM when 50% of TMR was replaced by pasture access. -The lower C footprint in scenarios with access to pasture, when local emission factors [37] were used for N 2 O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to *ad libitum* TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N 2 O-N (kg N) -1 for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N 2 O-N kg -1 [37]. +The lower C footprint in scenarios with access to pasture, when local emission factors [37] were used for N2O emissions from urine and dung and for feed production (Table 4), may also be partially attributed to the small negative effect of pasture on ECM production. Nevertheless, local emission factors for urine and dung had a great impact on scenarios including pastures compared to *ad libitum* TMR intake. Whereas the IPCC [38] considers an emission of 0.02 kg N2O-N (kg N)-1 for urine and dung from grazing animals, experimental evidence shows that it may be up to five times lower, averaging 0.004 kg N2O-N kg-1 [37]. ### Methane emissions -The enteric CH 4 intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH 4 emissions on the whole C footprint was expected, because the impact of enteric CH 4 on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO 2 e [50,52,57,58]. However, emissions in feed production may be the most important source of GHG when emission factors for producing concentrate feeds are greater than 0.7 kg CO 2 e kg -1 [59], which did not happen in this study. +The enteric CH4 intensity was similar between different scenarios (Fig 2), showing the greatest sensitivity index, with values ranging from 0.53 to 0.62, which indicate that for a 10% change in this source, the C footprint may change between 5.3 and 6.2% (Fig 3). The large effect of enteric CH4 emissions on the whole C footprint was expected, because the impact of enteric CH4 on GHG emissions of milk production in different dairy systems has been estimated to range from 44 to 60% of the total CO2e [50,52,57,58]. However, emissions in feed production may be the most important source of GHG when emission factors for producing concentrate feeds are greater than 0.7 kg CO2e kg-1 [59], which did not happen in this study. Fig 3 Sensitivity of the C footprint. Sensitivity index = percentage change in C footprint for a 10% change in the given emission source divided by 10% of. (a) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.73 kg CO2e kWh-1 [41]. (b) N2O emission factors for urine and dung from IPCC [38], feed production emission factors from Table 3, production of electricity = 0.205 kg CO2e kWh-1 [46]; (c) N2O emission factors for urine and dung from local data [37], feed production EF from Table 4 without accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. (d) N2O emission factors for urine and dung from local data [37], feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture, production of electricity = 0.205 kg CO2e kWh-1 [46]. -The lack of difference in enteric CH 4 emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM) -1 ) compared to corn silage (550 g (kg DM) -1 ). Hence, an expected, increase NDF content with decreased concentrate was partially offset by an increase in the pasture proportion relatively low in NDF. This is in agreement with studies conducted in southern Brazil, which have shown that the actual enteric CH 4 emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH 4 emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH 4 emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]. +The lack of difference in enteric CH4 emissions in different systems can be explained by the narrow range of NDF content in diets (<4% difference). This non-difference is due to the lower NDF content of annual temperate pastures (495 g (kg DM)-1) compared to corn silage (550 g (kg DM)-1). Hence, an expected, increase NDF content with decreased concentrate was partially offset by an increase in the pasture proportion relatively low in NDF. This is in agreement with studies conducted in southern Brazil, which have shown that the actual enteric CH4 emissions may decrease with inclusion of temperate pastures in cows receiving corn silage and soybean meal [60] or increase enteric CH4 emissions when dairy cows grazing a temperate pasture was supplemented with corn silage [61]. Additionally, enteric CH4 emissions did not differ between dairy cows receiving TMR exclusively or grazing a tropical pasture in the same scenarios as in this study [26]. ### Emissions from excreta and feed production -Using IPCC emission factors for N 2 O emissions from urine and dung [38] and those from Table 3, CH 4 emissions from manure decreased 0.07 kg CO 2 e (kg ECM) -1 , but N 2 O emissions from manure increased 0.09 kg CO 2 e (kg ECM) -1 , as TMR intake was restricted to 50% *ad libitum* (Fig 4A). Emissions for pastures increased by 0.06 kg CO 2 e (kg ECM) -1 , whereas emissions for producing concentrate feeds and corn silage decreased by 0.09 kg CO 2 e (kg ECM) -1 , as TMR intake decreased (Fig 4B). In this situation, the lack of difference in calculated C footprints of different systems was also due to the greater emissions from manure, and offset by lower emissions from feed production with inclusion of pasture in lactating dairy cow diets. The greater N 2 O-N emissions from manure with pasture was a consequence of higher N 2 O-N emissions due to greater CP content and N urine excretion, as pasture intake increased. The effect of CP content on urine N excretion has been shown by several authors in lactating dairy cows [62–64]. For instance, by decreasing CP content from 185 to 152 g (kg DM) -1 , N intake decreased by 20% and urine N excretion by 60% [62]. In this study, the CP content for lactating dairy cows ranged from 150 g (kg DM) -1 on TMR system to 198 g (kg DM) -1 on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]. +Using IPCC emission factors for N2O emissions from urine and dung [38] and those from Table 3, CH4 emissions from manure decreased 0.07 kg CO2e (kg ECM)-1, but N2O emissions from manure increased 0.09 kg CO2e (kg ECM)-1, as TMR intake was restricted to 50% *ad libitum* (Fig 4A). Emissions for pastures increased by 0.06 kg CO2e (kg ECM)-1, whereas emissions for producing concentrate feeds and corn silage decreased by 0.09 kg CO2e (kg ECM)-1, as TMR intake decreased (Fig 4B). In this situation, the lack of difference in calculated C footprints of different systems was also due to the greater emissions from manure, and offset by lower emissions from feed production with inclusion of pasture in lactating dairy cow diets. The greater N2O-N emissions from manure with pasture was a consequence of higher N2O-N emissions due to greater CP content and N urine excretion, as pasture intake increased. The effect of CP content on urine N excretion has been shown by several authors in lactating dairy cows [62–64]. For instance, by decreasing CP content from 185 to 152 g (kg DM)-1, N intake decreased by 20% and urine N excretion by 60% [62]. In this study, the CP content for lactating dairy cows ranged from 150 g (kg DM)-1 on TMR system to 198 g (kg DM)-1 on 50% TMR with pasture. Additionally, greater urine N excretion is expected with greater use of pasture. This occurs because protein utilization in pastures is inefficient, as the protein in fresh forages is highly degradable in the rumen and may not be captured by microbes [65]. Fig 4 Greenhouse gas emissions (GHG) from manure and feed production in dairy cattle systems. TMR = ad libitum TMR intake, 75TMR = 75% of ad libitum TMR intake with access to pasture, 50TMR = 50% of ad libitum TMR intake with access to pasture. (a) N2O emission factors for urine and dung from IPCC [38]. (b) Feed production emission factors from Table 3. (c) N2O emission factors for urine and dung from local data [37]. (d) Feed production emission factors from Table 4 accounting sequestered CO2-C from perennial pasture. -Using local emission factors for N 2 O emissions from urine and dung [37] and those from Table 4, reductions in CH 4 emissions from stocked manure, when pastures were included on diets, did not offset by increases in N 2 O emissions from excreta (Fig 4C). In this case, total emissions from manure (Fig 4C) and feed production (Fig 4D) decreased with the inclusion of pasture. The impact of greater CP content and N urine excretion with increased pasture intake was offset by the much lower emission factors used for N 2 O emissions from urine and dung. As suggested by other authors [66,67], these results show that IPCC default value may need to be revised for the subtropical region. +Using local emission factors for N2O emissions from urine and dung [37] and those from Table 4, reductions in CH4 emissions from stocked manure, when pastures were included on diets, did not offset by increases in N2O emissions from excreta (Fig 4C). In this case, total emissions from manure (Fig 4C) and feed production (Fig 4D) decreased with the inclusion of pasture. The impact of greater CP content and N urine excretion with increased pasture intake was offset by the much lower emission factors used for N2O emissions from urine and dung. As suggested by other authors [66,67], these results show that IPCC default value may need to be revised for the subtropical region. Emissions for feed production decreased when pasture was included due to the greater emission factor for corn grain production compared to pastures. Emissions from concentrate and silage had at least twice the sensitivity index compared to emissions from pastures. The amount of grain required per cow in a lifetime decreased from 7,300 kg to 4,000 kg when 50% of TMR was replaced by pasture access. These results are in agreement with other studies which found lower C footprint, as concentrate use is reduced and/or pasture is included [9,68,69]. Moreover, it has been demonstrated that in intensive dairy systems, after enteric fermentation, feed production is the second main contributor to C footprint [50]. There is potential to decrease the environmental impact of dairy systems by reducing the use of concentrate ingredients with high environmental impact, particularly in confinements [9]. @@ -236,21 +236,21 @@ Emissions for feed production decreased when pasture was included due to the gre The lower impact of emissions from farm management is in agreement with other studies conducted in Europe [9, 62] and USA [42, 55], where the authors found that most emissions in dairy production systems are from enteric fermentation, feed production and emissions from excreta. As emissions from fuel for on-farm feed production were accounted into the ‘emissions from crop and pasture production’, total emissions from farm management were not greater than 5% of total C footprint. -Emissions from farm management dropped when the emission factor for electricity generation was based on the Brazilian matrix. In this case, the emission factor for electricity generation (0.205 kg CO 2 e kWh -1 [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO 2 e kWh -1 [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO 2 e kWh -1 against 0.382 and 0.926 kg CO 2 e kWh -1 produced by natural gas and hard coal, respectively [46]. +Emissions from farm management dropped when the emission factor for electricity generation was based on the Brazilian matrix. In this case, the emission factor for electricity generation (0.205 kg CO2e kWh-1 [46]) is much lower than that in a LCA study conducted in US (0.73 kg CO2e kWh-1 [42]). This apparent discrepancy is explained because in 2016, almost 66% of the electricity generated in Brazil was from hydropower, which has an emission factor of 0.074 kg CO2e kWh-1 against 0.382 and 0.926 kg CO2e kWh-1 produced by natural gas and hard coal, respectively [46]. ### Assumptions and limitations -The milk production and composition data are the average for a typical herd, which might have great animal-to-animal variability. Likewise, DM yield of crops and pastures were collected from experimental observations, and may change as a function of inter-annual variation, climatic conditions, soil type, fertilization level etc. The emission factors for direct and indirect N 2 O emissions from urine and dung were alternatively estimated using local data, but more experiments are necessary to reduce the uncertainty. The CO 2 emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management. +The milk production and composition data are the average for a typical herd, which might have great animal-to-animal variability. Likewise, DM yield of crops and pastures were collected from experimental observations, and may change as a function of inter-annual variation, climatic conditions, soil type, fertilization level etc. The emission factors for direct and indirect N2O emissions from urine and dung were alternatively estimated using local data, but more experiments are necessary to reduce the uncertainty. The CO2 emitted from lime and urea application was estimated from IPCC default values, which may not represent emissions in subtropical conditions. This LCA may be improved by reducing the uncertainty of factors for estimating emissions from excreta and feed production, including the C sequestration or emissions as a function of soil management. ### Further considerations -The potential for using pasture can reduce the C footprint because milk production kept pace with animal confinement. However, if milk production is to decrease with lower TMR intake and inclusion of pasture [19], the C footprint would be expected to increase. Lorenz et al. [22] showed that an increase in milk yield from 5,000 to 6,000 kg ECM reduced the C footprint by 0.12 kg CO 2 e (kg ECM) -1 , whereas an increase from 10,000 to 11,000 kg ECM reduced the C footprint by only 0.06 kg CO 2 e (kg ECM) -1 . Hence, the impact of increasing milk production on decreasing C footprint is not linear, and mitigation measures, such as breeding for increased genetic yield potential and increasing concentrate ratio in the diet, are potentially harmful for animal’s health and welfare [70]. For instance, increasing concentrate ratio potentially increases the occurrence of subclinical ketosis and foot lesions, and C footprint may increase by 0.03 kg CO 2 e (kg ECM) -1 in subclinical ketosis [71] and by 0.02 kg CO 2 e (kg ECM) -1 in case of foot lesions [72]. +The potential for using pasture can reduce the C footprint because milk production kept pace with animal confinement. However, if milk production is to decrease with lower TMR intake and inclusion of pasture [19], the C footprint would be expected to increase. Lorenz et al. [22] showed that an increase in milk yield from 5,000 to 6,000 kg ECM reduced the C footprint by 0.12 kg CO2e (kg ECM)-1, whereas an increase from 10,000 to 11,000 kg ECM reduced the C footprint by only 0.06 kg CO2e (kg ECM)-1. Hence, the impact of increasing milk production on decreasing C footprint is not linear, and mitigation measures, such as breeding for increased genetic yield potential and increasing concentrate ratio in the diet, are potentially harmful for animal’s health and welfare [70]. For instance, increasing concentrate ratio potentially increases the occurrence of subclinical ketosis and foot lesions, and C footprint may increase by 0.03 kg CO2e (kg ECM)-1 in subclinical ketosis [71] and by 0.02 kg CO2e (kg ECM)-1 in case of foot lesions [72]. -Grazing lands may also improve biodiversity [73]. Strategies such as zero tillage may increase stocks of soil C [74]. This study did not consider C sequestration during the growth of annual pastures, because it was assumed these grasses were planted with tillage, having a balance between C sequestration and C emissions [38]. Considering the C sequestration from no-tillage perennial pasture, the amount of C sequestration will more than compensates for C emitted. These results are in agreement with other authors who have shown that a reduction or elimination of soil tillage increases annual soil C sequestration in subtropical areas by 0.5 to 1.5 t ha -1 [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha -1 would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO 2 e (kg ECM) -1 for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO 2 e (kg ECM) -1 for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO 2 would be negligible [76]. +Grazing lands may also improve biodiversity [73]. Strategies such as zero tillage may increase stocks of soil C [74]. This study did not consider C sequestration during the growth of annual pastures, because it was assumed these grasses were planted with tillage, having a balance between C sequestration and C emissions [38]. Considering the C sequestration from no-tillage perennial pasture, the amount of C sequestration will more than compensates for C emitted. These results are in agreement with other authors who have shown that a reduction or elimination of soil tillage increases annual soil C sequestration in subtropical areas by 0.5 to 1.5 t ha-1 [75]. If 50% of tilled areas were under perennial grasslands, 1.0 t C ha-1 would be sequestered, further reducing the C footprint by 0.015 and 0.025 kg CO2e (kg ECM)-1 for the scenarios using 75 and 50% TMR, respectively. Eliminating tillage, the reduction on total GHG emissions would be 0.03 and 0.05 kg CO2e (kg ECM)-1 for 75 and 50% TMR, respectively. However, this approach may be controversial because lands which have been consistently managed for decades have approached steady state C storage, so that net exchange of CO2 would be negligible [76]. ## Conclusions -This study assessed the C footprint of dairy cattle systems with or without access to pastures. Including pastures showed potential to maintain or decrease to a small extent the C footprint, which may be attributable to the evidence of low N 2 O emissions from urine and dung in dairy systems in subtropical areas. Even though the enteric CH 4 intensity was the largest source of CO 2 e emissions, it did not change between different scenarios due to the narrow range of NDF content in diets and maintaining the same milk production with or without access to pastures. +This study assessed the C footprint of dairy cattle systems with or without access to pastures. Including pastures showed potential to maintain or decrease to a small extent the C footprint, which may be attributable to the evidence of low N2O emissions from urine and dung in dairy systems in subtropical areas. Even though the enteric CH4 intensity was the largest source of CO2e emissions, it did not change between different scenarios due to the narrow range of NDF content in diets and maintaining the same milk production with or without access to pastures. ## Acknowledgments diff --git a/tests/data/latex/groundtruth/1706.03762_main.tex.dclg b/tests/data/latex/groundtruth/1706.03762_main.tex.dclg index e68736eafd..86eb005f64 100644 --- a/tests/data/latex/groundtruth/1706.03762_main.tex.dclg +++ b/tests/data/latex/groundtruth/1706.03762_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass{article} @@ -159,7 +159,7 @@ h_{t-1} and the input for position t -. This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths, as memory constraints limit batching across examples. Recent work has achieved significant improvements in computational efficiency through factorization tricks [Kuchaiev2017Factorization] and conditional computation [shazeer2017outrageously], while also improving model performance in case of the latter. The fundamental constraint of sequential computation, however, remains. + . This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths, as memory constraints limit batching across examples. Recent work has achieved significant improvements in computational efficiency through factorization tricks [Kuchaiev2017Factorization] and conditional computation [shazeer2017outrageously], while also improving model performance in case of the latter. The fundamental constraint of sequential computation, however, remains. Attention mechanisms have become an integral part of compelling sequence modeling and transduction models in various tasks, allowing modeling of dependencies without regard to their distance in the input or output sequences [bahdanau2014neural, structuredAttentionNetworks]. In all but a few cases [decomposableAttnModel], however, such attention mechanisms are used in conjunction with a recurrent network. In this work we propose the Transformer, a model architecture eschewing recurrence and instead relying entirely on an attention mechanism to draw global dependencies between input and output. The Transformer allows for significantly more parallelization and can reach a new state of the art in translation quality after being trained for as little as twelve hours on eight P100 GPUs. @@ -194,7 +194,7 @@ \mathrm{Sublayer}(x) is the function implemented by the sub-layer itself. To facilitate these residual connections, all sub-layers in the model, as well as the embedding layers, produce outputs of dimension d_{\text{model}}=512 -. + . Decoder:The decoder is also composed of a stack of @@ -203,7 +203,7 @@ i can depend only on the known outputs at positions less than i -. + . Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key. @@ -215,7 +215,7 @@ d_v . We compute the dot products of the query with all keys, divide each by \sqrt{d_k} -, and apply a softmax function to obtain the weights on the values. + , and apply a softmax function to obtain the weights on the values. In practice, we compute the attention function on a set of queries simultaneously, packed together into a matrix @@ -224,7 +224,7 @@ K and V -. We compute the matrix of outputs as: + . We compute the matrix of outputs as: \begin{equation} @@ -234,7 +234,7 @@ The two most commonly used attention functions are additive attention [bahdanau2014neural], and dot-product (multiplicative) attention. Dot-product attention is identical to our algorithm, except for the scaling factor of \frac{1}{\sqrt{d_k}} -. Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are similar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code. + . Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are similar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code. While for small values of @@ -243,7 +243,7 @@ d_k [DBLP:journals/corr/BritzGLL17]. We suspect that for large values of d_k -, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients + , the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients To illustrate why the dot products get large, assume that the components of @@ -260,12 +260,12 @@ 0 and variance d_k -. + . . To counteract this effect, we scale the dot products by \frac{1}{\sqrt{d_k}} -. + . Multi-Head Attention [t]0.5 @@ -289,7 +289,7 @@ d_v dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding d_v --dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure[fig:multi-head-att]. + -dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure[fig:multi-head-att]. Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this. @@ -308,14 +308,14 @@ W^V_i \in \mathbb{R}^{d_{\text{model}} \times d_v} and W^O \in \mathbb{R}^{hd_v \times d_{\text{model}}} -. + . In this work we employ h=8 parallel attention layers, or heads. For each of these we use d_k=d_v=d_{\text{model}}/h=64 -. Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality. + . Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality. Applications of Attention in our Model The Transformer uses multi-head attention in three different ways: @@ -327,7 +327,7 @@ Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to -\infty -) all values in the input of the softmax which correspond to illegal connections. See Figure[fig:multi-head-att]. + ) all values in the input of the softmax which correspond to illegal connections. See Figure[fig:multi-head-att]. Position-wise Feed-Forward Networks In addition to attention sub-layers, each of the layers in our encoder and decoder contains a fully connected feed-forward network, which is applied to each position separately and identically. This consists of two linear transformations with a ReLU activation in between. @@ -341,7 +341,7 @@ d_{\text{model}}=512 , and the inner-layer has dimensionality d_{ff}=2048 -. + . Embeddings and Softmax @@ -349,7 +349,7 @@ d_{\text{model}} . We also use the usual learned linear transformation and softmax function to convert the decoder output to predicted next-token probabilities. In our model, we share the same weight matrix between the two embedding layers and the pre-softmax linear transformation, similar to [press2016using]. In the embedding layers, we multiply those weights by \sqrt{d_{\text{model}}} -. + . Positional Encoding @@ -379,7 +379,7 @@ PE_{pos+k} can be represented as a linear function of PE_{pos} -. + . We also experimented with using learned positional embeddings [JonasFaceNet2017] instead, and found that the two versions produced nearly identical results (see Table[tab:variations] row (E)). We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training. Why Self-Attention @@ -390,7 +390,7 @@ (z_1, ..., z_n) , with x_i, z_i \in \mathbb{R}^d -, such as a hidden layer in a typical sequence transduction encoder or decoder. Motivating our use of self-attention we consider three desiderata. + , such as a hidden layer in a typical sequence transduction encoder or decoder. Motivating our use of self-attention we consider three desiderata. One is the total computational complexity per layer. Another is the amount of computation that can be parallelized, as measured by the minimum number of sequential operations required. The third is the path length between long-range dependencies in the network. Learning long-range dependencies is a key challenge in many sequence transduction tasks. One key factor affecting the ability to learn such dependencies is the length of the paths forward and backward signals have to traverse in the network. The shorter these paths between any combination of positions in the input and output sequences, the easier it is to learn long-range dependencies [hochreiter2001gradient]. Hence we also compare the maximum path length between any two input and output positions in networks composed of the different layer types. @@ -498,7 +498,7 @@ r in the input sequence centered around the respective output position. This would increase the maximum path length to O(n/r) -. We plan to investigate this approach further in future work. + . We plan to investigate this approach further in future work. A single convolutional layer with kernel width @@ -513,7 +513,7 @@ O(k \cdot n \cdot d + n \cdot d^2) . Even with k=n -, however, the complexity of a separable convolution is equal to the combination of a self-attention layer and a point-wise feed-forward layer, the approach we take in our model. + , however, the complexity of a separable convolution is equal to the combination of a self-attention layer and a point-wise feed-forward layer, the approach we take in our model. As side benefit, self-attention could yield more interpretable models. We inspect attention distributions from our models and present and discuss examples in the appendix. Not only do individual attention heads clearly learn to perform different tasks, many appear to exhibit behavior related to the syntactic and semantic structure of the sentences. Training @@ -530,7 +530,7 @@ \beta_2=0.98 and \epsilon=10^{-9} -. We varied the learning rate over the course of training, according to the formula: + . We varied the learning rate over the course of training, according to the formula: \begin{equation} @@ -544,14 +544,14 @@ lrate = d_{\text{model}}^{-0.5} \cdot warmup\_steps training steps, and decreasing it thereafter proportionally to the inverse square root of the step number. We used warmup\_steps=4000 -. + . Regularization We employ three types of regularization during training: Residual Dropout We apply dropout [srivastava2014dropout] to the output of each sub-layer, before it is added to the sub-layer input and normalized. In addition, we apply dropout to the sums of the embeddings and the positional encodings in both the encoder and decoder stacks. For the base model, we use a rate of P_{drop}=0.1 -. + . Label Smoothing During training, we employed label smoothing of value @@ -1237,7 +1237,7 @@ lrate = d_{\text{model}}^{-0.5} \cdot P_{drop}=0.1 , instead of 0.3 -. + . For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of @@ -1246,7 +1246,7 @@ lrate = d_{\text{model}}^{-0.5} \cdot \alpha=0.6 [wu2016google]. These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + 50 -, but terminate early when possible [wu2016google]. + , but terminate early when possible [wu2016google]. Table [tab:wmt-results] summarizes our results and compares our translation quality and training costs to other model architectures from the literature. We estimate the number of floating point operations used to train a model by multiplying the training time, the number of GPUs used, and an estimate of the sustained single-precision floating-point capacity of each GPU We used values of 2.8, 3.7, 6.0 and 9.5 TFLOPS for K80, K40, M40 and P100, respectively. diff --git a/tests/data/latex/groundtruth/1706.03762_main.tex.json b/tests/data/latex/groundtruth/1706.03762_main.tex.json index 2e41d2d91c..a8e03a581d 100644 --- a/tests/data/latex/groundtruth/1706.03762_main.tex.json +++ b/tests/data/latex/groundtruth/1706.03762_main.tex.json @@ -1,6 +1,6 @@ { "schema_name": "DoclingDocument", - "version": "1.10.0", + "version": "1.11.0", "name": "main", "furniture": { "self_ref": "#/furniture", @@ -10330,7 +10330,7 @@ "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, - "end_row_offset_idx": 20, + "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "19", @@ -17177,7 +17177,7 @@ "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, - "end_row_offset_idx": 20, + "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "19", diff --git a/tests/data/latex/groundtruth/1706.03762_main.tex.md b/tests/data/latex/groundtruth/1706.03762_main.tex.md index aa6e9021c6..40f75d1db2 100644 --- a/tests/data/latex/groundtruth/1706.03762_main.tex.md +++ b/tests/data/latex/groundtruth/1706.03762_main.tex.md @@ -24,7 +24,7 @@ The dominant sequence transduction models are based on complex recurrent or conv Recurrent neural networks, long short-term memory [hochreiter1997] and gated recurrent [gruEval14] neural networks in particular, have been firmly established as state of the art approaches in sequence modeling and transduction problems such as language modeling and machine translation [sutskever14, bahdanau2014neural, cho2014learning]. Numerous efforts have since continued to push the boundaries of recurrent language models and encoder-decoder architectures [wu2016google,luong2015effective,jozefowicz2016exploring]. -Recurrent models typically factor computation along the symbol positions of the input and output sequences. Aligning the positions to steps in computation time, they generate a sequence of hidden states $h_t$ , as a function of the previous hidden state $h_{t-1}$ and the input for position $t$ . This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths, as memory constraints limit batching across examples. Recent work has achieved significant improvements in computational efficiency through factorization tricks [Kuchaiev2017Factorization] and conditional computation [shazeer2017outrageously], while also improving model performance in case of the latter. The fundamental constraint of sequential computation, however, remains. +Recurrent models typically factor computation along the symbol positions of the input and output sequences. Aligning the positions to steps in computation time, they generate a sequence of hidden states $h_t$, as a function of the previous hidden state $h_{t-1}$ and the input for position $t$. This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths, as memory constraints limit batching across examples. Recent work has achieved significant improvements in computational efficiency through factorization tricks [Kuchaiev2017Factorization] and conditional computation [shazeer2017outrageously], while also improving model performance in case of the latter. The fundamental constraint of sequential computation, however, remains. Attention mechanisms have become an integral part of compelling sequence modeling and transduction models in various tasks, allowing modeling of dependencies without regard to their distance in the input or output sequences [bahdanau2014neural, structuredAttentionNetworks]. In all but a few cases [decomposableAttnModel], however, such attention mechanisms are used in conjunction with a recurrent network. @@ -46,15 +46,15 @@ The Transformer - model architecture. -Most competitive neural sequence transduction models have an encoder-decoder structure [cho2014learning,bahdanau2014neural,sutskever14]. Here, the encoder maps an input sequence of symbol representations $(x_1, ..., x_n)$ to a sequence of continuous representations $\mathbf{z} = (z_1, ..., z_n)$ . Given $\mathbf{z}$ , the decoder then generates an output sequence $(y_1,...,y_m)$ of symbols one element at a time. At each step the model is auto-regressive [graves2013generating], consuming the previously generated symbols as additional input when generating the next. +Most competitive neural sequence transduction models have an encoder-decoder structure [cho2014learning,bahdanau2014neural,sutskever14]. Here, the encoder maps an input sequence of symbol representations $(x_1, ..., x_n)$ to a sequence of continuous representations $\mathbf{z} = (z_1, ..., z_n)$. Given $\mathbf{z}$, the decoder then generates an output sequence $(y_1,...,y_m)$ of symbols one element at a time. At each step the model is auto-regressive [graves2013generating], consuming the previously generated symbols as additional input when generating the next. The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder, shown in the left and right halves of Figure[fig:model-arch], respectively. ### Encoder and Decoder Stacks -Encoder:The encoder is composed of a stack of $N=6$ identical layers. Each layer has two sub-layers. The first is a multi-head self-attention mechanism, and the second is a simple, position-wise fully connected feed-forward network. We employ a residual connection [he2016deep] around each of the two sub-layers, followed by layer normalization [layernorm2016]. That is, the output of each sub-layer is $\mathrm{LayerNorm}(x + \mathrm{Sublayer}(x))$ , where $\mathrm{Sublayer}(x)$ is the function implemented by the sub-layer itself. To facilitate these residual connections, all sub-layers in the model, as well as the embedding layers, produce outputs of dimension $d_{\text{model}}=512$ . +Encoder:The encoder is composed of a stack of $N=6$ identical layers. Each layer has two sub-layers. The first is a multi-head self-attention mechanism, and the second is a simple, position-wise fully connected feed-forward network. We employ a residual connection [he2016deep] around each of the two sub-layers, followed by layer normalization [layernorm2016]. That is, the output of each sub-layer is $\mathrm{LayerNorm}(x + \mathrm{Sublayer}(x))$, where $\mathrm{Sublayer}(x)$ is the function implemented by the sub-layer itself. To facilitate these residual connections, all sub-layers in the model, as well as the embedding layers, produce outputs of dimension $d_{\text{model}}=512$. -Decoder:The decoder is also composed of a stack of $N=6$ identical layers. In addition to the two sub-layers in each encoder layer, the decoder inserts a third sub-layer, which performs multi-head attention over the output of the encoder stack. Similar to the encoder, we employ residual connections around each of the sub-layers, followed by layer normalization. We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position $i$ can depend only on the known outputs at positions less than $i$ . +Decoder:The decoder is also composed of a stack of $N=6$ identical layers. In addition to the two sub-layers in each encoder layer, the decoder inserts a third sub-layer, which performs multi-head attention over the output of the encoder stack. Similar to the encoder, we employ residual connections around each of the sub-layers, followed by layer normalization. We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position $i$ can depend only on the known outputs at positions less than $i$. ### Attention @@ -62,21 +62,21 @@ An attention function can be described as mapping a query and a set of key-value #### Scaled Dot-Product Attention -We call our particular attention "Scaled Dot-Product Attention" (Figure[fig:multi-head-att]). The input consists of queries and keys of dimension $d_k$ , and values of dimension $d_v$ . We compute the dot products of the query with all keys, divide each by $\sqrt{d_k}$ , and apply a softmax function to obtain the weights on the values. +We call our particular attention "Scaled Dot-Product Attention" (Figure[fig:multi-head-att]). The input consists of queries and keys of dimension $d_k$, and values of dimension $d_v$. We compute the dot products of the query with all keys, divide each by $\sqrt{d_k}$, and apply a softmax function to obtain the weights on the values. -In practice, we compute the attention function on a set of queries simultaneously, packed together into a matrix $Q$ . The keys and values are also packed together into matrices $K$ and $V$ . We compute the matrix of outputs as: +In practice, we compute the attention function on a set of queries simultaneously, packed together into a matrix $Q$. The keys and values are also packed together into matrices $K$ and $V$. We compute the matrix of outputs as: $$\begin{equation} \mathrm{Attention}(Q, K, V) = \mathrm{softmax}(\frac{QK^T}{\sqrt{d_k}})V \end{equation}$$ -The two most commonly used attention functions are additive attention [bahdanau2014neural], and dot-product (multiplicative) attention. Dot-product attention is identical to our algorithm, except for the scaling factor of $\frac{1}{\sqrt{d_k}}$ . Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are similar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code. +The two most commonly used attention functions are additive attention [bahdanau2014neural], and dot-product (multiplicative) attention. Dot-product attention is identical to our algorithm, except for the scaling factor of $\frac{1}{\sqrt{d_k}}$. Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are similar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code. -While for small values of $d_k$ the two mechanisms perform similarly, additive attention outperforms dot product attention without scaling for larger values of $d_k$ [DBLP:journals/corr/BritzGLL17]. We suspect that for large values of $d_k$ , the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients +While for small values of $d_k$ the two mechanisms perform similarly, additive attention outperforms dot product attention without scaling for larger values of $d_k$ [DBLP:journals/corr/BritzGLL17]. We suspect that for large values of $d_k$, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients -To illustrate why the dot products get large, assume that the components of $q$ and $k$ are independent random variables with mean $0$ and variance $1$ . Then their dot product, $q \cdot k = \sum_{i=1}^{d_k} q_ik_i$ , has mean $0$ and variance $d_k$ . +To illustrate why the dot products get large, assume that the components of $q$ and $k$ are independent random variables with mean $0$ and variance $1$. Then their dot product, $q \cdot k = \sum_{i=1}^{d_k} q_ik_i$, has mean $0$ and variance $d_k$. -. To counteract this effect, we scale the dot products by $\frac{1}{\sqrt{d_k}}$ . +. To counteract this effect, we scale the dot products by $\frac{1}{\sqrt{d_k}}$. #### Multi-Head Attention @@ -94,7 +94,7 @@ Multi-Head Attention -Instead of performing a single attention function with $d_{\text{model}}$ -dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values $h$ times with different, learned linear projections to $d_k$ , $d_k$ and $d_v$ dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding $d_v$ -dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure[fig:multi-head-att]. +Instead of performing a single attention function with $d_{\text{model}}$-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values $h$ times with different, learned linear projections to $d_k$, $d_k$ and $d_v$ dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding $d_v$-dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure[fig:multi-head-att]. Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this. @@ -104,9 +104,9 @@ $$\begin{align*} \text{where}~\mathrm{head_i} &= \mathrm{Attention}(QW^Q_i, KW^K_i, VW^V_i)\\ \end{align*}$$ -Where the projections are parameter matrices $W^Q_i \in \mathbb{R}^{d_{\text{model}} \times d_k}$ , $W^K_i \in \mathbb{R}^{d_{\text{model}} \times d_k}$ , $W^V_i \in \mathbb{R}^{d_{\text{model}} \times d_v}$ and $W^O \in \mathbb{R}^{hd_v \times d_{\text{model}}}$ . +Where the projections are parameter matrices $W^Q_i \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W^K_i \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W^V_i \in \mathbb{R}^{d_{\text{model}} \times d_v}$ and $W^O \in \mathbb{R}^{hd_v \times d_{\text{model}}}$. -In this work we employ $h=8$ parallel attention layers, or heads. For each of these we use $d_k=d_v=d_{\text{model}}/h=64$ . Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality. +In this work we employ $h=8$ parallel attention layers, or heads. For each of these we use $d_k=d_v=d_{\text{model}}/h=64$. Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality. #### Applications of Attention in our Model @@ -114,7 +114,7 @@ The Transformer uses multi-head attention in three different ways: - In "encoder-decoder attention" layers, the queries come from the previous decoder layer, and the memory keys and values come from the output of the encoder. This allows every position in the decoder to attend over all positions in the input sequence. This mimics the typical encoder-decoder attention mechanisms in sequence-to-sequence models such as [wu2016google, bahdanau2014neural,JonasFaceNet2017]. - The encoder contains self-attention layers. In a self-attention layer all of the keys, values and queries come from the same place, in this case, the output of the previous layer in the encoder. Each position in the encoder can attend to all positions in the previous layer of the encoder. -- Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to $-\infty$ ) all values in the input of the softmax which correspond to illegal connections. See Figure[fig:multi-head-att]. +- Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to $-\infty$) all values in the input of the softmax which correspond to illegal connections. See Figure[fig:multi-head-att]. ### Position-wise Feed-Forward Networks @@ -124,15 +124,15 @@ $$\begin{equation} \mathrm{FFN}(x)=\max(0, xW_1 + b_1) W_2 + b_2 \end{equation}$$ -While the linear transformations are the same across different positions, they use different parameters from layer to layer. Another way of describing this is as two convolutions with kernel size 1. The dimensionality of input and output is $d_{\text{model}}=512$ , and the inner-layer has dimensionality $d_{ff}=2048$ . +While the linear transformations are the same across different positions, they use different parameters from layer to layer. Another way of describing this is as two convolutions with kernel size 1. The dimensionality of input and output is $d_{\text{model}}=512$, and the inner-layer has dimensionality $d_{ff}=2048$. ### Embeddings and Softmax -Similarly to other sequence transduction models, we use learned embeddings to convert the input tokens and output tokens to vectors of dimension $d_{\text{model}}$ . We also use the usual learned linear transformation and softmax function to convert the decoder output to predicted next-token probabilities. In our model, we share the same weight matrix between the two embedding layers and the pre-softmax linear transformation, similar to [press2016using]. In the embedding layers, we multiply those weights by $\sqrt{d_{\text{model}}}$ . +Similarly to other sequence transduction models, we use learned embeddings to convert the input tokens and output tokens to vectors of dimension $d_{\text{model}}$. We also use the usual learned linear transformation and softmax function to convert the decoder output to predicted next-token probabilities. In our model, we share the same weight matrix between the two embedding layers and the pre-softmax linear transformation, similar to [press2016using]. In the embedding layers, we multiply those weights by $\sqrt{d_{\text{model}}}$. ### Positional Encoding -Since our model contains no recurrence and no convolution, in order for the model to make use of the order of the sequence, we must inject some information about the relative or absolute position of the tokens in the sequence. To this end, we add "positional encodings" to the input embeddings at the bottoms of the encoder and decoder stacks. The positional encodings have the same dimension $d_{\text{model}}$ as the embeddings, so that the two can be summed. There are many choices of positional encodings, learned and fixed [JonasFaceNet2017]. +Since our model contains no recurrence and no convolution, in order for the model to make use of the order of the sequence, we must inject some information about the relative or absolute position of the tokens in the sequence. To this end, we add "positional encodings" to the input embeddings at the bottoms of the encoder and decoder stacks. The positional encodings have the same dimension $d_{\text{model}}$ as the embeddings, so that the two can be summed. There are many choices of positional encodings, learned and fixed [JonasFaceNet2017]. In this work, we use sine and cosine functions of different frequencies: @@ -141,19 +141,19 @@ $$\begin{align*} PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d_{\text{model}}}) \end{align*}$$ -where $pos$ is the position and $i$ is the dimension. That is, each dimension of the positional encoding corresponds to a sinusoid. The wavelengths form a geometric progression from $2\pi$ to $10000 \cdot 2\pi$ . We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset $k$ , $PE_{pos+k}$ can be represented as a linear function of $PE_{pos}$ . +where $pos$ is the position and $i$ is the dimension. That is, each dimension of the positional encoding corresponds to a sinusoid. The wavelengths form a geometric progression from $2\pi$ to $10000 \cdot 2\pi$. We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset $k$, $PE_{pos+k}$ can be represented as a linear function of $PE_{pos}$. We also experimented with using learned positional embeddings [JonasFaceNet2017] instead, and found that the two versions produced nearly identical results (see Table[tab:variations] row (E)). We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training. ## Why Self-Attention -In this section we compare various aspects of self-attention layers to the recurrent and convolutional layers commonly used for mapping one variable-length sequence of symbol representations $(x_1, ..., x_n)$ to another sequence of equal length $(z_1, ..., z_n)$ , with $x_i, z_i \in \mathbb{R}^d$ , such as a hidden layer in a typical sequence transduction encoder or decoder. Motivating our use of self-attention we consider three desiderata. +In this section we compare various aspects of self-attention layers to the recurrent and convolutional layers commonly used for mapping one variable-length sequence of symbol representations $(x_1, ..., x_n)$ to another sequence of equal length $(z_1, ..., z_n)$, with $x_i, z_i \in \mathbb{R}^d$, such as a hidden layer in a typical sequence transduction encoder or decoder. Motivating our use of self-attention we consider three desiderata. One is the total computational complexity per layer. Another is the amount of computation that can be parallelized, as measured by the minimum number of sequential operations required. The third is the path length between long-range dependencies in the network. Learning long-range dependencies is a key challenge in many sequence transduction tasks. One key factor affecting the ability to learn such dependencies is the length of the paths forward and backward signals have to traverse in the network. The shorter these paths between any combination of positions in the input and output sequences, the easier it is to learn long-range dependencies [hochreiter2001gradient]. Hence we also compare the maximum path length between any two input and output positions in networks composed of the different layer types. -Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types. $n$ is the sequence length, $d$ is the representation dimension, $k$ is the kernel size of convolutions and $r$ the size of the neighborhood in restricted self-attention. +Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types. $n$ is the sequence length, $d$ is the representation dimension, $k$ is the kernel size of convolutions and $r$ the size of the neighborhood in restricted self-attention. | Layer Type | Complexity per Layer | Sequential | Maximum Path Length | | - | - | - | - | @@ -164,9 +164,9 @@ Maximum path lengths, per-layer complexity and minimum number of sequential oper | Self-Attention (restricted) | $O(r \cdot n \cdot d)$ | $O(1)$ | $O(n/r)$ | | | | | | -As noted in Table [tab:op\_complexities], a self-attention layer connects all positions with a constant number of sequentially executed operations, whereas a recurrent layer requires $O(n)$ sequential operations. In terms of computational complexity, self-attention layers are faster than recurrent layers when the sequence length $n$ is smaller than the representation dimensionality $d$ , which is most often the case with sentence representations used by state-of-the-art models in machine translations, such as word-piece [wu2016google] and byte-pair [sennrich2015neural] representations. To improve computational performance for tasks involving very long sequences, self-attention could be restricted to considering only a neighborhood of size $r$ in the input sequence centered around the respective output position. This would increase the maximum path length to $O(n/r)$ . We plan to investigate this approach further in future work. +As noted in Table [tab:op\_complexities], a self-attention layer connects all positions with a constant number of sequentially executed operations, whereas a recurrent layer requires $O(n)$ sequential operations. In terms of computational complexity, self-attention layers are faster than recurrent layers when the sequence length $n$ is smaller than the representation dimensionality $d$, which is most often the case with sentence representations used by state-of-the-art models in machine translations, such as word-piece [wu2016google] and byte-pair [sennrich2015neural] representations. To improve computational performance for tasks involving very long sequences, self-attention could be restricted to considering only a neighborhood of size $r$ in the input sequence centered around the respective output position. This would increase the maximum path length to $O(n/r)$. We plan to investigate this approach further in future work. -A single convolutional layer with kernel width $k < n$ does not connect all pairs of input and output positions. Doing so requires a stack of $O(n/k)$ convolutional layers in the case of contiguous kernels, or $O(log_k(n))$ in the case of dilated convolutions [NalBytenet2017], increasing the length of the longest paths between any two positions in the network. Convolutional layers are generally more expensive than recurrent layers, by a factor of $k$ . Separable convolutions [xception2016], however, decrease the complexity considerably, to $O(k \cdot n \cdot d + n \cdot d^2)$ . Even with $k=n$ , however, the complexity of a separable convolution is equal to the combination of a self-attention layer and a point-wise feed-forward layer, the approach we take in our model. +A single convolutional layer with kernel width $k < n$ does not connect all pairs of input and output positions. Doing so requires a stack of $O(n/k)$ convolutional layers in the case of contiguous kernels, or $O(log_k(n))$ in the case of dilated convolutions [NalBytenet2017], increasing the length of the longest paths between any two positions in the network. Convolutional layers are generally more expensive than recurrent layers, by a factor of $k$. Separable convolutions [xception2016], however, decrease the complexity considerably, to $O(k \cdot n \cdot d + n \cdot d^2)$. Even with $k=n$, however, the complexity of a separable convolution is equal to the combination of a self-attention layer and a point-wise feed-forward layer, the approach we take in our model. As side benefit, self-attention could yield more interpretable models. We inspect attention distributions from our models and present and discuss examples in the appendix. Not only do individual attention heads clearly learn to perform different tasks, many appear to exhibit behavior related to the syntactic and semantic structure of the sentences. @@ -184,7 +184,7 @@ We trained our models on one machine with 8 NVIDIA P100 GPUs. For our base mode ### Optimizer -We used the Adam optimizer[kingma2014adam] with $\beta_1=0.9$ , $\beta_2=0.98$ and $\epsilon=10^{-9}$ . We varied the learning rate over the course of training, according to the formula: +We used the Adam optimizer[kingma2014adam] with $\beta_1=0.9$, $\beta_2=0.98$ and $\epsilon=10^{-9}$. We varied the learning rate over the course of training, according to the formula: $$\begin{equation} lrate = d_{\text{model}}^{-0.5} \cdot @@ -192,15 +192,15 @@ lrate = d_{\text{model}}^{-0.5} \cdot {step\_num} \cdot {warmup\_steps}^{-1.5}) \end{equation}$$ -This corresponds to increasing the learning rate linearly for the first $warmup\_steps$ training steps, and decreasing it thereafter proportionally to the inverse square root of the step number. We used $warmup\_steps=4000$ . +This corresponds to increasing the learning rate linearly for the first $warmup\_steps$ training steps, and decreasing it thereafter proportionally to the inverse square root of the step number. We used $warmup\_steps=4000$. ### Regularization We employ three types of regularization during training: -Residual Dropout We apply dropout [srivastava2014dropout] to the output of each sub-layer, before it is added to the sub-layer input and normalized. In addition, we apply dropout to the sums of the embeddings and the positional encodings in both the encoder and decoder stacks. For the base model, we use a rate of $P_{drop}=0.1$ . +Residual Dropout We apply dropout [srivastava2014dropout] to the output of each sub-layer, before it is added to the sub-layer input and normalized. In addition, we apply dropout to the sums of the embeddings and the positional encodings in both the encoder and decoder stacks. For the base model, we use a rate of $P_{drop}=0.1$. -Label Smoothing During training, we employed label smoothing of value $\epsilon_{ls}=0.1$ [DBLP:journals/corr/SzegedyVISW15]. This hurts perplexity, as the model learns to be more unsure, but improves accuracy and BLEU score. +Label Smoothing During training, we employed label smoothing of value $\epsilon_{ls}=0.1$ [DBLP:journals/corr/SzegedyVISW15]. This hurts perplexity, as the model learns to be more unsure, but improves accuracy and BLEU score. ## Results @@ -219,15 +219,15 @@ The Transformer achieves better BLEU scores than previous state-of-the-art model | 0pt2.0exDeep-Att + PosUnk Ensemble \citep{DBLP:journals/corr/ZhouCWLX16} | | 40.4 | | | $8.0\cdot10^{20}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GNMT + RL Ensemble \citep{wu2016google} | 26.30 | 41.16 | | $1.8\cdot10^{20}$ | $1.1\cdot10^{21}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ConvS2S Ensemble \citep{JonasFaceNet2017} | 26.36 | 41.29 | | $7.7\cdot10^{19}$ | $1.2\cdot10^{21}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| 1pt-1pt0pt 0pt2.2exTransformer (base model) | 27.3 | 38.1 | | 2c $3.3\cdot10^{18}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| Transformer (big) | 28.4 | 41.8 | | 2c $2.3\cdot10^{19}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| 1pt-1pt0pt 0pt2.2exTransformer (base model) | 27.3 | 38.1 | | 2c$3.3\cdot10^{18}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| Transformer (big) | 28.4 | 41.8 | | 2c$2.3\cdot10^{19}$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -On the WMT 2014 English-to-German translation task, the big transformer model (Transformer (big) in Table[tab:wmt-results]) outperforms the best previously reported models (including ensembles) by more than $2.0$ BLEU, establishing a new state-of-the-art BLEU score of $28.4$ . The configuration of this model is listed in the bottom line of Table[tab:variations]. Training took $3.5$ days on $8$ P100 GPUs. Even our base model surpasses all previously published models and ensembles, at a fraction of the training cost of any of the competitive models. +On the WMT 2014 English-to-German translation task, the big transformer model (Transformer (big) in Table[tab:wmt-results]) outperforms the best previously reported models (including ensembles) by more than $2.0$ BLEU, establishing a new state-of-the-art BLEU score of $28.4$. The configuration of this model is listed in the bottom line of Table[tab:variations]. Training took $3.5$ days on $8$ P100 GPUs. Even our base model surpasses all previously published models and ensembles, at a fraction of the training cost of any of the competitive models. -On the WMT 2014 English-to-French translation task, our big model achieves a BLEU score of $41.0$ , outperforming all of the previously published single models, at less than $1/4$ the training cost of the previous state-of-the-art model. The Transformer (big) model trained for English-to-French used dropout rate $P_{drop}=0.1$ , instead of $0.3$ . +On the WMT 2014 English-to-French translation task, our big model achieves a BLEU score of $41.0$, outperforming all of the previously published single models, at less than $1/4$ the training cost of the previous state-of-the-art model. The Transformer (big) model trained for English-to-French used dropout rate $P_{drop}=0.1$, instead of $0.3$. -For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of $4$ and length penalty $\alpha=0.6$ [wu2016google]. These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + $50$ , but terminate early when possible [wu2016google]. +For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of $4$ and length penalty $\alpha=0.6$ [wu2016google]. These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + $50$, but terminate early when possible [wu2016google]. Table [tab:wmt-results] summarizes our results and compares our translation quality and training costs to other model architectures from the literature. We estimate the number of floating point operations used to train a model by multiplying the training time, the number of GPUs used, and an estimate of the sustained single-precision floating-point capacity of each GPU @@ -239,7 +239,7 @@ We used values of 2.8, 3.7, 6.0 and 9.5 TFLOPS for K80, K40, M40 and P100, respe Variations on the Transformer architecture. Unlisted values are identical to those of the base model. All metrics are on the English-to-German translation development set, newstest2013. Listed perplexities are per-wordpiece, according to our byte-pair encoding, and should not be compared to per-word perplexities. -| 0pt2.0ex | 2* $N$ | 2* $d_{\text{model}}$ | 2* $d_{\text{ff}}$ | 2* $h$ | 2* $d_k$ | 2* $d_v$ | 2* $P_{drop}$ | 2* $\epsilon_{ls}$ | train | PPL | BLEU | params | +| 0pt2.0ex | 2*$N$ | 2*$d_{\text{model}}$ | 2*$d_{\text{ff}}$ | 2*$h$ | 2*$d_k$ | 2*$d_v$ | 2*$P_{drop}$ | 2*$\epsilon_{ls}$ | train | PPL | BLEU | params | | - | - | - | - | - | - | - | - | - | - | - | - | - | | | | | | | | | | | steps | (dev) | (dev) | $\times10^6$ | | 0pt2.0ex base | 6 | 512 | 2048 | 8 | 64 | 64 | 0.1 | 0.1 | 100K | 4.92 | 25.8 | 65 | @@ -268,7 +268,7 @@ To evaluate the importance of different components of the Transformer, we varied In Table[tab:variations] rows (A), we vary the number of attention heads and the attention key and value dimensions, keeping the amount of computation constant, as described in Section [sec:multihead]. While single-head attention is 0.9 BLEU worse than the best setting, quality also drops off with too many heads. -In Table[tab:variations] rows (B), we observe that reducing the attention key size $d_k$ hurts model quality. This suggests that determining compatibility is not easy and that a more sophisticated compatibility function than dot product may be beneficial. We further observe in rows (C) and (D) that, as expected, bigger models are better, and dropout is very helpful in avoiding over-fitting. In row (E) we replace our sinusoidal positional encoding with learned positional embeddings [JonasFaceNet2017], and observe nearly identical results to the base model. +In Table[tab:variations] rows (B), we observe that reducing the attention key size $d_k$ hurts model quality. This suggests that determining compatibility is not easy and that a more sophisticated compatibility function than dot product may be beneficial. We further observe in rows (C) and (D) that, as expected, bigger models are better, and dropout is very helpful in avoiding over-fitting. In row (E) we replace our sinusoidal positional encoding with learned positional embeddings [JonasFaceNet2017], and observe nearly identical results to the base model. ### English Constituency Parsing @@ -292,9 +292,9 @@ The Transformer generalizes well to English constituency parsing (Results are on To evaluate if the Transformer can generalize to other tasks we performed experiments on English constituency parsing. This task presents specific challenges: the output is subject to strong structural constraints and is significantly longer than the input. Furthermore, RNN sequence-to-sequence models have not been able to attain state-of-the-art results in small-data regimes [KVparse15]. -We trained a 4-layer transformer with $d_{model} = 1024$ on the Wall Street Journal (WSJ) portion of the Penn Treebank [marcus1993building], about 40K training sentences. We also trained it in a semi-supervised setting, using the larger high-confidence and BerkleyParser corpora from with approximately 17M sentences [KVparse15]. We used a vocabulary of 16K tokens for the WSJ only setting and a vocabulary of 32K tokens for the semi-supervised setting. +We trained a 4-layer transformer with $d_{model} = 1024$ on the Wall Street Journal (WSJ) portion of the Penn Treebank [marcus1993building], about 40K training sentences. We also trained it in a semi-supervised setting, using the larger high-confidence and BerkleyParser corpora from with approximately 17M sentences [KVparse15]. We used a vocabulary of 16K tokens for the WSJ only setting and a vocabulary of 32K tokens for the semi-supervised setting. -We performed only a small number of experiments to select the dropout, both attention and residual (section[sec:reg]), learning rates and beam size on the Section 22 development set, all other parameters remained unchanged from the English-to-German base translation model. During inference, we increased the maximum output length to input length + $300$ . We used a beam size of $21$ and $\alpha=0.3$ for both WSJ only and the semi-supervised setting. +We performed only a small number of experiments to select the dropout, both attention and residual (section[sec:reg]), learning rates and beam size on the Section 22 development set, all other parameters remained unchanged from the English-to-German base translation model. During inference, we increased the maximum output length to input length + $300$. We used a beam size of $21$ and $\alpha=0.3$ for both WSJ only and the semi-supervised setting. Our results in Table[tab:parsing-results] show that despite the lack of task-specific tuning our model performs surprisingly well, yielding better results than all previously reported models with the exception of the Recurrent Neural Network Grammar [dyer-rnng:16]. diff --git a/tests/data/latex/groundtruth/2305.03393_main.tex.dclg b/tests/data/latex/groundtruth/2305.03393_main.tex.dclg index e6efbf5294..f6e9a0f710 100644 --- a/tests/data/latex/groundtruth/2305.03393_main.tex.dclg +++ b/tests/data/latex/groundtruth/2305.03393_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass[runningheads]{llncs} diff --git a/tests/data/latex/groundtruth/2310.06825_main.tex.dclg b/tests/data/latex/groundtruth/2310.06825_main.tex.dclg index 2ab88c1475..5b9f9cdf48 100644 --- a/tests/data/latex/groundtruth/2310.06825_main.tex.dclg +++ b/tests/data/latex/groundtruth/2310.06825_main.tex.dclg @@ -1,4 +1,4 @@ - + \documentclass{article} @@ -273,7 +273,7 @@ 131K tokens. In practice, for a sequence length of 16K and W=4096 -, changes made to FlashAttention[dao2022flashattention] and xFormers[xFormers2022] yield a 2x speed improvement over a vanilla attention baseline. + , changes made to FlashAttention[dao2022flashattention] and xFormers[xFormers2022] yield a 2x speed improvement over a vanilla attention baseline. =-1 Rolling Buffer Cache. A fixed attention span means that we can limit our cache size using a rolling buffer cache. The cache has a fixed size of @@ -288,7 +288,7 @@ W , past values in the cache are overwritten, and the size of the cache stops increasing. We provide an illustration in Figure[fig:cache] for W=3 -. On a sequence length of 32k tokens, this reduces the cache memory usage by 8x, without impacting the model quality. + . On a sequence length of 32k tokens, this reduces the cache memory usage by 8x, without impacting the model quality. [][c] @@ -303,7 +303,7 @@ i is larger than W -, past values in the cache are overwritten. The hidden state corresponding to the latest generated tokens are colored in orange. + , past values in the cache are overwritten. The hidden state corresponding to the latest generated tokens are colored in orange. @@ -311,7 +311,7 @@ k , v -) cache with the prompt. If the prompt is very large, we can chunk it into smaller pieces, and pre-fill the cache with each chunk. For this purpose, we can select the window size as our chunk size. For each chunk, we thus need to compute the attention over the cache and over the chunk. Figure[fig:chunking] shows how the attention mask works over both the cache and the chunk. + ) cache with the prompt. If the prompt is very large, we can chunk it into smaller pieces, and pre-fill the cache with each chunk. For this purpose, we can select the window size as our chunk size. For each chunk, we thus need to compute the attention over the cache and over the chunk. Figure[fig:chunking] shows how the attention mask works over both the cache and the chunk.
    Pre-fill and chunking. During pre-fill of the cache, long sequences are chunked to limit memory usage. We process a sequence in three chunks, The cat sat on, the mat and saw, the dog go to. The figure shows what happens for the third chunk (the dog go to): it attends itself using a causal mask (rightmost block), attends the cache using a sliding window (center block), and does not attend to past tokens as they are outside of the sliding window (left block).SFNet learned features when trained to predict optical emission lines. We show how each feature correlates with optical line ratios (BPT diagrams; left) and examples of the top nine image activations (right). For the BPT diagrams, colors denote scaled activation strength, ranging from black (zero) to dark magenta (low) to bright yellow (high). Linear relationships between galaxy properties and image features learned by the SFNet. We show how the gas metallicity, [N2]/H \alpha -, and [O3]/H + , and [O3]/H \beta depend on SFNet feature activations, where SFNet features are represented using the top-activating galaxy image cutout from the validation set.