Coverage for src/wiktextract/extractor/pl/etymology.py: 94%
44 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-07 00:55 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-07 00:55 +0000
1import re
2from collections import defaultdict
4from wikitextprocessor.parser import NodeKind, WikiNode
6from ...page import clean_node
7from ...wxr_context import WiktextractContext
8from .models import WordEntry
11def extract_etymology_section(
12 wxr: WiktextractContext,
13 page_data: list[WordEntry],
14 base_data: WordEntry,
15 level_node: WikiNode,
16):
17 from .page import match_sense_index
19 etymology_texts = defaultdict(list)
20 etymology_links = defaultdict(list)
21 has_list = False
22 sense_index = ""
23 for list_item in level_node.find_child_recursively(NodeKind.LIST_ITEM):
24 e_nodes = []
25 for node in list_item.children:
26 if isinstance(node, str):
27 m = re.search(r"\(([\d\s,-.]+)\)", node)
28 if m is not None:
29 sense_index = m.group(1)
30 remain_str = node[m.end() :]
31 if remain_str != "": 31 ↛ 25line 31 didn't jump to line 25 because the condition on line 31 was always true
32 e_nodes.append(remain_str)
33 else:
34 e_nodes.append(node)
35 else:
36 e_nodes.append(node)
37 links = []
38 text = clean_node(wxr, None, e_nodes, link_collector=links)
39 if len(text) > 0: 39 ↛ 23line 39 didn't jump to line 23 because the condition on line 39 was always true
40 etymology_texts[sense_index].append(text)
41 etymology_links[sense_index].extend(links)
42 has_list = True
43 if not has_list:
44 links = []
45 text = clean_node(wxr, None, level_node.children, link_collector=links)
46 if len(text) > 0: 46 ↛ 50line 46 didn't jump to line 50 because the condition on line 46 was always true
47 etymology_texts[sense_index].append(text)
48 etymology_links[sense_index].extend(links)
50 for data in page_data:
51 if data.lang_code == base_data.lang_code: 51 ↛ 50line 51 didn't jump to line 50 because the condition on line 51 was always true
52 for sense_index, texts in etymology_texts.items():
53 if sense_index == "" or match_sense_index(sense_index, data):
54 data.etymology_texts = texts
55 data.etymology_links = etymology_links[sense_index].copy()
57 base_data.etymology_texts = etymology_texts.get("", [])
58 base_data.etymology_links = etymology_links.get("", []).copy()