Coverage for src / wiktextract / extractor / th / tags.py: 75%

26 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-12 08:09 +0000

1from .models import WordEntry 

2 

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} 

10 

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} 

29 

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 # Template:vi-ipa 

90 "ฮานอย": "Hà-Nội", 

91 "เว้": "Huế", 

92 "นครโฮจิมินห์": "Saigon", 

93 # Template:hi-ipa 

94 "เดลี": "Delhi", 

95 # Template:sa-ipa 

96 "พระเวท": "Vedic", 

97 "สันสกฤตคลาสสิก": "Classical-Sanskrit", 

98} 

99 

100LABEL_TAGS = { 

101 # https://th.wiktionary.org/wiki/มอดูล:labels/data 

102 "คำย่อ": "abbreviation", 

103 "อาการนาม": "abstract-noun", 

104 "อักษรอ่านย่อ": "acronym", 

105 "กรรตุวาจก": "active", 

106 "สกรรม, อกรรม": "ambitransitive", 

107 "มีชีวิต": "animate", 

108 "บอกเล่า": "indicative", 

109 "สมมุติ": "subjunctive", 

110 "สั่ง": "imperative", 

111 "คำกริยานุเคราะห์": "auxiliary", 

112 "จำนวนเชิงการนับ": "cardinal", 

113 "สมุหนาม": "collective", 

114 "เพศรวม": "common", 

115 "เปรียบเทียบได้": "comparable", 

116 "เชื่อม": "copulative", 

117 "นับได้": "countable", 

118 "ทวิกรรม": "ditransitive", 

119 "เพศหญิง": "feminine", 

120 "สำนวน": "idiomatic", 

121 "ไม่สมบูรณ์": "imperfective", 

122 "คำอบุรุษกริยา": "impersonal", 

123 "ในรูปเอกพจน์": "singular", 

124 "ในรูปทวิพจน์": "dual", 

125 "ในรูปพหูพจน์": "plural", 

126 "ไม่มีชีวิต": "inanimate", 

127 "ไม่ชี้เฉพาะ": "indefinite", 

128 "อักษรย่อ": "initialism", 

129 "อกรรม": "intransitive", 

130 "สัทอักษรสากล": "IPA", 

131 "เพศชาย": "masculine", 

132 "เพศกลาง": "neuter", 

133 "เปรียบเทียบไม่ได้": "not-comparable", 

134 "เลียนเสียงธรรมชาติ": "onomatopoeic", 

135 "จำนวนเชิงอันดับที่": "ordinal", 

136 "พาร์ทิซิเพิล": "partitive", 

137 "กรรมวาจก": "passive", 

138 "สมบูรณ์": "perfect", 

139 "พหูพจน์เท่านั้น": "plural-only", 

140 "แสดงความเป็นเจ้าของ": "possessive", 

141 "วลีภาคแสดง": "predicative", 

142 "สะท้อน": "reflexive", 

143 "เอกพจน์เท่านั้น": "singular-only", 

144 "สภาว": "stative", 

145 "สกรรม": "transitive", 

146 "นับไม่ได้": "uncountable", 

147 "โบราณ": "archaic", 

148 "ภาษาเด็ก": "childish", 

149 "ภาษาปาก": "colloquial", 

150 "ล้าสมัย": "dated", 

151 "นัยล้าสมัย": "dated", 

152 "ดูหมิ่น": "derogatory", 

153 "ภาษาถิ่น": "dialect", 

154 "ในเชิงเปรียบเทียบ": "metaphoric", 

155 "ทางการ": "formal", 

156 "ขำขัน": "humorous", 

157 "อติพจน์": "excessive", 

158 "ไม่ทางการ": "informal", 

159 "สแลงอินเทอร์เน็ต": ["Internet", "slang"], 

160 "ไออาร์ซี": "IRC", 

161 "ภาษาข่าว": "journalistic", 

162 "ภาษาหนังสือ": "literary", 

163 "คำสร้างใหม่": "neologism", 

164 "ภาษาไม่มาตรฐาน": "nonstandard", 

165 "เลิกใช้": "obsolete", 

166 "ล่วงเกิน": "offensive", 

167 "ร้อยกรอง": "poetic", 

168 "สุภาพ": "polite", 

169 "ไม่ควรใช้": "proscribed", 

170 "พบได้ยาก": "rare", 

171 # "ราชาศัพท์": "", 

172 "สแลง": "slang", 

173 # "ศัพท์เฉพาะ": "", 

174 "หยาบคาย": "vulgar", 

175 "กรีซโบราณ": "Ancient Greek", 

176 "โรมโบราณ": "Ancient Rome", 

177 "สะกดผิด": "misspelling", 

178 # Template:zh-mw 

179 # Module:zh/templates 

180 "กั้น": "Gan", 

181 "แคะ": "Hakka", 

182 "จิ้น": "Jin", 

183 # Template:ru-noun+ 

184 "ช.": "masculine", 

185 "อชีว.": "inanimate", 

186 "สัมพันธการก": "genitive", 

187 "กรรตุการกพหูพจน์": ["nominative", "plural"], 

188 "สัมพันธการกพหูพจน์": ["genitive", "plural"], 

189 # Template:zh-forms 

190 "ตัวเต็ม": "Traditional-Chinese", 

191 "ตัวย่อ": "Simplified-Chinese", 

192 "ตัวย่อรอบสอง": "Second-Round-Simplified-Chinese", 

193 "รูปแบบอื่น": "alternative", 

194 "obsolete": "obsolete", 

195 # Template:zh-dial 

196 "คลาสสิก": "Classical-Chinese", 

197 "Written Vernacular Chinese": "Written-vernacular-Chinese", 

198 "Written Standard Chinese": "Written-Standard-Chinese", 

199 "จีนกลางตะวันออกเฉียงเหนือ": "Northeastern-Mandarin", 

200 "จีนกลางแบบจี้หลู่": "Jilu-Mandarin", 

201 "จีนกลางแบบเจียวเหลียว": "Jiaoliao-Mandarin", 

202 "จีนกลาง": "Central-Plains-Mandarin", 

203 "จีนกลางแบบหลันอิ๋น": "Lanyin-Mandarin", 

204 "จีนกลางตะวันตกเฉียงใต้": "Southwestern-Mandarin", 

205 "จีนกลางแบบเจียงหวย": "Jianghuai-Mandarin", 

206 "ฮุ่ยโจว": "Huizhou", 

207 "หมิ่นแบบผูเซียน": "Puxian-Min", 

208 "หมิ่นตอนกลาง": "Central-Min", 

209 "หมิ่นแบบจงซัน": "Zhongshan-Min", 

210 "ผิงใต้": "Southern-Pinghua", 

211 "ผิงเหนือ": "Northern-Pinghua", 

212 # Template:en-noun 

213 "พหูพจน์": "plural", 

214 # Template:en-verb 

215 "บุรุษที่สามเอกพจน์ปัจจุบันกาล": ["present", "singular", "third-person"], 

216 "รูปกริยาขยายปัจจุบันกาล": ["participle", "present"], 

217 "อดีตกาล": "past", 

218 "รูปกริยาขยายอดีตกาล": ["participle", "past"], 

219 "อดีตกาลและรูปกริยาขยายอดีตกาล": ["participle", "past"], 

220 # Template:en-adj 

221 "ขั้นกว่า": "comparative", 

222 "ขั้นสุด": "superlative", 

223 # Template:en-pron 

224 "ตัวกำหนดเจ้าของ": ["determiner", "possessive"], 

225 "สรรพนามเจ้าของ": ["possessive", "pronoun"], 

226 "สะท้อนเอกพจน์": ["reflexive", "singular"], 

227 "สะท้อนพหูพจน์": ["reflexive", "plural"], 

228 # Template:eo-head 

229 "กรรมการกเอกพจน์": ["accusative", "singular"], 

230 "กรรมการกพหูพจน์": ["accusative", "plural"], 

231 # Template:nl-noun 

232 "ตัวบอกความเล็ก": "diminutive", 

233 # Template:fr-noun 

234 "เพศชายพหูพจน์": ["masculine", "plural"], 

235 "เพศหญิงพหูพจน์": ["feminine", "plural"], 

236 # Template:es-adj 

237 "เพศชายและเพศหญิงพหูพจน์": ["masculine", "feminine", "plural"], 

238 # มอดูล:Jpan-headword 

239 "สกรรมหรืออกรรม": ["transitive", "intransitive"], 

240 "ต้นเค้าศัพท์": "stem", 

241 "โกดัง": "godan", 

242 "อิจิดัง": "ichidan", 

243 "ซูรุ": "suru", 

244 "คูรุ": "kuru", 

245 "-อิ": "-i", 

246 "-นะ": "-na", 

247 "โยดัง": "yodan", 

248 "นิดัง": "nidan", 

249 "-ริ": "-ri", 

250 "-เซะ": "-se", 

251 "-โกะ": "-ko", 

252 "-ง": "-n", 

253 "-นาริ": "-nari", 

254 "-ตาริ": "-tari", 

255 "-กุ": "-ku", 

256 "-ชิกุ": "-shiku", 

257 "-กะ": "-ka", 

258 "adnominal": "adnominal", 

259 "adverbial": "adverbial", 

260 # Template:ko-noun 

261 "ฮันกึล": "hangeul", 

262 "ฮันจา": "hanja", 

263 # Template:ja-kanjitab 

264 "คีวจิไต": "kyūjitai", 

265 # Template:hi-noun 

266 "การสะกดภาษาอูรดู": "Urdu", 

267 "เป็นทางการ": "formal", 

268} 

