Coverage for src/wiktextract/extractor/ku/tags.py: 88%

31 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-04 10:58 +0000

1from .models import WordEntry 

2 

3GENDER_NUMBER_TAGS = { 

4 # https://ku.wiktionary.org/wiki/Modul:gender_and_number 

5 "m": "feminine", 

6 "n": "masculine", 

7 "nt": "neuter", 

8 "g": "common-gender", 

9 "anim": "animate", 

10 "inan": "inanimate", 

11 "animal": "animal-not-person", 

12 "pers": "personal", 

13 "npers": "impersonal", 

14 "vir": "virile", 

15 "nvir": "nonvirile", 

16 "yj": "singular", 

17 "du": "dual", 

18 "pj": "plural", 

19 "impf": "imperfective", 

20 "pf": "perfective", 

21 "gh": "transitive", 

22 "ngh": "intransitive", 

23} 

24 

25TABLE_TAGS = { 

26 # Şablon:ku-tewîn-nav 

27 "Yekjimar": "singular", 

28 "Pirjimar": "plural", 

29 "Navkî": "nominative", 

30 "Îzafe": "construct", 

31 "Çemandî": "oblique", 

32 "Nîşandera çemandî": ["demonstrative", "oblique"], 

33 "Bangkirin": "vocative", 

34 "Bangkirî": "vocative", 

35 "Binavkirî": "definite", 

36 "Nebinavkirî": "indefinite", 

37 "Mê (yj.)": ["feminine", "singular"], 

38 "Nêr (yj.)": ["masculine", "singular"], 

39 "Mê û nêr (pj.)": ["feminine", "masculine", "plural"], 

40 # Şablon:ku-tew-nav 

41 "Mê": "feminine", 

42 "Nêr": "masculine", 

43 # Şablon:ku-tewîn-rd 

44 "Pozîtîv": "positive", 

45 "Komparatîv": "comparative", 

46 "Sûperlatîv": "superlative", 

47 # Şablon:ku-tewîn-lk 

48 "RP.\nNiha": "present", 

49 "Fermanî": "imperative", 

50 "RP.\nBoriya\nsade": "past", 

51 # Şablon:ku-tewandin 

52 "Dema niha": "present", 

53 "Dema borî": "past", 

54 "Reh": "root", 

55 "Raweya pêşkerî (daxuyanî) - Indicative": "indicative", 

56 "Dema niha - Present": "present", 

57 "Raboriya sade - Preterite\nDema boriya têdeyî": "past", 

58 "Erênî": "positive", 

59 "Neyînî": "negative", 

60 "Raboriya berdest - Imperfect\nÇîrokiya dema niha": "imperfect", 

61 "Raboriya dûr - Pluperfect\nÇirokiye boriya têdeyî": "pluperfect", 

62 "Dema bê - Future": "future", 

63 "Dahatiya pêş - Future perfect": ["future", "perfect"], 

64 "Raboriya dûdar - Perfect\nDema boriya dûdar": "perfect", 

65 "Çîrokiya boriya dûdar - Nonconfirmative pluperfect": [ 

66 "nonconfirmative", 

67 "pluperfect", 

68 ], 

69 # "Raweya xwestekî (bilanî, daxwazî) - Subjunctive": "subjunctive", 

70 "Dema nihaya xwestekî - Present subjunctive\nNihaya bilaniyê": [ 

71 "present", 

72 "subjunctive", 

73 ], 

74 "Dema boriya xwestekî - Preterite subjunctive": [ 

75 "preterite", 

76 "subjunctive", 

77 ], 

78 "Raboriya bilaniyê - Imperfect subjunctive": ["imperfect", "subjunctive"], 

79 "Raboriya dûr a bilaniyê - Pluperfect subjunctive": [ 

80 "pluperfect", 

81 "subjunctive", 

82 ], 

83 "Çîrokiya dema nihaya mercî - Present conditional": [ 

84 "present", 

85 "conditional", 

86 ], 

87 "Dema boriya mercî - Preterite conditional": ["preterite", "conditional"], 

88 "Raweya fermanî - Imperative": "imperative", 

89 "Standard": "standard", 

90} 

91 

