Coverage for src / wiktextract / extractor / el / tags.py: 83%

34 statements  

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

1"""TAGS 

2 

3The strings in lists on the right-hand side here should be *shared* tags 

4between different edition implementations. `valid_tags` is a dictionary 

5of these tags (and can be expanded if necessary, although it is unlikely 

6to be needed anymore because we have a lot of them), with some metadata 

7in the value used in the English mainline extractor. 

8 

9Otherwise, the implementation of tags is a translation effort: when this 

10edition of Wiktionary says 'x', what tags does that refer to? 

11""" 

12 

13from .models import Form, Linkage, Sense, WordEntry 

14 

15# Tags used for modern Greek verb tables. 

16# 

17# Includes other verb related tags that may appear in headers etc. 

18# 

19# Some of the translations are from: 

20# * Greek: An Essential Grammar (Routledge Essential Grammars) 

21# 

22# * Reference: 

23# https://el.wiktionary.org/wiki/Κατηγορία:Πρότυπα_κλίσης_ρημάτων_(νέα_ελληνικά) 

24# 

25# * Standard table: 

26# https://el.wiktionary.org/wiki/ψάχνω 

27# * Non-standard table (relatively frequent): 

28# https://el.wiktionary.org/wiki/αναφωνώ which follows 

29# https://el.wiktionary.org/wiki/Πρότυπο:el-κλίσ-'λαλώ' 

30# * Others: 

31# https://el.wiktionary.org/wiki/τρώω 

32# FIX: 

33# * Users wrongly putting noun inflections in a Κλήση section 

34# https://el.wiktionary.org/wiki/δισεκατομμυριούχος 

35verb_table_tags_base: dict[str, list[str]] = { 

36 # Persons & numbers 

37 "α' ενικ.": ["first-person", "singular"], 

38 "β' ενικ.": ["second-person", "singular"], 

39 "γ' ενικ.": ["third-person", "singular"], 

40 "α' πληθ.": ["first-person", "plural"], 

41 "β' πληθ.": ["second-person", "plural"], 

42 "γ' πληθ.": ["third-person", "plural"], 

43 "α' πρόσωπο": ["first-person"], 

44 "β' πρόσωπο": ["second-person"], 

45 "γ' πρόσωπο": ["third-person"], 

46 "εγώ": ["first-person", "singular"], 

47 "εσύ": ["second-person", "singular"], 

48 "αυτός": ["third-person", "singular"], 

49 "εμείς": ["first-person", "plural"], 

50 "εσείς": ["second-person", "plural"], 

51 "αυτοί": ["third-person", "plural"], 

52 "(εσύ)": ["second-person", "singular"], 

53 "(εσείς)": ["second-person", "plural"], 

54 # Aspect groups 

55 # NOTE: redundant within most subcategories but needed to distinguish: 

56 # υποτακτική/προστακτική. 

57 # NOTE: The above distinction was deemed less important than being precise 

58 # over the main, most used forms, and so, these groups are ignored. 

59 # It also has the advantage of syncing standard and non-standard tables. 

60 "εξακολουθητικοί χρόνοι": [], # ["imperfective"], 

61 "συνοπτικοί χρόνοι": [], # ["perfective"], 

62 "συντελεσμένοι χρόνοι": [], # ["perfect"], 

63 "συντελεσμένοι χρόνοι (β΄ τύποι)": [ 

64 # "perfect", 

65 "type-b", 

66 ], 

67 "συντελεσμένοι χρόνοι β΄ (μεταβατικοί)": [ 

68 # "perfect", 

69 "type-b", 

70 "transitive", 

71 ], 

72 "συντελεσμένοι χρόνοι β΄ (αμετάβατοι)": [ 

73 # "perfect", 

74 "type-b", 

75 "intransitive", 

76 ], 

77 # Basic tenses / aspects 

78 "ενεστώτας": ["present"], 

79 "ενεστώτα": ["present"], 

80 "πρτ": ["imperfect"], 

81 "παρατατικός": ["imperfect"], 

82 "αόρ": ["aorist"], 

83 "αόριστος": ["aorist"], 

84 # Future 

85 "εξακολουθητικός μέλλοντας": ["future", "imperfect"], 

86 "εξ. μέλλ.": ["future", "imperfect"], 

87 "συνοπτ. μέλλ.": ["future"], 

88 "στιγμιαίος μέλλοντας": ["future"], # στιγμιαίος = συνοπτικός 

89 "στ.μέλλ": ["future"], 

90 "συντελ. μέλλ.": ["future", "perfect"], 

91 "συντελεσμένος μέλλοντας α'": ["future", "perfect", "type-a"], 

92 # Perfect subtypes 

93 "παρακείμενος": ["perfect"], 

94 "παρακείμενος α'": ["perfect", "type-a"], 

95 "υπερσυντέλικος": ["pluperfect"], 

96 "υπερσυντέλικος α'": ["pluperfect", "type-a"], 

97 # Forms / moods 

98 "υποτακτική": ["subjunctive"], 

99 "προστακτική": ["imperative"], 

100 "μετοχή": ["participle"], 

101 "μτχ.": ["participle"], 

102 # παθητική μετοχή παρακειμένου 

103 "μτχ.π.π": ["passive", "participle"], 

104 "μτχ.π.ε": ["active", "participle"], 

105 "μετοχή (ενεστώτας)": ["participle", "present"], 

106 "απαρέμφατο": ["infinitive"], 

107 # Voices 

108 "ενεργ.:": ["active"], 

109 "παθητική φωνή": ["passive"], 

110 "παθ.φωνή": ["passive"], 

111 "στην παθητική φωνή": ["passive"], 

112 "παθητικό": ["passive"], 

113 # ["passive-normally"] not valid, maybe add it similar to plural-normally 

114 "συνήθως στην παθητική φωνή": [], 

115 "π.αόρ": ["passive", "aorist"], 

116 "χωρίς παθητική φωνή": [], # passive-only is not valid (ADD IT?) 

117 # Others (τρώω table) 

118 "προσωπικές εγκλίσεις": [], # (noise) personal-moods 

119 "απρόσωπες εγκλίσεις": ["impersonal"], # impersonal-moods 

120 "μονολεκτικοί χρόνοι": [], # ["simple-tenses"], # no να/θα/έχει 

121 "περιφραστικοί χρόνοι": [], # ["periphrastic"], # with να/θα/έχει 

122 "απαρέμφατο (αόριστος)": ["infinitive", "aorist"], 

123} 

