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

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 "การแผลงเป็น\nอักษรโรมัน": "romanization", # Template:th-pron 

32 "ไพบูลย์พับบลิชชิง": "Paiboon", 

33 "ราชบัณฑิตยสภา": "Royal-Institute", 

34 "การแบ่งพยางค์": "phoneme", 

35 "US": "US", 

36 "UK": "UK", 

37} 

38 

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} 

137 

138 

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

140 

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} 

277 

278 

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