92GLOSS_TAGS = { 

93 # Modul:ferhengok 

94 # Modul:ferhengok/dane 

95 "berfirehkirî": "broadly", 

96 # Modul:dara_kategoriyan/ferhengokkatbike/dane/ferhengok 

97 "dewleta Ewropayê": "Europe", 

98 "dewleta Asyayê": "Asia", 

99 "dewleta Afrîkayê": "Africa", 

100 "dewleta Amerîkaya Başûr": "South-America", 

101 "devokî": "dialectal", 

102 "formên kevnbûyî": "archaic", 

103 "hevdeng": "homophone", 

104 "japonî": "Japanese", 

105 "metonîm": "metonymically", 

106 "mîtolojiya ermenî": "Armenian", 

107 "mîtolojiya îranî": "Iranian", 

108 "mîtolojiya kurdî": "Kurdish", 

109 "mîtolojiya misrî": "Egyptian", 

110 "mîtolojiya yûnanî": "Greek", 

111 "nifir": "vulgar", 

112 "neolojîzm": "neologism", 

113 "niqteşanî": "punctuation", 

114 "na": "name", 

115 # Modul:dara kategoriyan/ferhengokkatbike/dane/rêzimanî 

116 "zimanê zarokan": "childish", 

117 "şaşnivîsî": "misspelling", 

118 "latînîkirin": "romanization", 

119 "palîndrom": "palindrome", 

120 "paşnav": "surname", 

121 "navê keçan": "name", 

122 "navê kesan": "name", 

123 "navê lawan": "name", 

124 # "rêziman": "lemmas", 

125 "dengê siriştî": "onomatopoeic", 

126 "argo": "slang", 

127 "argoya fandomê": "slang", 

128 # "jinkanî": "women's-speech", 

129 "artîkel": "article", 

130 "akronîm": "acronym", 

131 "baneşan": "interjection", 

132 # "bazinedaçek": "circumposition", 

133 "biwêjî": "idiomatic", 

134 "cînav": "pronoun", 

135 # "cotepeyv": "", 

136 "daçek": "prepositional", 

137 "girêdek": "conjunction", 

138 "gotinên pêşiyan": "proverb", 

139 "hejmar": "numeral", 

140 "hevok": "phrase", 

141 "hoker": "adverb", 

142 "neqiyasbar": "not-comparable", 

143 "kurtenav": "abbreviation", 

144 "kurtkirin": "contraction", 

145 "lêker": "verb", 

146 "Lêker": "verb", 

147 "navdêr": "noun", 

148 "Navdêr": "noun", 

149 "jimarbar": ["countable", "noun"], 

150 "nejimarbar": ["uncountable", "noun"], 

151 "navgir": "interfix", 

152 "paşdaçek": "postpositional", 

153 "paşgir": "suffix", 

154 "pêşdaçek": "prepositional", 

155 "pêşgir": "prefix", 

156 "pirtik": "particle", 

157 "reh": "root", 

158 "rengdêr": "adjective", 

159 "Rengdêr": "adjective", 

160 "sembol": "symbol", 

161 "serenav": "proper-noun", 

162 "tîp": "letter", 

163 "tewandin": "conjugative", 

164 "rehê lêkeran": ["verb", "root"], 

165 "rehê dema niha": ["present", "root"], 

166 "rehê dema borî": ["past", "root"], 

167 "partîsîp": "participle", 

168 "partîsîpa niha": ["present", "participle"], 

169 "partîsîpa borî": ["past", "participle"], 

170 "komparatîv": "comparative", 

171 "sûperlatîv": "superlative", 

172 "xweşbêjî": "euphemistic", 

173 "formên serenavan": ["proper-noun", "form-of"], 

174 "formên navdêran": ["noun", "form-of"], 

175 "formên cînavan": ["pronoun", "form-of"], 

176 "formên hokeran": ["adverb", "form-of"], 

177 "formên rengdêran": ["adjective", "form-of"], 

178 "formên lêkeran": ["verb", "form-of"], 

179 "awarte": ["irregular", "verb"], 

180 "gerguhêz": ["transitive", "verb"], 

181 "negerguhêz": ["intransitive", "verb"], 

182 "lêkerên biwêjî": ["phrasal", "verb"], 

183 "lêkerên biwêjî yên gerguhêz": ["transitive", "phrasal", "verb"], 

184 "lêkerên biwêjî yên negerguhêz": ["intransitive", "phrasal", "verb"], 

185 "lêkerên hevedudanî": ["compound", "verb"], 

186 "lêkerên hevedudanî yên gerguhêz": ["compound", "verb", "transitive"], 

187 "lêkerên hevedudanî yên negerguhêz": ["compound", "verb", "intransitive"], 

188 "lêkerên pêkhatî": ["compound", "verb"], 

189 "lêkerên pêkhatî yên gerguhêz": ["compound", "verb", "transitive"], 

190 "lêkerên pêkhatî yên negerguhêz": ["compound", "verb", "intransitive"], 

191 # "lêkerên xwerû": "proper-noun", 

192 "lêkerên xwerû yên gerguhêz": ["verb", "transitive"], 

193 "lêkerên xwerû yên negerguhêz": ["verb", "intransitive"], 

194 "serenavên mê": ["feminine", "proper-noun"], 

195 "rengdêrên mê": ["feminine", "adjective"], 

196 "navdêrên mê": ["feminine", "noun"], 

197 "cînavên mê": ["feminine", "pronoun"], 

198 "serenavên nêr": ["masculine", "proper-noun"], 

199 "rengdêrên nêr": ["masculine", "adjective"], 

200 "navdêrên nêr": ["masculine", "noun"], 

201 "cînavên nêr": ["masculine", "pronoun"], 

202 "serenavên nêtar": ["neuter", "proper-noun"], 

203 "rengdêrên nêtar": ["neuter", "adjective"], 

204 "navdêrên nêtar": ["neuter", "noun"], 

205 "cînavên nêtar": ["neuter", "pronoun"], 

206 "serenavên mê û nêr": ["feminine", "masculine", "proper-noun"], 

207 "navdêrên mê û nêr": ["feminine", "masculine", "noun"], 

208 "rengdêrên mê û nêr": ["feminine", "masculine", "adjective"], 

209 "cînavên mê û nêr": ["feminine", "masculine", "pronoun"], 

210 "serenavên giştî": ["general", "proper-noun"], 

211 "rengdêrên giştî": ["general", "adjective"], 

212 "navdêrên giştî": ["general", "noun"], 

213 "cînavên giştî": ["general", "pronoun"], 

214 "serenavên ku bi gelemperî mê ne": ["feminine", "proper-noun"], 

215 "rengdêrên ku bi gelemperî mê ne": ["feminine", "adjective"], 

216 "navdêrên ku bi gelemperî mê ne": ["feminine", "noun"], 

217 "cînavên ku bi gelemperî mê ne": ["feminine", "pronoun"], 

218 "serenavên ku bi gelemperî nêr in": ["masculine", "proper-noun"], 

219 "rengdêrên ku bi gelemperî nêr ne": ["masculine", "adjective"], 

220 "navdêrên ku bi gelemperî nêr ne": ["masculine", "noun"], 

221 "cînavên ku bi gelemperî nêr ne": ["masculine", "pronoun"], 

222 "serenavên ku bi gelemperî pirjimar in": ["plural", "proper-noun"], 

223 "rengdêrên ku bi gelemperî pirjimar ne": ["plural", "adjective"], 

224 "navdêrên ku bi gelemperî pirjimar ne": ["plural", "noun"], 

225 "cînavên ku bi gelemperî pirjimar ne": ["plural", "pronoun"], 

226 # Modul:dara_kategoriyan/ferhengokkatbike/dane/mane 

227 # "biçûkxister": "", 

228 "fermî": "formal", 

229 # "henekî": "", 

230 # "kêmtir": "", 

231 "kevnare": "archaic", 

232 "kêmpeyda": "rare", 

233 "kevnbûyî": "obsolete", 

234 "kolankî": "colloquial", 

235 "mecazî": "figurative", 

236 "nadir": "rare", 

237 "nefermî": "informal", 

238 # "qebe": "", 

239 "wêjeyî": "literary", 

240 # "xirab": "bad", 

241 "kurdî-erebî": "Kurdish-Arabic", 

242 "kurdî-krîlî": "Kurdish-Cyrillic", 

243} 