124 

125# https://el.wiktionary.org/wiki/free 

126english_tables_tags = { 

127 # Comparative 

128 # lit. "degree of comparison" but degree is a category already 

129 "παραθετικά": [], 

130 "θετικός": ["positive"], 

131 "συγκριτικός": ["comparative"], 

132 "υπερθετικός": ["superlative"], 

133 # Others 

134 "γ΄ ενικό ενεστώτα": ["third-person", "singular", "present"], 

135 "παθητική μετοχή": ["passive", "participle"], 

136 "ενεργητική μετοχή": ["active", "participle"], 

137 "μεταβατικό": ["transitive"], 

138 "αμετάβατο": ["intransitive"], 

139} 

140 

141# https://el.wiktionary.org/wiki/balai 

142esperanto_tables_tags = { 

143 "μέλλοντας": ["future"], 

144 "μορφή": [], # form is not valid 

145 "υποθετική": ["hypothetical"], 

146} 

147 

148turkish_tables_tags = { 

149 # 1. https://el.wiktionary.org/wiki/un 

150 "... μου": ["first-person", "singular"], 

151 "... σου": ["second-person", "singular"], 

152 "... του": ["third-person", "singular"], 

153 "... μας": ["first-person", "plural"], 

154 "... σας": ["second-person", "plural"], 

155 "... τους": ["third-person", "plural"], 

156 "είμαι": ["first-person", "singular", "present"], 

157 "είσαι": ["second-person", "singular", "present"], 

158 "είναι": ["third-person", "singular", "plural", "present"], 

159 "είμαστε": ["first-person", "plural", "present"], 

160 "είστε": ["second-person", "plural", "present"], 

161 "ήμουν": ["first-person", "singular", "past"], 

162 "ήσουν": ["second-person", "singular", "past"], 

163 "ήταν": ["third-person", "singular", "plural", "past"], 

164 "ήμασταν": ["first-person", "plural", "past"], 

165 "ήσασταν": ["second-person", "plural", "past"], 

166 # 2. https://el.wiktionary.org/wiki/içmek 

167 "o": ["third-person", "singular"], 

168 "sen": ["second-person", "singular"], 

169 "ben": ["first-person", "singular"], 

170 "onlar": ["third-person", "plural"], 

171 "siz": ["second-person", "plural"], 

172 "biz": ["first-person", "plural"], 

173 "άρνηση": ["negative"], 

174 "θετικός - ερώτηση": ["positive", "interrogative"], 

175 "άρνηση - ερώτηση": ["negative", "interrogative"], 

176 "ενεστώς απλός": ["present"], 

177 "παρατατικός (i was watching)": ["imperfect"], 

178 "απροσδιόριστος αόριστος": ["indefinite", "past"], 

179 "απροσδιόριστος παρατατικός": ["indefinite", "imperfect"], 

180 'past future ("i was going to watch")': ["past-future"], 

181 'unwitnessed past future ("i was supposedly going to watch")': [ 

182 "past-future" 

183 ], 

184 '"i used to watch" / "i would watch"': ["imperfect"], 

185 '"i used to watch" / "i would watch" (unwitnessed form)': ["imperfect"], 

186 "παθητικό απαρέμφατο": ["passive", "infinitive"], 

187 "ονομαστικές παράγωγες (isim-fiil)": ["noun"], 

188 "παθητικές ονομαστικές παραγωγές": ["passive", "noun"], 

189 "επιθετικές παράγωγες (sıfat-fiil)": ["adjective"], 

190 "επιρρηματικές παράγωγες (zarf-fiil)": ["adverb"], 

191 # 3. https://el.wiktionary.org/wiki/yemek 

192 "διαρκής παροντικός (ενεστώτας)": ["present"], 

193 "απλός παροντικός": ["present"], 

194 "διαρκής παρελθοντικός (παρατατικός)": ["imperfect"], 

195 "καταφατικοί τύποι": ["positive"], 

196 "αρνητικοί τύποι": ["negative"], 

197 "ερωτηματικοί τύποι": ["interrogative"], 

198 "ερωτημ-αρνητ. τύποι": ["interrogative", "negative"], 

199 # 4. https://el.wiktionary.org/wiki/gitmek 

200 "pozitiv - izrični oblik": ["positive"], 

201 "pozitiv - upitni oblik": ["positive", "interrogative"], 

202 "negativ - izrični oblik": ["negative"], 

203 "negativ - upitni oblik": ["negative", "interrogative"], 

204} 

