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