244 

245SOUND_TAGS = { 

246 "DYA": "USA", 

247 "Teksas": "Texas", 

248 "Berlîn": "Berlin", 

249 "Almanya": "Germany", 

250 "Connecticut": "Connecticut", 

251 "QY": "UK", 

252 "Başûrê Îngilistanê": "Southern-England", 

253 "Bidlîs": "Bitlis", 

254 "London": "London", 

255 "Awistirya": "Austria", 

256 "Îzmîr": "İzmir", 

257 "Tirkiye": "Turkey", 

258 "Awistralya": "Australia", 

259 "Lyon": "Lyon", 

260 "Fransa": "France", 

261 "Îran": "Iran", 

262 "Îtalya": "Italy", 

263 "Çîn": "China", 

264} 

265 

266TAGS = {**GENDER_NUMBER_TAGS, **TABLE_TAGS, **GLOSS_TAGS, **SOUND_TAGS} 

267 

268TOPICS = { 

269 # Modul:dara_kategoriyan/ferhengokkatbike/dane/ferhengok 

270 "ajal": "livestock", 

271 "aman": "kitchenware", 

272 "amûr": "tools", 

273 "anatomî": "anatomy", 

274 "antropolojî": "anthropology", 

275 "astrolojî": "astrology", 

276 "avjenî": ["swimming", "sports"], 

277 "astronomî": "astronomy", 

278 # "avahî û pêkhate": "Buildings and structures", 

279 # "avahî": "buildings", 

280 # "alavên malê": "home appliances", 

281 # "atmosfer": "atmosphere", 

282 "alava muzîkê": "music", 

283 "astronotîk": "astronautics", 

284 # "ba": "wind", 

285 "berhemên behrê": ["seafood", "cuisine"], 

286 "bajar": "cities", 

287 "balinde": "birds", 

288 "basketbol": ["basketball", "ball-games"], 

289 "bijîşkî": "medicine", 

290 "biyolojî": "biology", 

291 "boks": ["boxing", "martial-arts"], 

292 "buxik": ["insects", "entomology"], 

293 "behr": "seas", 

294 "berf": "snow", 

295 "bazarkarî": "marketing", 

296 "Cihûtî": "Judaism", 

297 "cilûberg": "clothing", 

298 "civak": "society", 

299 "cih": "places", 

300 "çand": "culture", 

301 "çandinî": "agriculture", 

302 "çek": "weaponry", 

303 "çiya": "mountains", 

304 "devkî": "oral", 

305 "dewleta Ewropayê": "countries", 

306 "dewleta Asyayê": "countries", 

307 "dewleta Afrîkayê": "countries", 

308 "dar": "trees", 

309 "dîn": "religion", 

310 "dîrok": "history", 

311 "dewlet": "countries", 

312 "dehsal": "decades", 

313 "dewleta Amerîkaya Başûr": "countries", 

314 "deryagerî": "nautical", 

315 "demsal": "seasons", 

316 "ekonomî": "economics", 

317 # "evîn": "love", 

318 # "element": "chemical elements", 

319 "erdnîgarî": "geography", 

320 # "emir": "age", 

321 "elektrîk": "electricity", 

322 "fêkî": "fruits", 

323 "felsefe": "philosophy", 

324 "femînîzm": "feminism", 

325 "fizîk": "physics", 

326 "futbol": "football", 

327 "fîzyolojî": "physiology", 

328 "guhandar": "mammals", 

329 # "gund": "villages", 

330 # "hest": "emotions", 

331 # "hiş": "mind", 

332 # "hemû mijar": "list of topics", 

333 "herêm": "region", 

334 "hewa": "weather", 

335 "hiqûq": "law", 

336 "hewavanî": "aviation", 

337 "heywan": "animals", 

338 "Hinduîzm": ["hinduism", "religion"], 

339 "huner": "arts", 

340 "informatîk": "information-technology", 

341 "înternet": "Internet", 

342 "Îslam": ["Islam", "religion"], 

343 "îdeolojî": "ideology", 

344 # "jîndar": "lifeforms", 

345 "jeolojî": "geology", 

346 # "kar": "work", 

347 "karsazî": "business", 

348 "kîmya": "chemistry", 

349 "kişik": ["chess", "board-games"], 

350 "kompûternasî": "computing", 

351 # "kulîlk": "flowers", 

352 # "kes": "people", 

353 # "lîsteya ferhengan": "All topics", 

354 "leşkerî": "military", 

355 "lîstik": "games", 

356 "lîstikên vîdeoyî": "video-games", 

357 "lîstika zarokan": "children's-games", 

358 "leş": ["body", "anatomy"], 

359 "mitfax": "kitchen", 

360 # "mînak": "example", 

361 # "mal": "home", 

362 # "malbat": "family", 

363 "masî": ["fish", "zoology"], 

364 "matematîk": "mathematics", 

365 # "mehên salê": "months", 

366 "mekanîk": "mechanics", 

367 "Mesîhî": "Christianity", 

368 # "meslek": "occupations", 

369 "metrolojî": "metrology", 

370 "mîtolojî": "mythology", 

371 "mîtolojiya ermenî": "mythology", 

372 "mîtolojiya îranî": "mythology", 

373 "mîtolojiya kurdî": "mythology", 

374 "mîtolojiya misrî": "mythology", 

375 "mîtolojiya yûnanî": "mythology", 

376 "mobîlya": "furniture", 

377 "mode": "fashion", 

378 "muzîk": "music", 

379 # "omirov": "human", 

380 "makîne": "machining", 

381 "mîmarî": "architecture", 

382 # "malper": "websites", 

383 # "mirin": "death", 

384 "muzîsyen": "music", 

385 # "nifş": "generations", 

386 "navçe": "districts", 

387 "Navçe": "districts", 

388 "navgîn": "vehicles", 

389 "nivîsîn": "writing", 

390 "nexweşî": "pathology", 

391 "neqliyat": "transport", 

392 # "ode": "rooms", 

393 "optîk": "optics", 

394 # "octanes": "oceans", 

395 "otomotîv": "automotive", 

396 "parzemîn": "continents", 

397 "parêzgeh": "provinces", 

398 "perwerde": "education", 

399 "psîkolojî": "psychology", 

400 "psîkyatrî": "psychiatry", 

401 "por": "hairdressing", 

402 # "Pêxemberên Îslamê": "islamic prophets", 

403 # "pûrizm": "", 

404 "rêzimanî": "grammar", 

405 "remldarî": "divination", 

406 "reng": "color", 

407 "riwek": "botany", 

408 "riweknasî": "botany", 

409 "robar": "rivers", 

410 "Robar": "rivers", 

411 "sosyolojî": "sociology", 

412 "salnameya koçî": "Islamic months", 

413 "sebze": "vegetable", 

414 "siyaset": "politics", 

415 "spor": "sports", 

416 # "sal": "years", 

417 "sûc": "crime", 

418 "sîstemên nivîsînê": "writing", 

419 "Şahname": "shahnameh", 

420 "şîranî": "desserts", 

421 "teknolojî": "technology", 

422 "tenîs": ["tennis", "sports"], 

423 "teolojî": "theology", 

424 "tilyak": "drugs", 

425 # "termên teqwîmê": "calendar terms", 

426 "toksîkolojî": "toxicology", 

427 "televizyon": "television", 

428 "vexwarin": "beverages", 

429 "wêje": "literature", 

430 "wênegirî": "photography", 

431 # "www": "", 

432 "xweza": "nature", 

433 "xwarin û vexwarin": ["food", "beverages"], 

434 "xişok": "reptiles", 

435 "xwarin": "food", 

436 "zanist": "sciences", 

437 "zeman": "time", 

438 "Zerdeştî": ["Zoroastrianism", "religion"], 

439 "ziman": "language", 

440 "zimannasî": "linguistics", 

441 "zoolojî": "zoology", 

442 "zanistên sepandî": "applied-sciences", 

443 "Herêm": "region", 

444} 