205 

206# https://el.wiktionary.org/wiki/pompier 

207romanian_tables_tags = { 

208 "οριστική άρθρωση": ["definite"], 

209 "αόριστη άρθρωση": ["indefinite"], 

210} 

211 

212# https://el.wiktionary.org/wiki/afrikanisch 

213german_tables_tags = { 

214 "με οριστικό άρθρο": ["definite"], 

215 "με αόριστο άρθρο": ["indefinite"], 

216 "ένδειξη ευγένειας": ["polite"], # Sie 

217 "όλα τα γένη": ["masculine", "feminine", "neuter"], 

218 "ως κατηγορούμενο": ["predicative"], 

219} 

220 

221# https://el.wiktionary.org/wiki/os 

222spanish_tables_tags = { 

223 "1ο": ["first-person"], 

224 "2ο": ["second-person"], 

225 "3ο": ["third-person"], 

226 # "https://el.wiktionary.org/wiki/entender" 

227 "υποτακτική (subjuntivo)": ["subjunctive"], 

228 "οριστική (indicativo)": ["indicative"], 

229 "αυτοπαθής": ["reflexive"], 

230 "τονιζόμενη": [], # accent/accented is not valid 

231 # https://el.wiktionary.org/wiki/llegar 

232 "yo": ["first-person", "singular"], 

233 "tú": ["second-person", "singular"], 

234 "él, ella, ello, usted": ["third-person", "singular"], 

235 "usted": ["third-person", "singular"], 

236 "nosotros, nosotras": ["first-person", "plural"], 

237 "vosotros, vosotras": ["second-person", "plural"], 

238 "ellos, ellas, ustedes": ["third-person", "singular"], 

239 "ustedes": ["third-person", "plural"], 

240 "παρατατικός (ra)": ["imperfect"], 

241 "παρατατικός (se)": ["imperfect"], 

242 "καταφατικά": ["positive"], 

243 "δυνητική": ["potential"], 

244} 

245 

246# https://el.wiktionary.org/wiki/biały 

247polish_tables_tags = { 

248 "αρσενικό έμψυχο": ["masculine", "animate"], 

249 "αρσενικό άψυχο": ["masculine", "inanimate"], 

250} 

251 

252# https://el.wiktionary.org/wiki/любить 

253russian_tables_tags = { 

254 "α' πρόσ.": ["first-person", "singular"], 

255 "β' πρόσ.": ["second-person", "singular"], 

256 "γ' πρόσ.": ["third-person", "singular"], 

257 "μη συνοπτική όψη1": ["imperfective"], # συνοπτικό perfective 

258} 

259 

260# croître (παραδοσιακή ορθογραφία) 

261# croitre (ορθογραφία του 1990) 

262french_tags = { 

263 "(παραδοσιακή ορθογραφία)": [], # normal spelling 

264 "παραδοσιακή ορθογραφία": [], 

265 "(ορθογραφία του 1990)": ["dated"], # outdated-spelling is not valid 

266 "ορθογραφία του 1990": ["dated"], 

267 # Old French (fro) 

268 "cas sujet": ["subjective"], # subjective case 

269 "cas régime": ["objective"], # objective case 

270} 

271 

272# https://el.wiktionary.org/wiki/πιστεύω 

273# https://el.wiktionary.org/wiki/δύω 

