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
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-12 08:09 +0000
1"""TAGS
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.
9Otherwise, the implementation of tags is a translation effort: when this
10edition of Wiktionary says 'x', what tags does that refer to?
11"""
13from .models import Form, Linkage, Sense, WordEntry
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}
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}
141# https://el.wiktionary.org/wiki/balai
142esperanto_tables_tags = {
143 "μέλλοντας": ["future"],
144 "μορφή": [], # form is not valid
145 "υποθετική": ["hypothetical"],
146}
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}
206# https://el.wiktionary.org/wiki/pompier
207romanian_tables_tags = {
208 "οριστική άρθρωση": ["definite"],
209 "αόριστη άρθρωση": ["indefinite"],
210}
212# https://el.wiktionary.org/wiki/afrikanisch
213german_tables_tags = {
214 "με οριστικό άρθρο": ["definite"],
215 "με αόριστο άρθρο": ["indefinite"],
216 "ένδειξη ευγένειας": ["polite"], # Sie
217 "όλα τα γένη": ["masculine", "feminine", "neuter"],
218 "ως κατηγορούμενο": ["predicative"],
219}
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}
246# https://el.wiktionary.org/wiki/biały
247polish_tables_tags = {
248 "αρσενικό έμψυχο": ["masculine", "animate"],
249 "αρσενικό άψυχο": ["masculine", "inanimate"],
250}
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}
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}
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}
318ancient_greek_tags = {
319 "δοτική": ["dative"],
320 "αφαιρετική": ["ablative"],
321 "τοπική": ["locative"],
322 "δυϊκός": ["dual"],
323 "γενική δοτική": ["genitive", "dative"],
324 "εφελκυστικό νι": [], # "ephelcystic nu" is not valid
325}
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}
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}
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}
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}
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}
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}
739Taggable = WordEntry | Form | Sense | Linkage
740"""An object with raw_tags, tags and topics attributes."""
743def translate_raw_tags(taggable: Taggable) -> None:
744 """Translate raw_tags to tags/topics, preserving raw_tags.
746 This is a bit different from other extractors in order to type check.
748 INVARIANT: taggable's tags/topics should **remain** unique.
749 If they were not unique before, there are no guarantees.
751 Use:
752 # Apply to an entire WordEntry
753 >>> translate_raw_tags(word_entry)
755 # Apply to each Form in a WordEntry
756 >>> for form in word_entry.forms:
757 ... translate_raw_tags(form)
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)