269 

270 

271TAGS = {**EXAMPLE_TAGS, **TRANSLATION_TAGS, **SOUND_TAGS, **LABEL_TAGS} 

272 

273TOPICS = { 

274 # https://th.wiktionary.org/wiki/มอดูล:labels/data/topical 

275 "การบัญชี": "accounting", 

276 "สวนศาสตร์": "acoustics", 

277 "อากาศยานศาสตร์": "aeronautics", 

278 "เกษตรกรรม": "agriculture", 

279 "อากาศยาน": "aircraft", 

280 "การเล่นแร่แปรธาตุ": "alchemy", 

281 "เครื่องดื่มแอลกอฮอล์": "alcohol", 

282 "โรคพิษสุรา": "alcoholism", 

283 "พีชคณิต": "algebra", 

284 "เรขาคณิตเชิงพีชคณิต": "geometry", 

285 "ทอพอโลยีเชิงพีชคณิต": "topology", 

286 "แพทยศาสตร์ทางเลือก": "alternative-medicine", 

287 "วิทยุสมัครเล่น": "radio", 

288 "อเมริกันฟุตบอล": "football", 

289 "เคมีวิเคราะห์": "chemistry", 

290 "อนาธิปไตย": "anarchism", 

291 "กายวิภาคศาสตร์": "anatomy", 

292 "แอนิเมชัน": "anime", 

293 "มานุษยวิทยา": "anthropology", 

294 "วิทยาแมงมุม": "arachnology", 

295 "โบราณคดี": "archaeology", 

296 "การยิงธนู": "archery", 

297 "สถาปัตยกรรม": "architecture", 

298 "เลขคณิต": "arithmetic", 

299 "ศิลปะ": "arts", 

300 "ปัญญาประดิษฐ์": "AI", 

301 "โหราศาสตร์": "astrology", 

302 "อวกาศยานศาสตร์": "astronautics", 

303 "ดาราศาสตร์": "astronomy", 

304 "ฟิสิกส์ดาราศาสตร์": "astrophysics", 

305 "กรีฑา": "athletics", 

306 "ยานยนต์": "automotive", 

307 "การบิน": "aviation", 

308 "วิทยาแบคทีเรีย": "bacteria", 

309 "แบดมินตัน": "badminton", 

310 "กีฬาใช้บอล": "ball-games", 

311 "การธนาคาร": "banking", 

312 "เบสบอล": ["baseball", "ball-games"], 

313 "บาสเกตบอล": ["basketball", "ball-games"], 

314 "บีดีเอสเอ็ม": "BDSM", 

315 "เบียร์": ["beer", "beverages"], 

316 "ไบเบิล": ["biblical", "religion"], 

317 "บิงโก": ["bingo", "games"], 

318 "ชีวเคมี": "biochemistry", 

319 "ชีววิทยา": "biology", 

320 "เกมกระดาน": "board-games", 

321 "พฤกษศาสตร์": "botany", 

322 "มวย": ["boxing", "martial-arts"], 

323 "ไบรโอโลยี": ["bryology", "botany"], 

324 "ศาสนาพุทธ": ["Buddhism", "religion"], 

325 "ธุรกิจ": "business", 

326 "แคลคูลัส": ["calculus", "mathematics"], 

327 "เกมไพ่": "card-games", 

328 "หทัยวิทยา": ["cardiology", "medicine"], 

329 "การทำแผนที่": ["cartography", "geography"], 

330 # "ธาตุเคมี": "", 

331 "เคมี": "chemistry", 

332 "หมากรุกสากล": ["chess", "board-games"], 

333 "ศาสนาคริสต์": "Christianity", 

334 "การถ่ายภาพยนตร์": ["cinematography", "film"], 

335 "ภาษาศาสตร์คอมพิวเตอร์": ["computing", "linguistics"], 

336 "ภาษาคอมพิวเตอร์": "computing", 

337 "วิทยาการคอมพิวเตอร์": "computing", 

338 "การคอมพิวเตอร์": "computing", 

339 "ศาสนาขงจื๊อ": "Confucianism", 

340 "ตัจวิทยา": ["dermatology", "medicine"], 

341 "เศรษฐศาสตร์": "economics", 

342 "การศึกษา": "education", 

343 "ไฟฟ้า": "electricity", 

344 "แม่เหล็กไฟฟ้า": "electromagnetism", 

345 "อิเล็กทรอนิกส์": ["electronics", "electricity"], 

346 "จริยศาสตร์": ["ethics", "philosophy"], 

347 "การออกกำลังกาย": ["exercise", "sports"], 

348 "ภูมิศาสตร์": "geography", 

349 "ธรณีวิทยา": "geology", 

350 "เรขาคณิต": "geometry", 

351 "กอล์ฟ": ["golf", "sports"], 

352 "ไวยากรณ์": ["grammar", "linguistics"], 

353 "ศาสนาฮินดู": ["Hinduism", "religion"], 

354 "เทคโนโลยีสารสนเทศ": "computing", 

355 "อินเทอร์เน็ต": "Internet", 

356 "ศาสนาอิสลาม": "Islam", 

357 "กฎหมาย": "law", 

358 "ศัพทานุกรมศาสตร์": ["lexicography", "linguistics"], 

359 "แอลจีบีที": "LGBT", 

360 "ภาษาศาสตร์": "linguistics", 

361 "วรรณกรรม": "literature", 

362 "ตรรกศาสตร์": "logic", 

363 "คณิตศาสตร์": "mathematics", 

364 "แพทยศาสตร์": "medicine", 

365 "อุตุนิยมวิทยา": "meteorology", 

366 "การทหาร": "military", 

367 "วิทยาแร่": "mineralogy", 

368 "ราชาธิปไตย": "monarchy", 

369 "ดนตรี": "music", 

370 "นาโนเทคโนโลยี": ["nanotechnology", "engineering"], 

371 "การเดินเรือ": "nautical", 

372 "กษาปณวิทยา": ["numismatics", "hobbies"], 

373 "โภชนาการ": "nutrition", 

374 "ทัศนศาสตร์": "optics", 

375 "พยาธิวิทยา": "pathology", 

376 "เภสัชวิทยา": "pharmacology", 

377 "ปรัชญา": "philosophy", 

378 "สัทศาสตร์": "phonetics", 

379 "สัทวิทยา": "phonology", 

380 "คมีเชิงฟิสิกส์": "chemistry", 

381 "ฟิสิกส์": "physics", 

382 "สรีรวิทยา": "physiology", 

383 "การเมือง": "politics", 

384 "สื่อลามก": "pornography", 

385 "การเขียนโปรแกรม": "programming", 

386 "สัทสัมพันธ์": ["prosody", "phonology"], 

387 "ศาสนา": "religion", 

388 "วิทยาการหุ่นยนต์": ["robotics", "mechanical-engineering computing"], 

389 "นิยายวิทยาศาสตร์": "science-fiction", 

390 "วิทยาศาสตร์": "sciences", 

391 "เพศวิถี": "sexuality", 

392 # "การเดินเรือ": "", 

393 "ซอกเกอร์": ["soccer", "ball-games"], 

394 "สังคมศาสตร์": "social-science", 

395 "ภาษาศาสตร์สังคม": ["sociolinguistics", "linguistics sociology"], 

396 "สังคมวิทยา": "sociology", 

397 "กีฬา": "sports", 

398 "สถิติศาสตร์": "statistics", 

399 "ศาสนาเต๋า": "Taoism", 

400 "อนุกรมวิธาน": "taxonomy", 

401 "เทคโนโลยี": "technology", 

402 "ยูนิโคด": "Unicode", 

403 "ผัก": ["vegetable", "food"], 

404 "ไวน์": ["wine", "oenology"], 

405 "สงครามโลกครั้งที่หนึ่ง": "World War I", 

406 "สงครามโลกครั้งที่สอง": "World War II", 

407 "พิษ": "poison", 

408} 

409 

410 

411def translate_raw_tags(data: WordEntry) -> None: 

412 raw_tags = [] 

413 for raw_tag in data.raw_tags: 

414 if raw_tag in TAGS and hasattr(data, "tags"): 

415 tr_tag = TAGS[raw_tag] 

416 if isinstance(tr_tag, str) and tr_tag not in data.tags: 

417 data.tags.append(tr_tag) 

418 elif isinstance(tr_tag, list): 

419 for tag in tr_tag: 

420 if tag not in data.tags: 420 ↛ 419line 420 didn't jump to line 419 because the condition on line 420 was always true

421 data.tags.append(tag) 

422 elif raw_tag in TOPICS and hasattr(data, "topics"): 422 ↛ 423line 422 didn't jump to line 423 because the condition on line 422 was never true

423 topic = TOPICS[raw_tag] 

424 if isinstance(topic, str): 

425 data.topics.append(topic) 

426 elif isinstance(topic, list): 

427 data.topics.extend(topic) 

428 else: 

429 raw_tags.append(raw_tag) 

430 data.raw_tags = raw_tags