274ancient_greek_tables_tags = { 

275 "ἐγὼ": ["first-person", "singular"], 

276 "ἐγώ": ["first-person", "singular"], 

277 "σὺ": ["first-person", "singular"], 

278 "σύ": ["first-person", "singular"], 

279 "οὗτος": ["first-person", "singular"], 

280 "οὖτος": ["first-person", "singular"], # spirit the other way 

281 "ἡμεῖς": ["first-person", "singular"], 

282 "ὑμεῖς": ["first-person", "singular"], 

283 "οὗτοι": ["first-person", "singular"], 

284 # 

285 "οριστική": ["indicative"], 

286 "ευκτική": ["optative"], 

287 "ονοματικοί τύποι": [], # EXTRA SPACES 

288 "ενεργητικός ενεστώτας": ["active", "present"], 

289 "ενεργητικός παρακείμενος": ["active", "perfect"], 

290 "ενεργητικός αόριστος α'": ["active", "aorist", "type-a"], 

291 "ενεργητικός αόριστος β'": ["active", "aorist", "type-b"], 

292 "ενεργητικός παρατατικός": ["active", "imperfect"], 

293 "ενεργητικός υπερσυντέλικος": ["active", "pluperfect"], 

294 "ενεργητικός μέλλοντας": ["active", "future"], 

295 "ονοματικοί τύποι": [], # ? 

296 "2o δυϊκός": ["second-person", "dual"], 

297 "3o δυϊκός": ["third-person", "dual"], 

298 "μετοχή : αρσενικό - θηλυκό - ουδέτερο": ["participle"], # BAD PARSING 

299 "στη μέση φωνή": ["middle"], # middle voice 

300 "μέσος μέλλοντας": ["middle", "future"], 

301 "μέσος αόριστος α'": ["middle", "aorist", "type-a"], 

302 "μέσος αόριστος β'": ["middle", "aorist", "type-b"], 

303 "μέσος / παθητικός ενεστώτας": ["mediopassive", "present"], 

304 "μέσος / παθητικός παρακείμενος": ["mediopassive", "perfect"], 

305 "μέσος / παθητικός παρατατικός": ["mediopassive", "imperfect"], 

306 "μέσος / παθητικός υπερσυντέλικος": ["mediopassive", "pluperfect"], 

307 "1η συζυγία - μεσοπαθητικός ενεστώτας": ["mediopassive", "present"], 

308 "2η συζυγία - ενεργητικός ενεστώτας": ["active", "present"], 

309 "παθητικός αόριστος α'": ["passive", "aorist", "type-a"], 

310 "παθητικός μέλλοντας α'": ["passive", "future", "type-a"], 

311 # https://el.wiktionary.org/wiki/δορυφόρος 

312 # Dual terms 

313 "κλητική ὦ!": ["vocative"], 

314 "ονομ-αιτ-κλ": ["nominative", "accusative", "vocative"], 

315 "γεν-δοτ": ["genitive", "dative"], 

316} 

317 

318ancient_greek_tags = { 

319 "δοτική": ["dative"], 

320 "αφαιρετική": ["ablative"], 

321 "τοπική": ["locative"], 

322 "δυϊκός": ["dual"], 

323 "γενική δοτική": ["genitive", "dative"], 

324 "εφελκυστικό νι": [], # "ephelcystic nu" is not valid 

325} 

326 

327# Tags need capitalization 

328transliteration_tags = { 

329 "λατινικοί χαρακτήρες": ["Latin", "transliteration"], 

330 "λατινικό αλφάβητο": ["Latin", "transliteration"], 

331 "αραβικό αλφάβητο": ["Arabic", "transliteration"], 

332 "κυριλλικοί χαρακτήρες": ["Cyrillic", "transliteration"], 

333 "yañalif": ["Yañalif", "transliteration"], 

334} 

335 

336zones_tags = { 

337 "ηπα": ["US"], 

338 "ηβ": ["UK"], 

339 "αμερικανικά αγγλικά": ["US", "English"], 

340 "βρετανικά αγγλικά": ["UK", "English"], 

341 "αμερικανική σημασία": ["US"], # US-meaning is not valid 

342 "βρετανική σημασία": ["UK"], 

343 "αυστραλία": ["Australia"], 

344 "γαλλία": ["France"], 

345} 

346 

347# TODO: Ideally empty. Move things around. 

