Coverage for src/wiktextract/extractor/th/tags.py: 71%
24 statements
« prev ^ index » next coverage.py v7.10.3, created at 2025-08-15 05:18 +0000
« prev ^ index » next coverage.py v7.10.3, created at 2025-08-15 05:18 +0000
1from .models import WordEntry
3EXAMPLE_TAGS = {
4 # แม่แบบ:zh-x, มอดูล:zh-usex/data
5 "MSC": "Modern Standard Chinese",
6 "Pinyin": "Pinyin",
7 "trad.": "Traditional-Chinese",
8 "simp.": "Simplified-Chinese",
9}
11TRANSLATION_TAGS = {
12 # แม่แบบ:t
13 # https://th.wiktionary.org/wiki/มอดูล:gender_and_number/data
14 "ญ.": "feminine",
15 "ช.": "masculine",
16 "ก.": "neuter",
17 "ร.": "common",
18 "ชีว.": "animate",
19 "อชีว.": "inanimate",
20 "สัต.": "animal-not-person",
21 "บุค.": "personal",
22 "อบุค.": "impersonal",
23 "เอก.": "singular",
24 "ทวิ.": "dual",
25 "พหู.": "plural",
26 "ไม่สมบูรณ์": "imperfective",
27 "สมบูรณ์": "perfective",
28}
30SOUND_TAGS = {
31 "การแผลงเป็น\nอักษรโรมัน": "romanization", # Template:th-pron
32 "ไพบูลย์พับบลิชชิง": "Paiboon",
33 "ราชบัณฑิตยสภา": "Royal-Institute",
34 "การแบ่งพยางค์": "phoneme",
35 "US": "US",
36 "UK": "UK",
37}
39LABEL_TAGS = {
40 # https://th.wiktionary.org/wiki/มอดูล:labels/data
41 "คำย่อ": "abbreviation",
42 "อาการนาม": "abstract-noun",
43 "อักษรอ่านย่อ": "acronym",
44 "กรรตุวาจก": "active",
45 "สกรรม, อกรรม": "ambitransitive",
46 "มีชีวิต": "animate",
47 "บอกเล่า": "indicative",
48 "สมมุติ": "subjunctive",
49 "สั่ง": "imperative",
50 "คำกริยานุเคราะห์": "auxiliary",
51 "จำนวนเชิงการนับ": "cardinal",
52 "สมุหนาม": "collective",
53 "เพศรวม": "common",
54 "เปรียบเทียบได้": "comparable",
55 "เชื่อม": "copulative",
56 "นับได้": "countable",
57 "ทวิกรรม": "ditransitive",
58 "เพศหญิง": "feminine",
59 "สำนวน": "idiomatic",
60 "ไม่สมบูรณ์": "imperfective",
61 "คำอบุรุษกริยา": "impersonal",
62 "ในรูปเอกพจน์": "singular",
63 "ในรูปทวิพจน์": "dual",
64 "ในรูปพหูพจน์": "plural",
65 "ไม่มีชีวิต": "inanimate",
66 "ไม่ชี้เฉพาะ": "indefinite",
67 "อักษรย่อ": "initialism",
68 "อกรรม": "intransitive",
69 "สัทอักษรสากล": "IPA",
70 "เพศชาย": "masculine",
71 "เพศกลาง": "neuter",
72 "เปรียบเทียบไม่ได้": "not-comparable",
73 "เลียนเสียงธรรมชาติ": "onomatopoeic",
74 "จำนวนเชิงอันดับที่": "ordinal",
75 "พาร์ทิซิเพิล": "partitive",
76 "กรรมวาจก": "passive",
77 "สมบูรณ์": "perfect",
78 "พหูพจน์เท่านั้น": "plural-only",
79 "แสดงความเป็นเจ้าของ": "possessive",
80 "วลีภาคแสดง": "predicative",
81 "สะท้อน": "reflexive",
82 "เอกพจน์เท่านั้น": "singular-only",
83 "สภาว": "stative",
84 "สกรรม": "transitive",
85 "นับไม่ได้": "uncountable",
86 "โบราณ": "archaic",
87 "ภาษาเด็ก": "childish",
88 "ภาษาปาก": "colloquial",
89 "ล้าสมัย": "dated",
90 "นัยล้าสมัย": "dated",
91 "ดูหมิ่น": "derogatory",
92 "ภาษาถิ่น": "dialect",
93 "ในเชิงเปรียบเทียบ": "metaphoric",
94 "ทางการ": "formal",
95 "ขำขัน": "humorous",
96 "อติพจน์": "excessive",
97 "ไม่ทางการ": "informal",
98 "สแลงอินเทอร์เน็ต": ["Internet", "slang"],
99 "ไออาร์ซี": "IRC",
100 "ภาษาข่าว": "journalistic",
101 "ภาษาหนังสือ": "literary",
102 "คำสร้างใหม่": "neologism",
103 "ภาษาไม่มาตรฐาน": "nonstandard",
104 "เลิกใช้": "obsolete",
105 "ล่วงเกิน": "offensive",
106 "ร้อยกรอง": "poetic",
107 "สุภาพ": "polite",
108 "ไม่ควรใช้": "proscribed",
109 "พบได้ยาก": "rare",
110 # "ราชาศัพท์": "",
111 "สแลง": "slang",
112 # "ศัพท์เฉพาะ": "",
113 "หยาบคาย": "vulgar",
114 "กรีซโบราณ": "Ancient Greek",
115 "โรมโบราณ": "Ancient Rome",
116 "สะกดผิด": "misspelling",
117 # Template:zh-mw
118 # Module:zh/templates
119 "จีนกลาง": "Mandarin",
120 "กวางตุ้ง": "Cantonese",
121 "กั้น": "Gan",
122 "แคะ": "Hakka",
123 "จิ้น": "Jin",
124 "หมิ่นเหนือ": "Northern-Min",
125 "หมิ่นตะวันออก": "Eastern-Min",
126 "หมิ่นใต้": "Hokkien",
127 "แต้จิ๋ว": "Teochew",
128 "อู๋": "Wu",
129 "เซียง": "Xiang",
130 # Template:ru-noun+
131 "ช.": "masculine",
132 "อชีว.": "inanimate",
133 "สัมพันธการก": "genitive",
134 "กรรตุการกพหูพจน์": ["nominative", "plural"],
135 "สัมพันธการกพหูพจน์": ["genitive", "plural"],
136}
139TAGS = {**EXAMPLE_TAGS, **TRANSLATION_TAGS, **SOUND_TAGS, **LABEL_TAGS}
141TOPICS = {
142 # https://th.wiktionary.org/wiki/มอดูล:labels/data/topical
143 "การบัญชี": "accounting",
144 "สวนศาสตร์": "acoustics",
145 "อากาศยานศาสตร์": "aeronautics",
146 "เกษตรกรรม": "agriculture",
147 "อากาศยาน": "aircraft",
148 "การเล่นแร่แปรธาตุ": "alchemy",
149 "เครื่องดื่มแอลกอฮอล์": "alcohol",
150 "โรคพิษสุรา": "alcoholism",
151 "พีชคณิต": "algebra",
152 "เรขาคณิตเชิงพีชคณิต": "geometry",
153 "ทอพอโลยีเชิงพีชคณิต": "topology",
154 "แพทยศาสตร์ทางเลือก": "alternative-medicine",
155 "วิทยุสมัครเล่น": "radio",
156 "อเมริกันฟุตบอล": "football",
157 "เคมีวิเคราะห์": "chemistry",
158 "อนาธิปไตย": "anarchism",
159 "กายวิภาคศาสตร์": "anatomy",
160 "แอนิเมชัน": "anime",
161 "มานุษยวิทยา": "anthropology",
162 "วิทยาแมงมุม": "arachnology",
163 "โบราณคดี": "archaeology",
164 "การยิงธนู": "archery",
165 "สถาปัตยกรรม": "architecture",
166 "เลขคณิต": "arithmetic",
167 "ศิลปะ": "arts",
168 "ปัญญาประดิษฐ์": "AI",
169 "โหราศาสตร์": "astrology",
170 "อวกาศยานศาสตร์": "astronautics",
171 "ดาราศาสตร์": "astronomy",
172 "ฟิสิกส์ดาราศาสตร์": "astrophysics",
173 "กรีฑา": "athletics",
174 "ยานยนต์": "automotive",
175 "การบิน": "aviation",
176 "วิทยาแบคทีเรีย": "bacteria",
177 "แบดมินตัน": "badminton",
178 "กีฬาใช้บอล": "ball-games",
179 "การธนาคาร": "banking",
180 "เบสบอล": ["baseball", "ball-games"],
181 "บาสเกตบอล": ["basketball", "ball-games"],
182 "บีดีเอสเอ็ม": "BDSM",
183 "เบียร์": ["beer", "beverages"],
184 "ไบเบิล": ["biblical", "religion"],
185 "บิงโก": ["bingo", "games"],
186 "ชีวเคมี": "biochemistry",
187 "ชีววิทยา": "biology",
188 "เกมกระดาน": "board-games",
189 "พฤกษศาสตร์": "botany",
190 "มวย": ["boxing", "martial-arts"],
191 "ไบรโอโลยี": ["bryology", "botany"],
192 "ศาสนาพุทธ": ["Buddhism", "religion"],
193 "ธุรกิจ": "business",
194 "แคลคูลัส": ["calculus", "mathematics"],
195 "เกมไพ่": "card-games",
196 "หทัยวิทยา": ["cardiology", "medicine"],
197 "การทำแผนที่": ["cartography", "geography"],
198 # "ธาตุเคมี": "",
199 "เคมี": "chemistry",
200 "หมากรุกสากล": ["chess", "board-games"],
201 "ศาสนาคริสต์": "Christianity",
202 "การถ่ายภาพยนตร์": ["cinematography", "film"],
203 "ภาษาศาสตร์คอมพิวเตอร์": ["computing", "linguistics"],
204 "ภาษาคอมพิวเตอร์": "computing",
205 "วิทยาการคอมพิวเตอร์": "computing",
206 "การคอมพิวเตอร์": "computing",
207 "ศาสนาขงจื๊อ": "Confucianism",
208 "ตัจวิทยา": ["dermatology", "medicine"],
209 "เศรษฐศาสตร์": "economics",
210 "การศึกษา": "education",
211 "ไฟฟ้า": "electricity",
212 "แม่เหล็กไฟฟ้า": "electromagnetism",
213 "อิเล็กทรอนิกส์": ["electronics", "electricity"],
214 "จริยศาสตร์": ["ethics", "philosophy"],
215 "การออกกำลังกาย": ["exercise", "sports"],
216 "ภูมิศาสตร์": "geography",
217 "ธรณีวิทยา": "geology",
218 "เรขาคณิต": "geometry",
219 "กอล์ฟ": ["golf", "sports"],
220 "ไวยากรณ์": ["grammar", "linguistics"],
221 "ศาสนาฮินดู": ["Hinduism", "religion"],
222 "เทคโนโลยีสารสนเทศ": "computing",
223 "อินเทอร์เน็ต": "Internet",
224 "ศาสนาอิสลาม": "Islam",
225 "กฎหมาย": "law",
226 "ศัพทานุกรมศาสตร์": ["lexicography", "linguistics"],
227 "แอลจีบีที": "LGBT",
228 "ภาษาศาสตร์": "linguistics",
229 "วรรณกรรม": "literature",
230 "ตรรกศาสตร์": "logic",
231 "คณิตศาสตร์": "mathematics",
232 "แพทยศาสตร์": "medicine",
233 "อุตุนิยมวิทยา": "meteorology",
234 "การทหาร": "military",
235 "วิทยาแร่": "mineralogy",
236 "ราชาธิปไตย": "monarchy",
237 "ดนตรี": "music",
238 "นาโนเทคโนโลยี": ["nanotechnology", "engineering"],
239 "การเดินเรือ": "nautical",
240 "กษาปณวิทยา": ["numismatics", "hobbies"],
241 "โภชนาการ": "nutrition",
242 "ทัศนศาสตร์": "optics",
243 "พยาธิวิทยา": "pathology",
244 "เภสัชวิทยา": "pharmacology",
245 "ปรัชญา": "philosophy",
246 "สัทศาสตร์": "phonetics",
247 "สัทวิทยา": "phonology",
248 "คมีเชิงฟิสิกส์": "chemistry",
249 "ฟิสิกส์": "physics",
250 "สรีรวิทยา": "physiology",
251 "การเมือง": "politics",
252 "สื่อลามก": "pornography",
253 "การเขียนโปรแกรม": "programming",
254 "สัทสัมพันธ์": ["prosody", "phonology"],
255 "ศาสนา": "religion",
256 "วิทยาการหุ่นยนต์": ["robotics", "mechanical-engineering computing"],
257 "นิยายวิทยาศาสตร์": "science-fiction",
258 "วิทยาศาสตร์": "sciences",
259 "เพศวิถี": "sexuality",
260 # "การเดินเรือ": "",
261 "ซอกเกอร์": ["soccer", "ball-games"],
262 "สังคมศาสตร์": "social-science",
263 "ภาษาศาสตร์สังคม": ["sociolinguistics", "linguistics sociology"],
264 "สังคมวิทยา": "sociology",
265 "กีฬา": "sports",
266 "สถิติศาสตร์": "statistics",
267 "ศาสนาเต๋า": "Taoism",
268 "อนุกรมวิธาน": "taxonomy",
269 "เทคโนโลยี": "technology",
270 "ยูนิโคด": "Unicode",
271 "ผัก": ["vegetable", "food"],
272 "ไวน์": ["wine", "oenology"],
273 "สงครามโลกครั้งที่หนึ่ง": "World War I",
274 "สงครามโลกครั้งที่สอง": "World War II",
275 "พิษ": "poison",
276}
279def translate_raw_tags(data: WordEntry) -> None:
280 raw_tags = []
281 for raw_tag in data.raw_tags:
282 if raw_tag in TAGS and hasattr(data, "tags"):
283 tr_tag = TAGS[raw_tag]
284 if isinstance(tr_tag, str):
285 data.tags.append(tr_tag)
286 elif isinstance(tr_tag, list): 286 ↛ 281line 286 didn't jump to line 281 because the condition on line 286 was always true
287 data.tags.extend(tr_tag)
288 elif raw_tag in TOPICS and hasattr(data, "topics"): 288 ↛ 289line 288 didn't jump to line 289 because the condition on line 288 was never true
289 topic = TOPICS[raw_tag]
290 if isinstance(topic, str):
291 data.topics.append(topic)
292 elif isinstance(topic, list):
293 data.topics.extend(topic)
294 else:
295 raw_tags.append(raw_tag)
296 data.raw_tags = raw_tags