Coverage for src/wiktextract/extractor/el/tags.py: 84%
36 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 05:44 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 05:44 +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 wiktextract.extractor.el.models import Form, Linkage, Sense, WordEntry
14from wiktextract.tags import uppercase_tags, valid_tags
15from wiktextract.topics import valid_topics
17# Tags used for modern Greek verb tables.
18#
19# Includes other verb related tags that may appear in headers etc.
20#
21# Some of the translations are from:
22# * Greek: An Essential Grammar (Routledge Essential Grammars)
23#
24# * Reference:
25# https://el.wiktionary.org/wiki/Κατηγορία:Πρότυπα_κλίσης_ρημάτων_(νέα_ελληνικά)
26#
27# * Standard table:
28# https://el.wiktionary.org/wiki/ψάχνω
29# * Non-standard table (relatively frequent):
30# https://el.wiktionary.org/wiki/αναφωνώ which follows
31# https://el.wiktionary.org/wiki/Πρότυπο:el-κλίσ-'λαλώ'
32# * Others:
33# https://el.wiktionary.org/wiki/τρώω
34# FIX:
35# * Users wrongly putting noun inflections in a Κλήση section
36# https://el.wiktionary.org/wiki/δισεκατομμυριούχος
37verb_table_tags_base: dict[str, list[str]] = {
38 # Persons & numbers
39 "α' ενικ.": ["first-person", "singular"],
40 "β' ενικ.": ["second-person", "singular"],
41 "γ' ενικ.": ["third-person", "singular"],
42 "α' πληθ.": ["first-person", "plural"],
43 "β' πληθ.": ["second-person", "plural"],
44 "γ' πληθ.": ["third-person", "plural"],
45 "α' πρόσωπο": ["first-person"],
46 "β' πρόσωπο": ["second-person"],
47 "γ' πρόσωπο": ["third-person"],
48 "εγώ": ["first-person", "singular"],
49 "εσύ": ["second-person", "singular"],
50 "αυτός": ["third-person", "singular"],
51 "εμείς": ["first-person", "plural"],
52 "εσείς": ["second-person", "plural"],
53 "αυτοί": ["third-person", "plural"],
54 "(εσύ)": ["second-person", "singular"],
55 "(εσείς)": ["second-person", "plural"],
56 # Aspect groups
57 # NOTE: redundant within most subcategories but needed to distinguish:
58 # υποτακτική/προστακτική.
59 # NOTE: The above distinction was deemed less important than being precise
60 # over the main, most used forms, and so, these groups are ignored.
61 # It also has the advantage of syncing standard and non-standard tables.
62 "εξακολουθητικοί χρόνοι": [], # ["imperfective"],
63 "συνοπτικοί χρόνοι": [], # ["perfective"],
64 "συντελεσμένοι χρόνοι": [], # ["perfect"],
65 "συντελεσμένοι χρόνοι (β΄ τύποι)": [
66 # "perfect",
67 "type-b",
68 ],
69 "συντελεσμένοι χρόνοι β΄ (μεταβατικοί)": [
70 # "perfect",
71 "type-b",
72 "transitive",
73 ],
74 "συντελεσμένοι χρόνοι β΄ (αμετάβατοι)": [
75 # "perfect",
76 "type-b",
77 "intransitive",
78 ],
79 # Basic tenses / aspects
80 "ενεστώτας": ["present"],
81 "ενεστώτα": ["present"],
82 "πρτ": ["imperfect"],
83 "παρατατικός": ["imperfect"],
84 "αόρ": ["aorist"],
85 "αόριστος": ["aorist"],
86 # Future
87 "εξακολουθητικός μέλλοντας": ["future", "imperfect"],
88 "εξ. μέλλ.": ["future", "imperfect"],
89 "συνοπτ. μέλλ.": ["future"],
90 "στιγμιαίος μέλλοντας": ["future"], # στιγμιαίος = συνοπτικός
91 "στ.μέλλ": ["future"],
92 "συντελ. μέλλ.": ["future", "perfect"],
93 "συντελεσμένος μέλλοντας α'": ["future", "perfect", "type-a"],
94 # Perfect subtypes
95 "παρακείμενος": ["perfect"],
96 "παρακείμενος α'": ["perfect", "type-a"],
97 "υπερσυντέλικος": ["pluperfect"],
98 "υπερσυντέλικος α'": ["pluperfect", "type-a"],
99 # Forms / moods
100 "υποτακτική": ["subjunctive"],
101 "προστακτική": ["imperative"],
102 "μετοχή": ["participle"],
103 "μτχ.": ["participle"],
104 # παθητική μετοχή παρακειμένου
105 "μτχ.π.π": ["passive", "participle"],
106 "μτχ.π.ε": ["active", "participle"],
107 "μετοχή (ενεστώτας)": ["participle", "present"],
108 "απαρέμφατο": ["infinitive"],
109 # Voices
110 "ενεργ.:": ["active"],
111 "παθητική φωνή": ["passive"],
112 "παθ.φωνή": ["passive"],
113 "στην παθητική φωνή": ["passive"],
114 "παθητικό": ["passive"],
115 # ["passive-normally"] not valid, maybe add it similar to plural-normally
116 "συνήθως στην παθητική φωνή": [],
117 "π.αόρ": ["passive", "aorist"],
118 "χωρίς παθητική φωνή": [], # passive-only is not valid (ADD IT?)
119 # Others (τρώω table)
120 "προσωπικές εγκλίσεις": [], # (noise) personal-moods
121 "απρόσωπες εγκλίσεις": ["impersonal"], # impersonal-moods
122 "μονολεκτικοί χρόνοι": [], # ["simple-tenses"], # no να/θα/έχει
123 "περιφραστικοί χρόνοι": [], # ["periphrastic"], # with να/θα/έχει
124 "απαρέμφατο (αόριστος)": ["infinitive", "aorist"],
125}
127# https://el.wiktionary.org/wiki/free
128english_tables_tags = {
129 # Comparative
130 # lit. "degree of comparison" but degree is a category already
131 "παραθετικά": [],
132 "θετικός": ["positive"],
133 "συγκριτικός": ["comparative"],
134 "υπερθετικός": ["superlative"],
135 # Others
136 "γ΄ ενικό ενεστώτα": ["third-person", "singular", "present"],
137 "παθητική μετοχή": ["passive", "participle"],
138 "ενεργητική μετοχή": ["active", "participle"],
139 "μεταβατικό": ["transitive"],
140 "αμετάβατο": ["intransitive"],
141}
143# https://el.wiktionary.org/wiki/balai
144esperanto_tables_tags = {
145 "μέλλοντας": ["future"],
146 "μορφή": [], # form is not valid
147 "υποθετική": ["hypothetical"],
148}
150turkish_tables_tags = {
151 # 1. https://el.wiktionary.org/wiki/un
152 "... μου": ["first-person", "singular"],
153 "... σου": ["second-person", "singular"],
154 "... του": ["third-person", "singular"],
155 "... μας": ["first-person", "plural"],
156 "... σας": ["second-person", "plural"],
157 "... τους": ["third-person", "plural"],
158 "είμαι": ["first-person", "singular", "present"],
159 "είσαι": ["second-person", "singular", "present"],
160 "είναι": ["third-person", "singular", "plural", "present"],
161 "είμαστε": ["first-person", "plural", "present"],
162 "είστε": ["second-person", "plural", "present"],
163 "ήμουν": ["first-person", "singular", "past"],
164 "ήσουν": ["second-person", "singular", "past"],
165 "ήταν": ["third-person", "singular", "plural", "past"],
166 "ήμασταν": ["first-person", "plural", "past"],
167 "ήσασταν": ["second-person", "plural", "past"],
168 # 2. https://el.wiktionary.org/wiki/içmek
169 "o": ["third-person", "singular"],
170 "sen": ["second-person", "singular"],
171 "ben": ["first-person", "singular"],
172 "onlar": ["third-person", "plural"],
173 "siz": ["second-person", "plural"],
174 "biz": ["first-person", "plural"],
175 "άρνηση": ["negative"],
176 "θετικός - ερώτηση": ["positive", "interrogative"],
177 "άρνηση - ερώτηση": ["negative", "interrogative"],
178 "ενεστώς απλός": ["present"],
179 "παρατατικός (i was watching)": ["imperfect"],
180 "απροσδιόριστος αόριστος": ["indefinite", "past"],
181 "απροσδιόριστος παρατατικός": ["indefinite", "imperfect"],
182 'past future ("i was going to watch")': ["past-future"],
183 'unwitnessed past future ("i was supposedly going to watch")': [
184 "past-future"
185 ],
186 '"i used to watch" / "i would watch"': ["imperfect"],
187 '"i used to watch" / "i would watch" (unwitnessed form)': ["imperfect"],
188 "παθητικό απαρέμφατο": ["passive", "infinitive"],
189 "ονομαστικές παράγωγες (isim-fiil)": ["noun"],
190 "παθητικές ονομαστικές παραγωγές": ["passive", "noun"],
191 "επιθετικές παράγωγες (sıfat-fiil)": ["adjective"],
192 "επιρρηματικές παράγωγες (zarf-fiil)": ["adverb"],
193 # 3. https://el.wiktionary.org/wiki/yemek
194 "διαρκής παροντικός (ενεστώτας)": ["present"],
195 "απλός παροντικός": ["present"],
196 "διαρκής παρελθοντικός (παρατατικός)": ["imperfect"],
197 "καταφατικοί τύποι": ["positive"],
198 "αρνητικοί τύποι": ["negative"],
199 "ερωτηματικοί τύποι": ["interrogative"],
200 "ερωτημ-αρνητ. τύποι": ["interrogative", "negative"],
201 # 4. https://el.wiktionary.org/wiki/gitmek
202 "pozitiv - izrični oblik": ["positive"],
203 "pozitiv - upitni oblik": ["positive", "interrogative"],
204 "negativ - izrični oblik": ["negative"],
205 "negativ - upitni oblik": ["negative", "interrogative"],
206}
208# https://el.wiktionary.org/wiki/pompier
209romanian_tables_tags = {
210 "οριστική άρθρωση": ["definite"],
211 "αόριστη άρθρωση": ["indefinite"],
212}
214# https://el.wiktionary.org/wiki/afrikanisch
215german_tables_tags = {
216 "με οριστικό άρθρο": ["definite"],
217 "με αόριστο άρθρο": ["indefinite"],
218 "ένδειξη ευγένειας": ["polite"], # Sie
219 "όλα τα γένη": ["masculine", "feminine", "neuter"],
220 "ως κατηγορούμενο": ["predicative"],
221}
223# https://el.wiktionary.org/wiki/os
224spanish_tables_tags = {
225 "1ο": ["first-person"],
226 "2ο": ["second-person"],
227 "3ο": ["third-person"],
228 # "https://el.wiktionary.org/wiki/entender"
229 "υποτακτική (subjuntivo)": ["subjunctive"],
230 "οριστική (indicativo)": ["indicative"],
231 "αυτοπαθής": ["reflexive"],
232 "τονιζόμενη": [], # accent/accented is not valid
233 # https://el.wiktionary.org/wiki/llegar
234 "yo": ["first-person", "singular"],
235 "tú": ["second-person", "singular"],
236 "él, ella, ello, usted": ["third-person", "singular"],
237 "usted": ["third-person", "singular"],
238 "nosotros, nosotras": ["first-person", "plural"],
239 "vosotros, vosotras": ["second-person", "plural"],
240 "ellos, ellas, ustedes": ["third-person", "singular"],
241 "ustedes": ["third-person", "plural"],
242 "παρατατικός (ra)": ["imperfect"],
243 "παρατατικός (se)": ["imperfect"],
244 "καταφατικά": ["positive"],
245 "δυνητική": ["potential"],
246}
248# https://el.wiktionary.org/wiki/biały
249polish_tables_tags = {
250 "αρσενικό έμψυχο": ["masculine", "animate"],
251 "αρσενικό άψυχο": ["masculine", "inanimate"],
252}
254# https://el.wiktionary.org/wiki/любить
255russian_tables_tags = {
256 "α' πρόσ.": ["first-person", "singular"],
257 "β' πρόσ.": ["second-person", "singular"],
258 "γ' πρόσ.": ["third-person", "singular"],
259 "μη συνοπτική όψη1": ["imperfective"], # συνοπτικό perfective
260}
262# croître (παραδοσιακή ορθογραφία)
263# croitre (ορθογραφία του 1990)
264french_tags = {
265 "(παραδοσιακή ορθογραφία)": [], # normal spelling
266 "παραδοσιακή ορθογραφία": [],
267 "(ορθογραφία του 1990)": ["dated"], # outdated-spelling is not valid
268 "ορθογραφία του 1990": ["dated"],
269 # Old French (fro)
270 "cas sujet": ["subjective"], # subjective case
271 "cas régime": ["objective"], # objective case
272}
274# https://el.wiktionary.org/wiki/πιστεύω
275# https://el.wiktionary.org/wiki/δύω
276ancient_greek_tables_tags = {
277 "ἐγὼ": ["first-person", "singular"],
278 "ἐγώ": ["first-person", "singular"],
279 "σὺ": ["first-person", "singular"],
280 "σύ": ["first-person", "singular"],
281 "οὗτος": ["first-person", "singular"],
282 "οὖτος": ["first-person", "singular"], # spirit the other way
283 "ἡμεῖς": ["first-person", "singular"],
284 "ὑμεῖς": ["first-person", "singular"],
285 "οὗτοι": ["first-person", "singular"],
286 #
287 "οριστική": ["indicative"],
288 "ευκτική": ["optative"],
289 "ονοματικοί τύποι": [], # EXTRA SPACES
290 "ενεργητικός ενεστώτας": ["active", "present"],
291 "ενεργητικός παρακείμενος": ["active", "perfect"],
292 "ενεργητικός αόριστος α'": ["active", "aorist", "type-a"],
293 "ενεργητικός αόριστος β'": ["active", "aorist", "type-b"],
294 "ενεργητικός παρατατικός": ["active", "imperfect"],
295 "ενεργητικός υπερσυντέλικος": ["active", "pluperfect"],
296 "ενεργητικός μέλλοντας": ["active", "future"],
297 "ονοματικοί τύποι": [], # ?
298 "2o δυϊκός": ["second-person", "dual"],
299 "3o δυϊκός": ["third-person", "dual"],
300 "μετοχή : αρσενικό - θηλυκό - ουδέτερο": ["participle"], # BAD PARSING
301 "στη μέση φωνή": ["middle"], # middle voice
302 "μέσος μέλλοντας": ["middle", "future"],
303 "μέσος αόριστος α'": ["middle", "aorist", "type-a"],
304 "μέσος αόριστος β'": ["middle", "aorist", "type-b"],
305 "μέσος / παθητικός ενεστώτας": ["mediopassive", "present"],
306 "μέσος / παθητικός παρακείμενος": ["mediopassive", "perfect"],
307 "μέσος / παθητικός παρατατικός": ["mediopassive", "imperfect"],
308 "μέσος / παθητικός υπερσυντέλικος": ["mediopassive", "pluperfect"],
309 "1η συζυγία - μεσοπαθητικός ενεστώτας": ["mediopassive", "present"],
310 "2η συζυγία - ενεργητικός ενεστώτας": ["active", "present"],
311 "παθητικός αόριστος α'": ["passive", "aorist", "type-a"],
312 "παθητικός μέλλοντας α'": ["passive", "future", "type-a"],
313 # https://el.wiktionary.org/wiki/δορυφόρος
314 # Dual terms
315 "κλητική ὦ!": ["vocative"],
316 "ονομ-αιτ-κλ": ["nominative", "accusative", "vocative"],
317 "γεν-δοτ": ["genitive", "dative"],
318}
320ancient_greek_tags = {
321 "δοτική": ["dative"],
322 "αφαιρετική": ["ablative"],
323 "τοπική": ["locative"],
324 "δυϊκός": ["dual"],
325 "γενική δοτική": ["genitive", "dative"],
326 "εφελκυστικό νι": [], # "ephelcystic nu" is not valid
327}
329# Tags need capitalization
330transliteration_tags = {
331 "λατινικοί χαρακτήρες": ["Latin", "transliteration"],
332 "λατινικό αλφάβητο": ["Latin", "transliteration"],
333 "αραβικό αλφάβητο": ["Arabic", "transliteration"],
334 "κυριλλικοί χαρακτήρες": ["Cyrillic", "transliteration"],
335 "yañalif": ["Yañalif", "transliteration"],
336}
338zones_tags = {
339 "ηπα": ["US"],
340 "ηβ": ["UK"],
341 "αμερικανικά αγγλικά": ["US", "English"],
342 "βρετανικά αγγλικά": ["UK", "English"],
343 "αμερικανική σημασία": ["US"], # US-meaning is not valid
344 "βρετανική σημασία": ["UK"],
345 "αυστραλία": ["Australia"],
346 "γαλλία": ["France"],
347}
349# TODO: Ideally empty. Move things around.
350other_tags = {
351 "σπάνιο": ["rare"],
352 "συνήθως": [], # usually
353 "εξαιρετικά": [], # very; usu. εξαιρετικά σπάνιο: very rare
354 "όπως ενδεικτικά": [], # ~roughly means "for example..."
355 "και τα παράγωγά του": [], # ~roughly means related
356 "αρνητικά": ["negative"],
357 "συγγενικά": [], # related
358 "συνηρημένο": ["contracted"], # "βροντάω (συνηρημένο βροντῶ)"
359 "πριν από φωνήεν": ["before-vowel"],
360 "μόνο πριν από το ουσιαστικό": ["before-noun"],
361 "βιβλιογραφική παραπομπή": [], # bibliographic reference
362 "rōmaji": [], # romaji is not valid
363 # gia fors
364 "για πράγματα": [], # ~for things
365 "για ζώα": [], # ~for animals
366 "για πρόσωπο": [], # ~for people
367 "για πρόσωπα": [], # ~for people
368 "για άνθρωπο": [], # ~for people
369 "για ανθρώπους": [], # ~for people
370 # POS
371 "ουσιαστικό": ["noun"],
372 "ελλειπτικό ουσιαστικό": ["noun", "defective"],
373 "ρήμα": ["verb"],
374 "ελλειπτικό ρήμα": ["verb", "defective"],
375 "αποθετικό ρήμα": ["deponent", "verb"],
376 "αποθετικό": ["deponent"],
377 "απρόσωπο ρήμα": ["verb", "impersonal"],
378 "απρόσωπο": ["impersonal"],
379 "επίρρημα": ["adverb"],
380 "τοπικό επίρρημα": ["adverb"], # topical is not valid
381 "χρονικό επίρρημα": ["adverb"],
382 "τροπικό επίρρημα": ["adverb"], # tropic/tropical are not valid
383 "τροπικό": [],
384 "ποσοτικό επίρρημα": ["adverb"],
385 "επίθετο": ["adjective"],
386 "επιτατικό επίθετο": ["adjective"],
387 "σε επιθετική λειτουργία": ["adjective"],
388 "λειτουργία": [], # BAD PARSING of the above
389 "επιθετική": ["adjective"],
390 "ως επίθετο": ["adjective"],
391 "επώνυμο": ["surname"],
392 "επώνυμα": ["surname"],
393 "επωνυμία": ["surname"],
394 "θεωνύμιο": [], # God's name
395 "προσωπική αντωνυμία": ["pronoun"], # really personal pronoun
396 "αναφορική αντωνυμία": ["pronoun"],
397 "δεικτική αντωνυμία": ["pronoun"],
398 "οριστική αντωνυμία": ["pronoun", "definite"],
399 "αόριστη αντωνυμία": ["pronoun", "indefinite"],
400 "επιμεριστική αντωνυμία": ["pronoun", "distributive"],
401 "ακρωνύμιο": ["acronym"],
402 "αρκτικόλεξο": ["initialism"],
403 "υποκοριστικό": ["diminutive"],
404 "χαϊδευτικό": ["diminutive"],
405 "σύνθετα": ["compound"],
406 "συντομογραφία": ["abbreviation"],
407 "γράμμα": ["letter"],
408 "περιληπτικό": ["collective"],
409 "οργανική": ["instrumental"],
410 "γραφή": [], # writing is not valid
411 "προσφώνηση": [], # really salutation
412 #
413 "άκλιτο": ["invariable"],
414 "και άκλιτο": ["invariable"],
415 "κτητική": ["possessive"],
416 "μετρήσιμο": ["countable"],
417 "μη μετρήσιμο": ["uncountable"],
418 "μετρήσιμο και μη μετρήσιμο": ["countable", "uncountable"],
419 "μεταβατικό και αμετάβατο": ["transitive", "intransitive"],
420 "μεταβατικό & αμετάβατο": ["transitive", "intransitive"],
421 "ουσιαστικοποιημένο": [], # really nominalized
422 "αστερισμός": [], # constellation is not valid
423 # Zones
424 "τοπωνύμιο": ["toponymic"], # toponym/placename are not valid
425 "πατριδωνυμικό": ["demonym"],
426 "πρώην ονομασία": [], # naming is not valid (~city naming)
427 # Styles / register
428 "κυριολεκτικά": ["literally"],
429 "μεταφορικά": ["figuratively"], # or metaphorically
430 "κυριολεκτικά και μεταφορικά": ["literally", "figuratively"],
431 "συνεκδοχικά": ["figuratively"],
432 "καταχρηστικά": ["figuratively"],
433 "κατ’ επέκταση": ["broadly"],
434 "κατ' επέκταση": ["broadly"],
435 "ειδικότερα": ["especially"],
436 "γενικότερα": ["general"], # generally is not valid
437 "αρχική σημασία": [], # originally is not valid
438 #
439 "λόγιο": ["formal"],
440 "επίσημο": ["formal"],
441 "λογοτεχνικό": ["literary"],
442 "ποιητικός τύπος": ["poetic"],
443 "παρωχημένο": ["dated"],
444 "αρχαιοπρεπές": ["archaic"],
445 "απαρχαιωμένο": ["obsolete"],
446 "καθομιλουμένη": ["colloquial"],
447 "χυδαίο": ["vulgar"],
448 "λαϊκό": ["vulgar"],
449 "λαϊκότροπο": ["vulgar"],
450 "αργκό": ["slang"], # argot is not valid
451 "διαδικτυακή αργκό": ["internet-slang"],
452 "στρατιωτική αργκό": ["slang"], # military-slang is not valid
453 "οικείο": ["familiar"],
454 "προφορικό": ["familiar"], # oral is not valid
455 "μειωτικό": ["offensive"],
456 "υβριστικό": ["offensive"],
457 "σκωπτικό": ["offensive"],
458 "κακόσημο": ["disapproving"],
459 "νεολογισμός": ["neologism"],
460 "ιδιωματικό": ["idiomatic"],
461 "και σήμερα σε χρήση ως ιδιωματικό": ["idiomatic"],
462 "ιδιωματισμός": ["idiomatic"], # idiom is not valid
463 "ανεπίσημο": ["informal"],
464 "ειρωνικό": ["ironic"],
465 # Greeks
466 "καθαρεύουσα": ["Katharevousa"],
467 "καθαρεύουσα (κατά την αρχαία κλίση)": ["Katharevousa"],
468 "ελληνιστική κοινή": ["Koine"],
469 "δημοτική": ["Demotic"],
470 "ελληνιστική σημασία": ["Hellenistic"],
471 "κρητικά": ["Cretan"],
472 "κυπριακά": ["Cypriot"],
473 "ιωνικός τύπος": ["Ionic"],
474 "στην ιωνική διάλεκτο": ["Ionic"],
475 "επικός τύπος": ["Epic"],
476 "δωρικός τύπος": ["Doric"],
477 "αιολικός τύπος": ["Aeolian"],
478 "αττικός τύπος": ["Attic"],
479}
481topic_map: dict[str, list[str]] = {
482 "επάγγελμα": ["business"], # really profession
483 "οικονομία": ["business"], # really economy
484 "λογιστική": ["accounting"],
485 "στατιστική": ["statistics"],
486 "βιολογία": ["biology"],
487 "βοτανική": ["botany"],
488 "ιατρική": ["medicine"],
489 "φαρμακευτική": ["medicine"], # pharmaceutical is not valid
490 "ανατομία": ["anatomy"],
491 "φυσιολογία": ["physiology"],
492 "χημεία": ["chemistry"],
493 "βιοχημεία": ["biochemistry"],
494 "θρησκεία": ["religion"],
495 "χριστιανισμός": ["Christianity"],
496 "ισλαμισμός": ["Islam"],
497 "μυθολογία": ["mythology"],
498 "ελληνική μυθολογία": ["mythology", "Greek"],
499 "σκανδιναβική μυθολογία": ["mythology", "Scandinavian"],
500 "γραμματική": ["grammar"],
501 "ιστορία": ["history"],
502 "μουσική": ["music"],
503 "μουσικό όργανο": ["music"], # music instrument
504 "εργαλείο": ["tools"],
505 "μαθηματικά": ["mathematics"],
506 "πολιτική": ["politics"],
507 "αθλητισμός": ["athletics"],
508 "τεχνολογία": ["technology"],
509 "φυσική": ["physics"],
510 "ζωολογία": ["zoology"],
511 "ιχθυολογία": ["ichthyology"],
512 "γεωγραφία": ["geography"],
513 "γεωμετρία": ["geometry"],
514 "γεωλογία": ["geology"],
515 "γεωπονία": ["agriculture"], # agronomy is not valid
516 "φιλολογία": ["philology"],
517 "γλώσσα": ["language"],
518 "γλωσσολογία": ["linguistics"],
519 "φωνητική": ["phonetics"],
520 "αστρονομία": ["astronomy"],
521 "ηλεκτρολογία": ["electricity"], # branch of physics
522 "ηλεκτρονική": ["electronics"],
523 "τηλεπικοινωνίες": ["telecommunications"],
524 "αντικειμενοστρεφής προγραμματισμός": ["programming"], # OOP
525 "προγραμματισμός": ["programming"],
526 "λογισμικό": ["software"],
527 "πληροφορική": ["computing"],
528 "επιστήμη υπολογιστών": ["computing"], # computer science
529 "υλικό υπολογιστή": ["computing"], # computer material
530 "βάσεις δεδομένων": ["computing"], # database is not valid
531 "δίκτυο υπολογιστών": ["computing"], # network is not valid
532 "διαδίκτυο": ["Internet"],
533 "φιλοσοφία": ["philosophy"],
534 "ψυχολογία": ["psychology"],
535 "ψυχιατρική": ["psychiatry"],
536 "αρχιτεκτονική": ["architecture"],
537 "οικοδομική": ["construction"],
538 "μετεωρολογία": ["meteorology"],
539 "ενδυμασία": ["clothing"],
540 "υπόδηση": ["clothing"], # really footwear
541 "ύφασμα": ["clothing"], # really fabric/textile
542 "αρχαιολογία": ["archeology"],
543 "ορυκτολογία": ["mineralogy"],
544 "εκπαίδευση": ["education"],
545 "τέχνη": ["art"],
546 "γλυπτική": ["art"], # sculpting is not valid
547 "ζωγραφική": ["art"], # painting is not valid
548 "λογοτεχνία": ["literature"],
549 "θέατρο": ["theater"],
550 "χορός": ["dance"],
551 "φωτογραφία": ["photography"],
552 "κινηματογράφος": ["film"],
553 "λογική": ["logic"],
554 "επιστήμη": ["science"],
555 "μηχανολογία": ["mechanical-engineering"],
556 "τυπογραφία": ["typography"],
557 "επιδημιολογία": ["epidemiology"],
558 "οικολογία": ["ecology"],
559 "κοινωνιολογία": ["sociology"],
560 "ανθρώπινο σώμα": ["body"],
561 "λαογραφία": ["folklore"],
562 "μέσο μεταφορών": ["transport"],
563 "αστρολογία": ["astrology"],
564 "εραλδική": ["heraldry"],
565 "ταξινομία": ["taxonomy"],
566 "μεταλλουργία": ["metallurgy"],
567 #
568 "εθνωνύμιο": ["countries"], # ethnonym is not valid
569 "εθνικό όνομα": ["countries"], # ethnonym is not valid
570 "χώρα": ["countries"],
571 "πόλη": ["cities"],
572 "χρώμα": ["color"],
573 #
574 "μονάδα μέτρησης": ["units-of-measure"],
575 "μετρική": ["units-of-measure"],
576 "παραμύθι": ["fantasy"], # tale/fairy-tale are not valid
577 "χαρτοπαίγνιο": ["card-games"],
578 "παιχνίδι": ["games"],
579 "σκάκι": ["board-games"], # chess
580 "κεραμική": ["ceramics"],
581 "άνεμος": ["weather"], # wind is not valid
582 #
583 "αξίωμα": [], # office/rank is not valid
584 "οικογένεια": [], # family is not valid
585 "νόμισμα": [], # coin/currency are not valid
586 # Time
587 "ημέρα": ["time"], # day is not valid
588 "μήνας": ["time"], # month is not valid
589 # Food
590 "τρόφιμο": ["food"],
591 "φαγητά": ["food"],
592 "ποτό": ["food"], # drink is not valid
593 "γαστρονομία": ["food"], # gastronomy is not valid
594 "φρούτο": ["food"], # fruit is not valid
595 "όσπριο": ["food"], # legume is not valid
596 "γλυκό": ["food"], # sweet is not valid
597 "τυρί": ["food"], # cheese is not valid
598 "λαχανικό": ["vegetable"],
599 "αλιεία": ["fishing"],
600 "ψάρι": ["fish"],
601 "μαλάκιο": ["fish"], # mollusc is not valid
602 "ελληνική ποικιλία αμπέλου": ["wine"],
603 "μαγειρική": ["cooking"],
604 "κουζινικά": ["cooking"], # kitchen is not valid
605 #
606 "δέντρο": [], # tree is not valid
607 "φυτό": [], # really plant
608 "λουλούδι": [], # really flower
609 "ζώο": [], # animal is not valid
610 "θηλαστικό ζώο": ["mammals"],
611 "πτηνό": [], # really bird
612 "ερπετό": [], # reptile is not valid
613 "φίδι": ["snakes"],
614 "εντομολογία": ["entomology"],
615 "έντομο": ["insects"],
616 #
617 "στρατιωτικός βαθμός": ["military"],
618 "οπλισμός": ["weapon"],
619 #
620 "ναυτικός όρος": ["nautical"],
621 "ναυπηγικός όρος": ["nautical"],
622 "νομικός όρος": ["law"],
623 "στρατιωτικός όρος": ["military"],
624 "αεροπορικός όρος": ["aerospace"],
625 "εκκλησιαστικός όρος": ["religion"],
626}
628# TODO:
629# This booms somewhere in the parsing
630# (να, ας, αν, ίσως κλπ) γ' ενικό υποτακτικής αορίστου του ρήματος εντάσσω
631#
632# TO FIX LATER
633DONTCARES = {
634 ":": [],
635 "να": [],
636 "ας": [],
637 "αν": [],
638 "ίσως κλπ": [],
639 "οι δεύτεροι άτονοι τύποι είναι εγκλιτικοί": [],
640 "επική κλίση οι διαφορετικοί τύποι, με έντονα γράμματα": [],
641 "ελληνιστική κοινή (αρχαία κλίση)δε μαρτυρείται δυϊκός αριθμός": [],
642 "όταν ακολουθεί όνομα, η οξεία γίνεται βαρεία . • σημειώνεται η προσωδία του α εκεί που είναι μακρό": [],
643 "δωρική κλίση οι διαφορετικοί τύποι, με έντονα γράμματα": [],
644 "χωρίς άρθρο, συγκριτικός βαθμός με το άρθρο, σχετικός υπερθετικός βαθμός": [],
645 "κλιτικοί τύποι από την αρχαία κλίση": [], # from βπ template for grc
646 "παθητικού": [], # BAD PARSING
647 "παρακειμένου": [], # BAD PARSING
648 "σημειώνεται η προσωδία του α εκεί που είναι μακρό": [],
649 "1η συζυγία - μεσοπαθητικός ενεστώτας (αποθετικό ρήμα)": [],
650 "κλίση -ος, -α, -ον & σπανιότερα θηλυκό σε -η": [],
651 "χωρίς άρθρο": [],
652 "χωρίς": [],
653 "κλίση χωρίς άρθρο": [],
654 "χωρίς παραθετικά": [],
655 "και": [],
656 "του": [],
657 "δείτε": [],
658 "δείτε την έκφραση": [],
659 "όπως": [],
660 "στο": [],
661 "τη λέξη": [],
662 "τις λέξεις": [],
663 "με": [],
664 "σε": [],
665 "ή": [],
666 "η": [],
667 "το": [],
668 "+ να": [],
669 "+ θα": [],
670 # Bad page: https://el.wiktionary.org/wiki/enketi
671 "ρήμα {{{1}}}i": ["verb"],
672 #
673 # BAD TABLE PARSING
674 #
675 # https://el.wiktionary.org/wiki/ὁ
676 "γένη πτώσεις": [],
677 "τῶ": [],
678 "τώς": [],
679 "τάν (ᾱ)": [],
680 # https://el.wiktionary.org/wiki/με
681 "πρόσωπα πτώσεις": [],
682}
684tag_map: dict[str, list[str]] = {
685 **DONTCARES,
686 **verb_table_tags_base,
687 **english_tables_tags,
688 **esperanto_tables_tags,
689 **turkish_tables_tags,
690 **romanian_tables_tags,
691 **german_tables_tags,
692 **spanish_tables_tags,
693 **polish_tables_tags,
694 **russian_tables_tags,
695 **french_tags,
696 **ancient_greek_tables_tags,
697 **ancient_greek_tags,
698 **transliteration_tags,
699 **zones_tags,
700 **other_tags,
701 # Gender
702 "αρσενικό": ["masculine"],
703 "θηλυκό": ["feminine"],
704 "ουδέτερο": ["neuter"],
705 "αρσενικό & θηλυκό": ["masculine", "feminine"],
706 "αρσενικό ή θηλυκό": ["masculine", "feminine"],
707 "αρσενικό ή ουδέτερο": ["masculine", "neuter"],
708 "αρσενικό θηλυκό ουδέτερο": ["masculine", "feminine", "neuter"],
709 "ουδέτερο στον ενικό": [], # neuter-when-singular not valid
710 "ουδέτερο στον πληθυντικό": [], # idem, not valid
711 "αρσενικό στον πληθυντικό": [], # masculine-when-plural not valid
712 "θηλυκό στον ενικό": [], # feminine-when-singular not valid
713 # Number
714 "ενικός": ["singular"],
715 "ενικός (singular)": ["singular"],
716 "πληθυντικός": ["plural"],
717 "πληθυντικός (plural)": ["plural"],
718 "μόνο στον ενικό": ["singular-only"],
719 "μόνο στον πληθυντικό": ["plural-only"],
720 "ο αρχαίος τύπος, μόνο στον πληθυντικό": ["plural-only"],
721 "μόνο πληθυντικός": ["plural-only"],
722 "μόνο ενικός": ["singular-only"],
723 "στον ενικό": ["singular"],
724 "στον πληθυντικό": ["plural"],
725 "συνήθως στον πληθυντικό": ["plural-normally"],
726 "συνήθως στον ενικό": ["singular-normally"],
727 "συνήθως ενικός": ["singular-normally"],
728 # Case
729 "ονομαστική": ["nominative"],
730 "γενική": ["genitive"],
731 "γενική:": ["genitive"],
732 "αιτιατική": ["accusative"],
733 "κλητική": ["vocative"],
734 "ονομαστική αιτιατική": ["nominative", "accusative"],
735 # Others
736 "αόριστο": ["indefinite"],
737 "οριστικό": ["definite"],
738}
741Taggable = WordEntry | Form | Sense | Linkage
742"""An object with raw_tags, tags and topics attributes."""
745def translate_raw_tags(taggable: Taggable) -> None:
746 """Translate raw_tags to tags/topics, preserving raw_tags.
748 This is a bit different from other extractors in order to type check.
750 INVARIANT: taggable's tags/topics should **remain** unique.
751 If they were not unique before, there are no guarantees.
753 Use:
754 # Apply to an entire WordEntry
755 >>> translate_raw_tags(word_entry)
757 # Apply to each Form in a WordEntry
758 >>> for form in word_entry.forms:
759 ... translate_raw_tags(form)
761 # Apply to a list of Form objects
762 >>> for form in form_list:
763 ... translate_raw_tags(form)
764 """
765 for raw_tag in taggable.raw_tags:
766 clean_raw_tag = raw_tag.replace("\n", " ").lower()
767 tags = tag_map.get(clean_raw_tag)
768 if tags is not None:
769 for tag in tags:
770 if tag not in taggable.tags:
771 taggable.tags.append(tag)
772 else:
773 topics = topic_map.get(clean_raw_tag)
774 if topics is not None: 774 ↛ 775line 774 didn't jump to line 775 because the condition on line 774 was never true
775 for topic in topics:
776 if topic not in taggable.topics:
777 taggable.topics.append(topic)