348other_tags = { 

349 "σπάνιο": ["rare"], 

350 "συνήθως": [], # usually 

351 "εξαιρετικά": [], # very; usu. εξαιρετικά σπάνιο: very rare 

352 "όπως ενδεικτικά": [], # ~roughly means "for example..." 

353 "και τα παράγωγά του": [], # ~roughly means related 

354 "αρνητικά": ["negative"], 

355 "συγγενικά": [], # related 

356 "συνηρημένο": ["contracted"], # "βροντάω (συνηρημένο βροντῶ)" 

357 "πριν από φωνήεν": ["before-vowel"], 

358 "μόνο πριν από το ουσιαστικό": ["before-noun"], 

359 "βιβλιογραφική παραπομπή": [], # bibliographic reference 

360 "rōmaji": [], # romaji is not valid 

361 # gia fors 

362 "για πράγματα": [], # ~for things 

363 "για ζώα": [], # ~for animals 

364 "για πρόσωπο": [], # ~for people 

365 "για πρόσωπα": [], # ~for people 

366 "για άνθρωπο": [], # ~for people 

367 "για ανθρώπους": [], # ~for people 

368 # POS 

369 "ουσιαστικό": ["noun"], 

370 "ελλειπτικό ουσιαστικό": ["noun", "defective"], 

371 "ρήμα": ["verb"], 

372 "ελλειπτικό ρήμα": ["verb", "defective"], 

373 "αποθετικό ρήμα": ["deponent", "verb"], 

374 "αποθετικό": ["deponent"], 

375 "απρόσωπο ρήμα": ["verb", "impersonal"], 

376 "απρόσωπο": ["impersonal"], 

377 "επίρρημα": ["adverb"], 

378 "τοπικό επίρρημα": ["adverb"], # topical is not valid 

379 "χρονικό επίρρημα": ["adverb"], 

380 "τροπικό επίρρημα": ["adverb"], # tropic/tropical are not valid 

381 "τροπικό": [], 

382 "ποσοτικό επίρρημα": ["adverb"], 

383 "επίθετο": ["adjective"], 

384 "επιτατικό επίθετο": ["adjective"], 

385 "σε επιθετική λειτουργία": ["adjective"], 

386 "λειτουργία": [], # BAD PARSING of the above 

387 "επιθετική": ["adjective"], 

388 "ως επίθετο": ["adjective"], 

389 "επώνυμο": ["surname"], 

390 "επώνυμα": ["surname"], 

391 "επωνυμία": ["surname"], 

392 "θεωνύμιο": [], # God's name 

393 "προσωπική αντωνυμία": ["pronoun"], # really personal pronoun 

394 "αναφορική αντωνυμία": ["pronoun"], 

395 "δεικτική αντωνυμία": ["pronoun"], 

396 "οριστική αντωνυμία": ["pronoun", "definite"], 

397 "αόριστη αντωνυμία": ["pronoun", "indefinite"], 

398 "επιμεριστική αντωνυμία": ["pronoun", "distributive"], 

399 "ακρωνύμιο": ["acronym"], 

400 "αρκτικόλεξο": ["initialism"], 

401 "υποκοριστικό": ["diminutive"], 

402 "χαϊδευτικό": ["diminutive"], 

403 "σύνθετα": ["compound"], 

404 "συντομογραφία": ["abbreviation"], 

405 "γράμμα": ["letter"], 

406 "περιληπτικό": ["collective"], 

407 "οργανική": ["instrumental"], 

408 "γραφή": [], # writing is not valid 

409 "προσφώνηση": [], # really salutation 

410 # 

411 "άκλιτο": ["invariable"], 

412 "και άκλιτο": ["invariable"], 

413 "κτητική": ["possessive"], 

414 "μετρήσιμο": ["countable"], 

415 "μη μετρήσιμο": ["uncountable"], 

416 "μετρήσιμο και μη μετρήσιμο": ["countable", "uncountable"], 

417 "μεταβατικό και αμετάβατο": ["transitive", "intransitive"], 

418 "μεταβατικό & αμετάβατο": ["transitive", "intransitive"], 

419 "ουσιαστικοποιημένο": [], # really nominalized 

420 "αστερισμός": [], # constellation is not valid 

421 # Zones 

422 "τοπωνύμιο": ["toponymic"], # toponym/placename are not valid 

423 "πατριδωνυμικό": ["demonym"], 

424 "πρώην ονομασία": [], # naming is not valid (~city naming) 

425 # Styles / register 

426 "κυριολεκτικά": ["literally"], 

427 "μεταφορικά": ["figuratively"], # or metaphorically 

428 "κυριολεκτικά και μεταφορικά": ["literally", "figuratively"], 

429 "συνεκδοχικά": ["figuratively"], 

430 "καταχρηστικά": ["figuratively"], 

431 "κατ’ επέκταση": ["broadly"], 

432 "κατ' επέκταση": ["broadly"], 

433 "ειδικότερα": ["especially"], 

434 "γενικότερα": ["general"], # generally is not valid 

435 "αρχική σημασία": [], # originally is not valid 

436 # 

437 "λόγιο": ["formal"], 

438 "επίσημο": ["formal"], 

439 "λογοτεχνικό": ["literary"], 

440 "ποιητικός τύπος": ["poetic"], 

441 "παρωχημένο": ["dated"], 

442 "αρχαιοπρεπές": ["archaic"], 

443 "απαρχαιωμένο": ["obsolete"], 

444 "καθομιλουμένη": ["colloquial"], 

445 "χυδαίο": ["vulgar"], 

446 "λαϊκό": ["vulgar"], 

447 "λαϊκότροπο": ["vulgar"], 

448 "αργκό": ["slang"], # argot is not valid 

449 "διαδικτυακή αργκό": ["internet-slang"], 

450 "στρατιωτική αργκό": ["slang"], # military-slang is not valid 

451 "οικείο": ["familiar"], 

452 "προφορικό": ["familiar"], # oral is not valid 

453 "μειωτικό": ["offensive"], 

454 "υβριστικό": ["offensive"], 

455 "σκωπτικό": ["offensive"], 

456 "κακόσημο": ["disapproving"], 

457 "νεολογισμός": ["neologism"], 

458 "ιδιωματικό": ["idiomatic"], 

459 "και σήμερα σε χρήση ως ιδιωματικό": ["idiomatic"], 

460 "ιδιωματισμός": ["idiomatic"], # idiom is not valid 

461 "ανεπίσημο": ["informal"], 

462 "ειρωνικό": ["ironic"], 

463 # Greeks 

464 "καθαρεύουσα": ["Katharevousa"], 

465 "καθαρεύουσα (κατά την αρχαία κλίση)": ["Katharevousa"], 

466 "ελληνιστική κοινή": ["Koine"], 

467 "δημοτική": ["Demotic"], 

468 "ελληνιστική σημασία": ["Hellenistic"], 

469 "κρητικά": ["Cretan"], 

470 "κυπριακά": ["Cypriot"], 

471 "ιωνικός τύπος": ["Ionic"], 

472 "στην ιωνική διάλεκτο": ["Ionic"], 

473 "επικός τύπος": ["Epic"], 

474 "δωρικός τύπος": ["Doric"], 

475 "αιολικός τύπος": ["Aeolian"], 

476 "αττικός τύπος": ["Attic"], 

477} 

