Coverage for src/wiktextract/extractor/th/tags.py: 75%
26 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 05:44 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 05:44 +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 # Template:th-pron
32 "การแผลงเป็น": "romanization",
33 "อักษรโรมัน": "romanization",
34 "ไพบูลย์พับบลิชชิง": "Paiboon",
35 "ราชบัณฑิตยสภา": "Royal-Institute",
36 "การแบ่งพยางค์": "phoneme",
37 "US": "US",
38 "UK": "UK",
39 "เสียงสมาส": "compound",
40 "ไม่ตามอักขรวิธี": "unorthographical",
41 "เสียงสระสั้น": "short",
42 # Template:zh-pron
43 "จีนกลาง": "Mandarin",
44 "มาตรฐาน": "Standard",
45 "พินอิน": "Pinyin",
46 "จู้อิน": "Bopomofo",
47 "Xi'an": "Xi'an",
48 "Guanzhong Pinyin": ["Guanzhong", "Pinyin"],
49 "ดุงกาน": "Dungan",
50 "Cyrillic": "Cyrillic",
51 "Wiktionary": "Wiktionary-specific",
52 "กวางตุ้ง": "Cantonese",
53 "Jyutping": "Jyutping",
54 "PFS": "Phak-fa-su",
55 "หมิ่นเหนือ": "Min-Bei",
56 "KCR": "Kienning-Colloquial-Romanized",
57 "หมิ่นตะวันออก": "Min-Dong",
58 "BUC": "Foochow-Romanized",
59 "หมิ่นใต้": "Min-Nan",
60 "ฮกเกี้ยน": "Hokkien",
61 "POJ": "POJ",
62 "แต้จิ๋ว": "Teochew",
63 "Peng'im": "Peng'im",
64 "จีนมาตรฐาน": "Standard-Chinese",
65 "ทงย่งพินอิน": "Tongyong-Pinyin",
66 "เวด-ไจลส์": "Wade–Giles",
67 "เยล": "Yale",
68 "กั๋วยฺหวี่หลัวหม่าจื้อ": "Gwoyeu-Romatsyh",
69 "พัลลาดีอุส": "Palladius",
70 "สัทอักษรสากลจีนวิทยา": "Sinological-IPA",
71 "กวางตุ้งมาตรฐาน": "Standard-Cantonese",
72 "กว่างโจว–ฮ่องกง": ["Guangzhou", "Hong Kong"],
73 "ยฺหวืดเพ็ง": "Jyutping",
74 "เพ็งยั้ม": ["Cantonese", "Pinyin"],
75 "อักษรโรมันมณฑลกวางตุ้ง": "Guangdong-Romanization",
76 "Pha̍k-fa-sṳ": "Phak-fa-su",
77 "Kienning Colloquial Romanized": "Kienning-Colloquial-Romanized",
78 "Pe̍h-ōe-jī": "POJ",
79 "Tâi-lô": "Tai-lo",
80 "Phofsit Daibuun": "Phofsit-Daibuun",
81 "เสฉวน": "Sichuan",
82 "เฉิงตู": "Chengdu",
83 "Sichuanese Pinyin": ["Sichuanese", "Pinyin"],
84 "Scuanxua Ladinxua Xin Wenz": "Latinxua-Sin-Wenz",
85 "Pe̍h-ōe-jī-like": "POJ",
86 "อู๋": "Wu",
87 "เซียง": "Xiang",
88 "Wiktionary Romanisation": ["Wiktionary-specific", "romanization"],
89}
91LABEL_TAGS = {
92 # https://th.wiktionary.org/wiki/มอดูล:labels/data
93 "คำย่อ": "abbreviation",
94 "อาการนาม": "abstract-noun",
95 "อักษรอ่านย่อ": "acronym",
96 "กรรตุวาจก": "active",
97 "สกรรม, อกรรม": "ambitransitive",
98 "มีชีวิต": "animate",
99 "บอกเล่า": "indicative",
100 "สมมุติ": "subjunctive",
101 "สั่ง": "imperative",
102 "คำกริยานุเคราะห์": "auxiliary",
103 "จำนวนเชิงการนับ": "cardinal",
104 "สมุหนาม": "collective",
105 "เพศรวม": "common",
106 "เปรียบเทียบได้": "comparable",
107 "เชื่อม": "copulative",
108 "นับได้": "countable",
109 "ทวิกรรม": "ditransitive",
110 "เพศหญิง": "feminine",
111 "สำนวน": "idiomatic",
112 "ไม่สมบูรณ์": "imperfective",
113 "คำอบุรุษกริยา": "impersonal",
114 "ในรูปเอกพจน์": "singular",
115 "ในรูปทวิพจน์": "dual",
116 "ในรูปพหูพจน์": "plural",
117 "ไม่มีชีวิต": "inanimate",
118 "ไม่ชี้เฉพาะ": "indefinite",
119 "อักษรย่อ": "initialism",
120 "อกรรม": "intransitive",
121 "สัทอักษรสากล": "IPA",
122 "เพศชาย": "masculine",
123 "เพศกลาง": "neuter",
124 "เปรียบเทียบไม่ได้": "not-comparable",
125 "เลียนเสียงธรรมชาติ": "onomatopoeic",
126 "จำนวนเชิงอันดับที่": "ordinal",
127 "พาร์ทิซิเพิล": "partitive",
128 "กรรมวาจก": "passive",
129 "สมบูรณ์": "perfect",
130 "พหูพจน์เท่านั้น": "plural-only",
131 "แสดงความเป็นเจ้าของ": "possessive",
132 "วลีภาคแสดง": "predicative",
133 "สะท้อน": "reflexive",
134 "เอกพจน์เท่านั้น": "singular-only",
135 "สภาว": "stative",
136 "สกรรม": "transitive",
137 "นับไม่ได้": "uncountable",
138 "โบราณ": "archaic",
139 "ภาษาเด็ก": "childish",
140 "ภาษาปาก": "colloquial",
141 "ล้าสมัย": "dated",
142 "นัยล้าสมัย": "dated",
143 "ดูหมิ่น": "derogatory",
144 "ภาษาถิ่น": "dialect",
145 "ในเชิงเปรียบเทียบ": "metaphoric",
146 "ทางการ": "formal",
147 "ขำขัน": "humorous",
148 "อติพจน์": "excessive",
149 "ไม่ทางการ": "informal",
150 "สแลงอินเทอร์เน็ต": ["Internet", "slang"],
151 "ไออาร์ซี": "IRC",
152 "ภาษาข่าว": "journalistic",
153 "ภาษาหนังสือ": "literary",
154 "คำสร้างใหม่": "neologism",
155 "ภาษาไม่มาตรฐาน": "nonstandard",
156 "เลิกใช้": "obsolete",
157 "ล่วงเกิน": "offensive",
158 "ร้อยกรอง": "poetic",
159 "สุภาพ": "polite",
160 "ไม่ควรใช้": "proscribed",
161 "พบได้ยาก": "rare",
162 # "ราชาศัพท์": "",
163 "สแลง": "slang",
164 # "ศัพท์เฉพาะ": "",
165 "หยาบคาย": "vulgar",
166 "กรีซโบราณ": "Ancient Greek",
167 "โรมโบราณ": "Ancient Rome",
168 "สะกดผิด": "misspelling",
169 # Template:zh-mw
170 # Module:zh/templates
171 "กั้น": "Gan",
172 "แคะ": "Hakka",
173 "จิ้น": "Jin",
174 # Template:ru-noun+
175 "ช.": "masculine",
176 "อชีว.": "inanimate",
177 "สัมพันธการก": "genitive",
178 "กรรตุการกพหูพจน์": ["nominative", "plural"],
179 "สัมพันธการกพหูพจน์": ["genitive", "plural"],
180 # Template:zh-forms
181 "ตัวเต็ม": "Traditional-Chinese",
182 "ตัวย่อ": "Simplified-Chinese",
183 "ตัวย่อรอบสอง": "Second-Round-Simplified-Chinese",
184 "รูปแบบอื่น": "alternative",
185 "obsolete": "obsolete",
186 # Template:zh-dial
187 "คลาสสิก": "Classical-Chinese",
188 "Written Vernacular Chinese": "Written-vernacular-Chinese",
189 "Written Standard Chinese": "Written-Standard-Chinese",
190 "จีนกลางตะวันออกเฉียงเหนือ": "Northeastern-Mandarin",
191 "จีนกลางแบบจี้หลู่": "Jilu-Mandarin",
192 "จีนกลางแบบเจียวเหลียว": "Jiaoliao-Mandarin",
193 "จีนกลาง": "Central-Plains-Mandarin",
194 "จีนกลางแบบหลันอิ๋น": "Lanyin-Mandarin",
195 "จีนกลางตะวันตกเฉียงใต้": "Southwestern-Mandarin",
196 "จีนกลางแบบเจียงหวย": "Jianghuai-Mandarin",
197 "ฮุ่ยโจว": "Huizhou",
198 "หมิ่นแบบผูเซียน": "Puxian-Min",
199 "หมิ่นตอนกลาง": "Central-Min",
200 "หมิ่นแบบจงซัน": "Zhongshan-Min",
201 "ผิงใต้": "Southern-Pinghua",
202 "ผิงเหนือ": "Northern-Pinghua",
203 # Template:en-noun
204 "พหูพจน์": "plural",
205 # Template:en-verb
206 "บุรุษที่สามเอกพจน์ปัจจุบันกาล": ["present", "singular", "third-person"],
207 "รูปกริยาขยายปัจจุบันกาล": ["participle", "present"],
208 "อดีตกาล": "past",
209 "รูปกริยาขยายอดีตกาล": ["participle", "past"],
210 # Template:en-adj
211 "ขั้นกว่า": "comparative",
212 "ขั้นสุด": "superlative",
213 # Template:en-pron
214 "ตัวกำหนดเจ้าของ": ["determiner", "possessive"],
215 "สรรพนามเจ้าของ": ["possessive", "pronoun"],
216 "สะท้อนเอกพจน์": ["reflexive", "singular"],
217 "สะท้อนพหูพจน์": ["reflexive", "plural"],
218 # Template:eo-head
219 "กรรมการกเอกพจน์": ["accusative", "singular"],
220 "กรรมการกพหูพจน์": ["accusative", "plural"],
221 # Template:nl-noun
222 "ตัวบอกความเล็ก": "diminutive",
223 # Template:fr-noun
224 "เพศชายพหูพจน์": ["masculine", "plural"],
225 "เพศหญิงพหูพจน์": ["feminine", "plural"],
226 # Template:es-adj
227 "เพศชายและเพศหญิงพหูพจน์": ["masculine", "feminine", "plural"],
228}
231TAGS = {**EXAMPLE_TAGS, **TRANSLATION_TAGS, **SOUND_TAGS, **LABEL_TAGS}
233TOPICS = {
234 # https://th.wiktionary.org/wiki/มอดูล:labels/data/topical
235 "การบัญชี": "accounting",
236 "สวนศาสตร์": "acoustics",
237 "อากาศยานศาสตร์": "aeronautics",
238 "เกษตรกรรม": "agriculture",
239 "อากาศยาน": "aircraft",
240 "การเล่นแร่แปรธาตุ": "alchemy",
241 "เครื่องดื่มแอลกอฮอล์": "alcohol",
242 "โรคพิษสุรา": "alcoholism",
243 "พีชคณิต": "algebra",
244 "เรขาคณิตเชิงพีชคณิต": "geometry",
245 "ทอพอโลยีเชิงพีชคณิต": "topology",
246 "แพทยศาสตร์ทางเลือก": "alternative-medicine",
247 "วิทยุสมัครเล่น": "radio",
248 "อเมริกันฟุตบอล": "football",
249 "เคมีวิเคราะห์": "chemistry",
250 "อนาธิปไตย": "anarchism",
251 "กายวิภาคศาสตร์": "anatomy",
252 "แอนิเมชัน": "anime",
253 "มานุษยวิทยา": "anthropology",
254 "วิทยาแมงมุม": "arachnology",
255 "โบราณคดี": "archaeology",
256 "การยิงธนู": "archery",
257 "สถาปัตยกรรม": "architecture",
258 "เลขคณิต": "arithmetic",
259 "ศิลปะ": "arts",
260 "ปัญญาประดิษฐ์": "AI",
261 "โหราศาสตร์": "astrology",
262 "อวกาศยานศาสตร์": "astronautics",
263 "ดาราศาสตร์": "astronomy",
264 "ฟิสิกส์ดาราศาสตร์": "astrophysics",
265 "กรีฑา": "athletics",
266 "ยานยนต์": "automotive",
267 "การบิน": "aviation",
268 "วิทยาแบคทีเรีย": "bacteria",
269 "แบดมินตัน": "badminton",
270 "กีฬาใช้บอล": "ball-games",
271 "การธนาคาร": "banking",
272 "เบสบอล": ["baseball", "ball-games"],
273 "บาสเกตบอล": ["basketball", "ball-games"],
274 "บีดีเอสเอ็ม": "BDSM",
275 "เบียร์": ["beer", "beverages"],
276 "ไบเบิล": ["biblical", "religion"],
277 "บิงโก": ["bingo", "games"],
278 "ชีวเคมี": "biochemistry",
279 "ชีววิทยา": "biology",
280 "เกมกระดาน": "board-games",
281 "พฤกษศาสตร์": "botany",
282 "มวย": ["boxing", "martial-arts"],
283 "ไบรโอโลยี": ["bryology", "botany"],
284 "ศาสนาพุทธ": ["Buddhism", "religion"],
285 "ธุรกิจ": "business",
286 "แคลคูลัส": ["calculus", "mathematics"],
287 "เกมไพ่": "card-games",
288 "หทัยวิทยา": ["cardiology", "medicine"],
289 "การทำแผนที่": ["cartography", "geography"],
290 # "ธาตุเคมี": "",
291 "เคมี": "chemistry",
292 "หมากรุกสากล": ["chess", "board-games"],
293 "ศาสนาคริสต์": "Christianity",
294 "การถ่ายภาพยนตร์": ["cinematography", "film"],
295 "ภาษาศาสตร์คอมพิวเตอร์": ["computing", "linguistics"],
296 "ภาษาคอมพิวเตอร์": "computing",
297 "วิทยาการคอมพิวเตอร์": "computing",
298 "การคอมพิวเตอร์": "computing",
299 "ศาสนาขงจื๊อ": "Confucianism",
300 "ตัจวิทยา": ["dermatology", "medicine"],
301 "เศรษฐศาสตร์": "economics",
302 "การศึกษา": "education",
303 "ไฟฟ้า": "electricity",
304 "แม่เหล็กไฟฟ้า": "electromagnetism",
305 "อิเล็กทรอนิกส์": ["electronics", "electricity"],
306 "จริยศาสตร์": ["ethics", "philosophy"],
307 "การออกกำลังกาย": ["exercise", "sports"],
308 "ภูมิศาสตร์": "geography",
309 "ธรณีวิทยา": "geology",
310 "เรขาคณิต": "geometry",
311 "กอล์ฟ": ["golf", "sports"],
312 "ไวยากรณ์": ["grammar", "linguistics"],
313 "ศาสนาฮินดู": ["Hinduism", "religion"],
314 "เทคโนโลยีสารสนเทศ": "computing",
315 "อินเทอร์เน็ต": "Internet",
316 "ศาสนาอิสลาม": "Islam",
317 "กฎหมาย": "law",
318 "ศัพทานุกรมศาสตร์": ["lexicography", "linguistics"],
319 "แอลจีบีที": "LGBT",
320 "ภาษาศาสตร์": "linguistics",
321 "วรรณกรรม": "literature",
322 "ตรรกศาสตร์": "logic",
323 "คณิตศาสตร์": "mathematics",
324 "แพทยศาสตร์": "medicine",
325 "อุตุนิยมวิทยา": "meteorology",
326 "การทหาร": "military",
327 "วิทยาแร่": "mineralogy",
328 "ราชาธิปไตย": "monarchy",
329 "ดนตรี": "music",
330 "นาโนเทคโนโลยี": ["nanotechnology", "engineering"],
331 "การเดินเรือ": "nautical",
332 "กษาปณวิทยา": ["numismatics", "hobbies"],
333 "โภชนาการ": "nutrition",
334 "ทัศนศาสตร์": "optics",
335 "พยาธิวิทยา": "pathology",
336 "เภสัชวิทยา": "pharmacology",
337 "ปรัชญา": "philosophy",
338 "สัทศาสตร์": "phonetics",
339 "สัทวิทยา": "phonology",
340 "คมีเชิงฟิสิกส์": "chemistry",
341 "ฟิสิกส์": "physics",
342 "สรีรวิทยา": "physiology",
343 "การเมือง": "politics",
344 "สื่อลามก": "pornography",
345 "การเขียนโปรแกรม": "programming",
346 "สัทสัมพันธ์": ["prosody", "phonology"],
347 "ศาสนา": "religion",
348 "วิทยาการหุ่นยนต์": ["robotics", "mechanical-engineering computing"],
349 "นิยายวิทยาศาสตร์": "science-fiction",
350 "วิทยาศาสตร์": "sciences",
351 "เพศวิถี": "sexuality",
352 # "การเดินเรือ": "",
353 "ซอกเกอร์": ["soccer", "ball-games"],
354 "สังคมศาสตร์": "social-science",
355 "ภาษาศาสตร์สังคม": ["sociolinguistics", "linguistics sociology"],
356 "สังคมวิทยา": "sociology",
357 "กีฬา": "sports",
358 "สถิติศาสตร์": "statistics",
359 "ศาสนาเต๋า": "Taoism",
360 "อนุกรมวิธาน": "taxonomy",
361 "เทคโนโลยี": "technology",
362 "ยูนิโคด": "Unicode",
363 "ผัก": ["vegetable", "food"],
364 "ไวน์": ["wine", "oenology"],
365 "สงครามโลกครั้งที่หนึ่ง": "World War I",
366 "สงครามโลกครั้งที่สอง": "World War II",
367 "พิษ": "poison",
368}
371def translate_raw_tags(data: WordEntry) -> None:
372 raw_tags = []
373 for raw_tag in data.raw_tags:
374 if raw_tag in TAGS and hasattr(data, "tags"):
375 tr_tag = TAGS[raw_tag]
376 if isinstance(tr_tag, str) and tr_tag not in data.tags:
377 data.tags.append(tr_tag)
378 elif isinstance(tr_tag, list):
379 for tag in tr_tag:
380 if tag not in data.tags: 380 ↛ 379line 380 didn't jump to line 379 because the condition on line 380 was always true
381 data.tags.append(tag)
382 elif raw_tag in TOPICS and hasattr(data, "topics"): 382 ↛ 383line 382 didn't jump to line 383 because the condition on line 382 was never true
383 topic = TOPICS[raw_tag]
384 if isinstance(topic, str):
385 data.topics.append(topic)
386 elif isinstance(topic, list):
387 data.topics.extend(topic)
388 else:
389 raw_tags.append(raw_tag)
390 data.raw_tags = raw_tags