445 

446 

447PRONOUN_TAGS = { 

448 # Template:ku-tewîn-lk 

449 # https://en.wikipedia.org/wiki/Kurdish_grammar 

450 "ez": ["first-person", "singular"], 

451 "tu": ["second-person", "singular"], 

452 "ew": ["third-person", "singular"], 

453 "em, hûn, ew": ["first-person", "second-person", "third-person", "plural"], 

454 "min": ["first-person", "singular"], 

455 "te": ["second-person", "singular"], 

456 "wê/wî": ["third-person", "singular"], 

457 "me, we, wan": ["first-person", "second-person", "third-person", "plural"], 

458} 

459 

460 

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

462 raw_tags = [] 

463 for raw_tag in data.raw_tags: 

464 has_tag = False 

465 for index, tag_dict in enumerate([TAGS, PRONOUN_TAGS]): 

466 if raw_tag in tag_dict and hasattr(data, "tags"): 

467 tr_tag = tag_dict[raw_tag] 

468 if isinstance(tr_tag, str): 

469 data.tags.append(tr_tag) 

470 elif isinstance(tr_tag, list): 470 ↛ 472line 470 didn't jump to line 472 because the condition on line 470 was always true

471 data.tags.extend(tr_tag) 

472 if index == 0: 

473 has_tag = True 

474 if raw_tag in TOPICS and hasattr(data, "topics"): 

475 topic = TOPICS[raw_tag] 

476 if isinstance(topic, str): 476 ↛ 478line 476 didn't jump to line 478 because the condition on line 476 was always true

477 data.topics.append(topic) 

478 elif isinstance(topic, list): 

479 data.topics.extend(topic) 

480 has_tag = True 

481 if not has_tag: 

482 raw_tags.append(raw_tag) 

483 data.raw_tags = raw_tags