478 

479topic_map: dict[str, list[str]] = { 

480 "επάγγελμα": ["business"], # really profession 

481 "οικονομία": ["business"], # really economy 

482 "λογιστική": ["accounting"], 

483 "στατιστική": ["statistics"], 

484 "βιολογία": ["biology"], 

485 "βοτανική": ["botany"], 

486 "ιατρική": ["medicine"], 

487 "φαρμακευτική": ["medicine"], # pharmaceutical is not valid 

488 "ανατομία": ["anatomy"], 

489 "φυσιολογία": ["physiology"], 

490 "χημεία": ["chemistry"], 

491 "βιοχημεία": ["biochemistry"], 

492 "θρησκεία": ["religion"], 

493 "χριστιανισμός": ["Christianity"], 

494 "ισλαμισμός": ["Islam"], 

495 "μυθολογία": ["mythology"], 

496 "ελληνική μυθολογία": ["mythology", "Greek"], 

497 "σκανδιναβική μυθολογία": ["mythology", "Scandinavian"], 

498 "γραμματική": ["grammar"], 

499 "ιστορία": ["history"], 

500 "μουσική": ["music"], 

501 "μουσικό όργανο": ["music"], # music instrument 

502 "εργαλείο": ["tools"], 

503 "μαθηματικά": ["mathematics"], 

504 "πολιτική": ["politics"], 

505 "αθλητισμός": ["athletics"], 

506 "τεχνολογία": ["technology"], 

507 "φυσική": ["physics"], 

508 "ζωολογία": ["zoology"], 

509 "ιχθυολογία": ["ichthyology"], 

510 "γεωγραφία": ["geography"], 

511 "γεωμετρία": ["geometry"], 

512 "γεωλογία": ["geology"], 

513 "γεωπονία": ["agriculture"], # agronomy is not valid 

514 "φιλολογία": ["philology"], 

515 "γλώσσα": ["language"], 

516 "γλωσσολογία": ["linguistics"], 

517 "φωνητική": ["phonetics"], 

518 "αστρονομία": ["astronomy"], 

519 "ηλεκτρολογία": ["electricity"], # branch of physics 

520 "ηλεκτρονική": ["electronics"], 

521 "τηλεπικοινωνίες": ["telecommunications"], 

522 "αντικειμενοστρεφής προγραμματισμός": ["programming"], # OOP 

523 "προγραμματισμός": ["programming"], 

524 "λογισμικό": ["software"], 

525 "πληροφορική": ["computing"], 

526 "επιστήμη υπολογιστών": ["computing"], # computer science 

527 "υλικό υπολογιστή": ["computing"], # computer material 

528 "βάσεις δεδομένων": ["computing"], # database is not valid 

529 "δίκτυο υπολογιστών": ["computing"], # network is not valid 

530 "διαδίκτυο": ["Internet"], 

531 "φιλοσοφία": ["philosophy"], 

532 "ψυχολογία": ["psychology"], 

533 "ψυχιατρική": ["psychiatry"], 

534 "αρχιτεκτονική": ["architecture"], 

535 "οικοδομική": ["construction"], 

536 "μετεωρολογία": ["meteorology"], 

537 "ενδυμασία": ["clothing"], 

538 "υπόδηση": ["clothing"], # really footwear 

539 "ύφασμα": ["clothing"], # really fabric/textile 

540 "αρχαιολογία": ["archeology"], 

541 "ορυκτολογία": ["mineralogy"], 

542 "εκπαίδευση": ["education"], 

543 "τέχνη": ["art"], 

544 "γλυπτική": ["art"], # sculpting is not valid 

545 "ζωγραφική": ["art"], # painting is not valid 

546 "λογοτεχνία": ["literature"], 

547 "θέατρο": ["theater"], 

548 "χορός": ["dance"], 

549 "φωτογραφία": ["photography"], 

550 "κινηματογράφος": ["film"], 

551 "λογική": ["logic"], 

552 "επιστήμη": ["science"], 

553 "μηχανολογία": ["mechanical-engineering"], 

554 "τυπογραφία": ["typography"], 

555 "επιδημιολογία": ["epidemiology"], 

556 "οικολογία": ["ecology"], 

557 "κοινωνιολογία": ["sociology"], 

558 "ανθρώπινο σώμα": ["body"], 

559 "λαογραφία": ["folklore"], 

560 "μέσο μεταφορών": ["transport"], 

561 "αστρολογία": ["astrology"], 

562 "εραλδική": ["heraldry"], 

563 "ταξινομία": ["taxonomy"], 

564 "μεταλλουργία": ["metallurgy"], 

565 # 

566 "εθνωνύμιο": ["countries"], # ethnonym is not valid 

567 "εθνικό όνομα": ["countries"], # ethnonym is not valid 

568 "χώρα": ["countries"], 

569 "πόλη": ["cities"], 

570 "χρώμα": ["color"], 

571 # 

572 "μονάδα μέτρησης": ["units-of-measure"], 

573 "μετρική": ["units-of-measure"], 

574 "παραμύθι": ["fantasy"], # tale/fairy-tale are not valid 

575 "χαρτοπαίγνιο": ["card-games"], 

576 "παιχνίδι": ["games"], 

577 "σκάκι": ["board-games"], # chess 

578 "κεραμική": ["ceramics"], 

579 "άνεμος": ["weather"], # wind is not valid 

580 # 

581 "αξίωμα": [], # office/rank is not valid 

582 "οικογένεια": [], # family is not valid 

583 "νόμισμα": [], # coin/currency are not valid 

584 # Time 

585 "ημέρα": ["time"], # day is not valid 

586 "μήνας": ["time"], # month is not valid 

587 # Food 

588 "τρόφιμο": ["food"], 

589 "φαγητά": ["food"], 

590 "ποτό": ["food"], # drink is not valid 

591 "γαστρονομία": ["food"], # gastronomy is not valid 

592 "φρούτο": ["food"], # fruit is not valid 

593 "όσπριο": ["food"], # legume is not valid 

594 "γλυκό": ["food"], # sweet is not valid 

595 "τυρί": ["food"], # cheese is not valid 

596 "λαχανικό": ["vegetable"], 

597 "αλιεία": ["fishing"], 

598 "ψάρι": ["fish"], 

599 "μαλάκιο": ["fish"], # mollusc is not valid 

600 "ελληνική ποικιλία αμπέλου": ["wine"], 

601 "μαγειρική": ["cooking"], 

602 "κουζινικά": ["cooking"], # kitchen is not valid 

603 # 

604 "δέντρο": [], # tree is not valid 

605 "φυτό": [], # really plant 

606 "λουλούδι": [], # really flower 

607 "ζώο": [], # animal is not valid 

608 "θηλαστικό ζώο": ["mammals"], 

609 "πτηνό": [], # really bird 

610 "ερπετό": [], # reptile is not valid 

611 "φίδι": ["snakes"], 

612 "εντομολογία": ["entomology"], 

613 "έντομο": ["insects"], 

614 # 

615 "στρατιωτικός βαθμός": ["military"], 

616 "οπλισμός": ["weapon"], 

617 # 

618 "ναυτικός όρος": ["nautical"], 

619 "ναυπηγικός όρος": ["nautical"], 

620 "νομικός όρος": ["law"], 

621 "στρατιωτικός όρος": ["military"], 

622 "αεροπορικός όρος": ["aerospace"], 

623 "εκκλησιαστικός όρος": ["religion"], 

624} 

625 

626# TODO: 

627# This booms somewhere in the parsing 

628# (να, ας, αν, ίσως κλπ) γ' ενικό υποτακτικής αορίστου του ρήματος εντάσσω 

629# 

630# TO FIX LATER 

631DONTCARES = { 

632 ":": [], 

633 "να": [], 

634 "ας": [], 

635 "αν": [], 

636 "ίσως κλπ": [], 

637 "οι δεύτεροι άτονοι τύποι είναι εγκλιτικοί": [], 

638 "επική κλίση οι διαφορετικοί τύποι, με έντονα γράμματα": [], 

639 "ελληνιστική κοινή (αρχαία κλίση)δε μαρτυρείται δυϊκός αριθμός": [], 

640 "όταν ακολουθεί όνομα, η οξεία γίνεται βαρεία . • σημειώνεται η προσωδία του α εκεί που είναι μακρό": [], 

641 "δωρική κλίση οι διαφορετικοί τύποι, με έντονα γράμματα": [], 

642 "χωρίς άρθρο, συγκριτικός βαθμός με το άρθρο, σχετικός υπερθετικός βαθμός": [], 

643 "κλιτικοί τύποι από την αρχαία κλίση": [], # from βπ template for grc 

644 "παθητικού": [], # BAD PARSING 

645 "παρακειμένου": [], # BAD PARSING 

646 "σημειώνεται η προσωδία του α εκεί που είναι μακρό": [], 

647 "1η συζυγία - μεσοπαθητικός ενεστώτας (αποθετικό ρήμα)": [], 

648 "κλίση -ος, -α, -ον & σπανιότερα θηλυκό σε -η": [], 

649 "χωρίς άρθρο": [], 

650 "χωρίς": [], 

651 "κλίση χωρίς άρθρο": [], 

652 "χωρίς παραθετικά": [], 

653 "και": [], 

654 "του": [], 

655 "δείτε": [], 

656 "δείτε την έκφραση": [], 

657 "όπως": [], 

658 "στο": [], 

659 "τη λέξη": [], 

660 "τις λέξεις": [], 

661 "με": [], 

662 "σε": [], 

663 "ή": [], 

664 "η": [], 

665 "το": [], 

666 "+ να": [], 

667 "+ θα": [], 

668 # Bad page: https://el.wiktionary.org/wiki/enketi 

669 "ρήμα {{{1}}}i": ["verb"], 

670 # 

671 # BAD TABLE PARSING 

672 # 

673 # https://el.wiktionary.org/wiki/ὁ 

674 "γένη πτώσεις": [], 

675 "τῶ": [], 

676 "τώς": [], 

677 "τάν (ᾱ)": [], 

678 # https://el.wiktionary.org/wiki/με 

679 "πρόσωπα πτώσεις": [], 

680} 

681 

682tag_map: dict[str, list[str]] = { 

683 **DONTCARES, 

684 **verb_table_tags_base, 

685 **english_tables_tags, 

686 **esperanto_tables_tags, 

687 **turkish_tables_tags, 

688 **romanian_tables_tags, 

689 **german_tables_tags, 

690 **spanish_tables_tags, 

691 **polish_tables_tags, 

692 **russian_tables_tags, 

693 **french_tags, 

694 **ancient_greek_tables_tags, 

695 **ancient_greek_tags, 

696 **transliteration_tags, 

697 **zones_tags, 

698 **other_tags, 

699 # Gender 

700 "αρσενικό": ["masculine"], 

701 "θηλυκό": ["feminine"], 

702 "ουδέτερο": ["neuter"], 

703 "αρσενικό & θηλυκό": ["masculine", "feminine"], 

704 "αρσενικό ή θηλυκό": ["masculine", "feminine"], 

705 "αρσενικό ή ουδέτερο": ["masculine", "neuter"], 

706 "αρσενικό θηλυκό ουδέτερο": ["masculine", "feminine", "neuter"], 

707 "ουδέτερο στον ενικό": [], # neuter-when-singular not valid 

708 "ουδέτερο στον πληθυντικό": [], # idem, not valid 

709 "αρσενικό στον πληθυντικό": [], # masculine-when-plural not valid 

710 "θηλυκό στον ενικό": [], # feminine-when-singular not valid 

711 # Number 

712 "ενικός": ["singular"], 

713 "ενικός (singular)": ["singular"], 

714 "πληθυντικός": ["plural"], 

715 "πληθυντικός (plural)": ["plural"], 

716 "μόνο στον ενικό": ["singular-only"], 

717 "μόνο στον πληθυντικό": ["plural-only"], 

718 "ο αρχαίος τύπος, μόνο στον πληθυντικό": ["plural-only"], 

719 "μόνο πληθυντικός": ["plural-only"], 

720 "μόνο ενικός": ["singular-only"], 

721 "στον ενικό": ["singular"], 

722 "στον πληθυντικό": ["plural"], 

723 "συνήθως στον πληθυντικό": ["plural-normally"], 

724 "συνήθως στον ενικό": ["singular-normally"], 

725 "συνήθως ενικός": ["singular-normally"], 

726 # Case 

727 "ονομαστική": ["nominative"], 

728 "γενική": ["genitive"], 

729 "γενική:": ["genitive"], 

730 "αιτιατική": ["accusative"], 

731 "κλητική": ["vocative"], 

732 "ονομαστική αιτιατική": ["nominative", "accusative"], 

733 # Others 

734 "αόριστο": ["indefinite"], 

735 "οριστικό": ["definite"], 

736} 

737 

738 

739Taggable = WordEntry | Form | Sense | Linkage 

740"""An object with raw_tags, tags and topics attributes.""" 

741 

742 

743def translate_raw_tags(taggable: Taggable) -> None: 

744 """Translate raw_tags to tags/topics, preserving raw_tags. 

745 

746 This is a bit different from other extractors in order to type check. 

747 

748 INVARIANT: taggable's tags/topics should **remain** unique. 

749 If they were not unique before, there are no guarantees. 

750 

751 Use: 

752 # Apply to an entire WordEntry 

753 >>> translate_raw_tags(word_entry) 

754 

755 # Apply to each Form in a WordEntry 

756 >>> for form in word_entry.forms: 

757 ... translate_raw_tags(form) 

758 

759 # Apply to a list of Form objects 

760 >>> for form in form_list: 

761 ... translate_raw_tags(form) 

762 """ 

763 for raw_tag in taggable.raw_tags: 

764 clean_raw_tag = raw_tag.replace("\n", " ").lower() 

765 tags = tag_map.get(clean_raw_tag) 

766 if tags is not None: 

767 for tag in tags: 

768 if tag not in taggable.tags: 

769 taggable.tags.append(tag) 

770 else: 

771 topics = topic_map.get(clean_raw_tag) 

772 if topics is not None: 772 ↛ 773line 772 didn't jump to line 773 because the condition on line 772 was never true

773 for topic in topics: 

774 if topic not in taggable.topics: 

775 taggable.topics.append(topic)