Coverage for src/wiktextract/extractor/ru/tags.py: 87%
40 statements
« prev ^ index » next coverage.py v7.6.10, created at 2024-12-27 08:07 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2024-12-27 08:07 +0000
1from typing import Union
3from .models import WordEntry
5# https://ru.wiktionary.org/wiki/Викисловарь:Условные_сокращения
6# Стиль
7STYLE_TAGS: dict[str, Union[str, list[str]]] = {
8 "бран.": "offensive",
9 "вульг.": "vulgar",
10 "высок.": "honorific",
11 "гипокор.": "familiar",
12 "груб.": "vulgar",
13 "детск.": "childish",
14 "диал.": "dialectal",
15 # "дисфм.": "дисфемизм",
16 "жарг.": "slang",
17 "ирон.": "ironic",
18 "истор.": "historical",
19 # "канц.": "канцелярское",
20 "книжн.": "literary",
21 "ласк.": "diminutive",
22 # "мол.": "молодёжное",
23 "нар.-поэт.": "poetic",
24 "нар.-разг.": "colloquial",
25 # "научн.": "научное",
26 "неодобр.": "disapproving",
27 "неол.": "neologism",
28 # "обсц.": "обсценное",
29 "офиц.": "formal",
30 # "патет.": "патетическое",
31 "поэт.": "poetic",
32 "презр.": "contemplative",
33 "пренебр.": "derogatory",
34 "прост.": "colloquial",
35 # "проф.": "профессиональное",
36 # "публиц.": "публицистическое",
37 "разг.": "colloquial",
38 "рег.": "regional",
39 "ритор.": "rhetoric",
40 "сленг.": "slang",
41 "сниж.": "reduced",
42 # "советск.": "советизм",
43 "спец.": "special",
44 "старин.": "archaic",
45 "табу": "taboo",
46 # "торж.": "торжественное",
47 "трад.-нар.": "traditional",
48 "трад.-поэт.": ["traditional", "poetic"],
49 # "увелич.": "увеличительное",
50 "уменьш.": "diminutive",
51 "умласк.": ["diminutive", "endearing"],
52 "унич.": "pejorative",
53 "усилит.": "emphatic",
54 "устар.": "obsolete",
55 "фам.": "familiar",
56 # "школьн.": "школьное",
57 "шутл.": "humorous",
58 "эвф.": "euphemistic",
59 # "экзот.": "экзотизм",
60 "экспр.": "expressively",
61 # "эррат.": "эрративное",
62 # Категория:Стилистические пометы
63 "неофиц.": "informal",
64 "одобр.": "approving",
65 "сленг": "slang",
66 "уважит.": "polite",
67 "уничиж.": "derogatory",
68}
70# Предметные области
71TOPICS = {
72 "авиац.": "aeronautics",
73 "автомоб.": "automotive",
74 # "агрон.": "агрономическое",
75 "алхим.": "pseudoscience",
76 "альп.": "sports",
77 "анат.": "medicine",
78 "антроп.": "anthropology",
79 "артилл.": "weaponry",
80 "археол.": "history",
81 "архит.": "architecture",
82 "астрол.": "astrology",
83 "астрон.": "astronomy",
84 "библейск.": "religion",
85 "биол.": "biology",
86 "биохим.": "biochemistry",
87 "ботан.": "botany",
88 "бухг.": "finance",
89 "вет.": "zoology pathology",
90 "воен.": "military",
91 "гастрон.": "medicine",
92 "генет.": ["biology", "medicine"],
93 "геогр.": "geography",
94 "геод.": "geography",
95 "геол.": "geology",
96 "геометр.": "geometry",
97 "геофиз.": "geology",
98 "геральд.": "heraldry",
99 "гидрол.": "geography",
100 "гидротехн.": "engineering",
101 "гляциол.": "geography",
102 "горн.": "mining",
103 "дипл.": "politics",
104 "ж.-д.": "railways",
105 "живоп.": "arts",
106 # "животн.": "животноводство",
107 "зоол.": "zoology",
108 "игр.": "games",
109 "информ.": "computing",
110 "искусств.": "art-history",
111 "ислам.": "Islam",
112 "ихтиол.": "ichthyology",
113 # "йогич.": "йогическое",
114 "карт.": "card-games",
115 "керам.": ["chemistry", "engineering"],
116 "кино": "film",
117 "кинол.": "dogs",
118 "комп.": "computing",
119 "косм.": "astronomy",
120 "кулин.": "cuisine",
121 # "культурол.": "культурологическое",
122 "лес.": "business",
123 "лингв.": "linguistics",
124 "матем.": "mathematics",
125 "машин.": "engineering",
126 "мед.": "medicine",
127 "металл.": "metallurgy",
128 "метеорол.": "meteorology",
129 "мех.": "mechanical-engineering",
130 "микробиол.": "microbiology",
131 "минер.": "mineralogy",
132 "мифол,": "mythology",
133 "морск.": "nautical",
134 "муз.": "music",
135 # "нефтегаз.": "нефтегазовая промышленность и нефтепереработка",
136 "нумизм.": "numismatics",
137 "океан.": "oceanography",
138 "оккульт.": "mysticism",
139 "опт.": ["physics", "engineering"],
140 "орнитол.": "ornithology",
141 "охотн.": "hunting",
142 "палеонт.": "paleontology",
143 "паразит.": "medicine",
144 "парикмах.": "hairdressing",
145 "плотн.": "carpentry",
146 "полигр.": "printing",
147 "полит.": "politics",
148 "портн.": "textiles",
149 "прогр.": "programming",
150 "психиатр.": "psychiatry",
151 "психол.": "psychology",
152 "пчел.": "agriculture",
153 "радио.": ["radio", "engineering"],
154 "радиоэл.": ["radio", "electricity"],
155 "рекл.": "marketing",
156 "религ.": "religion",
157 "рыбол.": "fishing",
158 "с.-х.": "agriculture",
159 "сексол.": "sexuality",
160 # "скорн.": "скорняжное дело",
161 "социол.": "sociology",
162 # "спелеол.": "спелеологический",
163 "спорт.": "sports",
164 "стат.": "statistics",
165 "столярн.": "carpentry",
166 "строит.": "construction",
167 "театр.": "theater",
168 "текст.": "textiles",
169 "телеком.": "telecommunications",
170 "техн.": "engineering",
171 "торг.": "commerce",
172 "управл.": "management",
173 "фант.": "fantasy",
174 "фарм.": "pharmacology",
175 "физ.": "physics",
176 "физиол.": "physiology",
177 "филат.": "philately",
178 "филол.": "philology",
179 "филос.": "philosophy",
180 "фин.": "finance",
181 "фолькл.": "folklore",
182 "фотогр.": "photography",
183 "хим.": "chemistry",
184 "хоз.": "economics",
185 # "хореогр.": "хореографическое",
186 "церк.": "religion",
187 "цирк.": "circus",
188 "цитол.": "cytology",
189 "шахм.": "chess",
190 "швейн.": "sewing",
191 "экол.": "ecology",
192 "экон.": "economics",
193 "эл.-техн.": "electrical-engineering",
194 "эл.-энерг.": "electricity",
195 "энтомол.": "entomology",
196 "этногр": "ethnography",
197 "этнолог.": "ethnology",
198 "ювел.": "jewelry",
199 "юр.": "legal",
200 # Категория:Стилистические пометы
201 "бизн.": "business",
202}
204# Жаргон
205SLANG_TOPICS = {
206 "автомоб. жарг.": "motorcycling",
207 "арест.": "prison",
208 "воен. жарг.": "military",
209 "жарг. аним.": "anime",
210 # "жарг. викип.": "жаргон википроектов"
211 "интернет.": "Internet",
212 "комп. жарг.": "computer",
213 # "студ. жарг.": "студенческий жаргон",
214 "техн. жарг.": "technical",
215 "крим. и крим. жарг.": "criminology",
216 "полит. жарг.": "politics",
217 "жарг. нарк.": "drugs",
218 "жарг. ЛГБТ": "LGBT",
219 # "жарг. гом.": "жаргон гомосексуалов",
220}
222# Грамматические категории
223GRAMMATICAL_TAGS = {
224 "3л.": "impersonal",
225 "адъектив.": "adjective",
226 "безл.": "impersonal",
227 "вводн. сл.": "parenthetic",
228 "вин. п.": "accusative",
229 "вопр.": "interrogative",
230 # "восклиц.": "в восклицательных предложениях",
231 "гл.": "verb",
232 "дат. п.": "dative",
233 "ед. ч.": "singular", # Шаблон:ед
234 "ж. р.": "feminine",
235 "женск.": "feminine",
236 "им. п.": "nominative",
237 # "исх. п.": "исходный падеж",
238 "исч.": "countable",
239 "м. р.": "masculine",
240 "местн. п.": "locative",
241 "метоним.": "metonymically",
242 "мн. ч.": "plural", # Шаблон:мн, Шаблон:мн.
243 "неисч.": "uncountable",
244 "неодуш.": "inanimate",
245 "неперех.": "intransitive",
246 "нескл.": "indeclinable",
247 # "обобщ": "",
248 # "общ.": "",
249 "одуш.": "animate",
250 # "отриц.": "",
251 "перех.": "transitive",
252 # "повел.": "",
253 "предик.": "predicative",
254 # "предл. п.": "",
255 # "прил.": "",
256 # "прош.": "",
257 # "разд. п.": "",
258 # "род. п.": "",
259 "собир.": "collective",
260 # "ср. р.": "",
261 "статив.": "stative",
262 "субстантивир.": "substantive",
263 # "сущ.": "",
264 # "тв. п.": "",
265 # https://ru.wiktionary.org/wiki/Категория:Шаблоны:Условные_сокращения
266 "м.": "masculine", # Шаблон:m
267 "ср.": "neuter", # Шаблон:n
268 "ж.": "feminine", # Шаблон:f
269 "ж. мн.": ["feminine", "plural"], # Шаблон:f.pl
270 "несов.": "imperfective", # Шаблон:impf
271 "м./ж.": ["masculine", "feminine"], # Шаблон:m/f
272 "ср./м.": ["neuter", "masculine"], # Шаблон:n/m
273 "сов.": "perfective", # Шаблон:pf
274 # Шаблон:прил ru 1a^
275 "муж. р.": "masculine",
276 "ср. р.": "neuter",
277 "жен. р.": "feminine",
278 "неод.": "inanimate",
279 "т.": "instrumental",
280 "п.": "prepositional",
281 "кратк. форма": "short-form",
282}
284# Прочие сокращения
285OTHER_TAGS = {
286 "букв.": "literary",
287 # "искаж.": "искажённое",
288 "неправ.": "irregular",
289 "перен.": "figuratively",
290 "редк.": "rare",
291 # "тж.": "", # Шаблон:тж.
292 "общая": "indefinite",
293 "опред.": "definite",
294 "счётн.": "count-form",
295}
297CASE_TAGS = {
298 # Шаблон:сущ ru m a 1a
299 "им.": "nominative",
300 "р.": "genitive",
301 "д.": "dative",
302 "в.": "accusative",
303 "тв.": "instrumental",
304 "пр.": "prepositional",
305 # Шаблон:сущ bg 7
306 "зват.": "vocative",
307 # Шаблон:сущ de (e)s er ern/n
308 "ном.": "nominative",
309 "ген.": "genitive",
310 "дат.": "dative",
311 "акк.": "accusative",
312 # Шаблон:сущ cu (-а)
313 # "м.": "locative", # conflict with gender tag
314 "местный": "locative",
315 "зв.": "vocative",
316}
318TENSE_TAGS = {
319 # Шаблон:Гл-блок
320 "наст.": "present",
321 "будущ.": "future",
322 "прош.": "past",
323 "будущее": "future",
324}
326MOOD_TAGS = {
327 # Шаблон:Гл-блок
328 "повелит.": "imperative",
329}
331PERSON_TAGS = {
332 # Шаблон:Гл-блок
333 "я": ["first-person", "singular"],
334 "ты": ["second-person", "singular"],
335 "он\nона\nоно": ["third-person", "singular"],
336 "мы": ["first-person", "plural"],
337 "вы": ["second-person", "plural"],
338 "они": ["third-person", "plural"],
339}
341VOICE_TAGS = {
342 # Шаблон:Гл-блок
343 "пр. действ.": "active",
344 "деепр.": "adverbial",
345 "пр. страд.": "passive",
346}
348NUMBER_TAGS = {
349 # Шаблон:сущ cu (-а)
350 "дв. ч.": "dual",
351 "часто мн. ч.": ["often", "plural"],
352}
354TRANSLATION_TAGS = {
355 # Шаблон:перев-блок
356 # https://en.wikipedia.org/wiki/Azerbaijani_alphabet
357 # https://ru.wiktionary.org/wiki/Модуль:languages/data
358 "арабск.": "Arabic",
359 "кир.": "Cyrillic",
360 "лат.": "Latin",
361 "лат": "Latin",
362 "кана": "katakana",
363 "сир.": "Syriac",
364 "иуд.": "Jewish",
365 "центральный": "Central",
366 "демот.": "Demotic Greek",
367 "кафар.": "Katharevousa",
368 "мальдивский": "Maldivian",
369 "традиц.": "traditional",
370 "у": "Wu",
371 "упрощ.": "simplified",
372 "южноминьский": "Min",
373 "курманджи": "Kurmanji",
374 "сорани": "Sorani",
375 "севернокурдский": "Kurmanji",
376 "южнокурдский": "Southern Kurdish",
377 "кириллица": "Cyrillic",
378 "глаголица": "Glagolitic",
379 "араб.": "Arabic",
380 "письменный": "Written-Form", # italic tag
381 "устный": "colloquial",
382}
384MORPHOLOGICAL_TEMPLATE_TAGS = {
385 # "Шаблон:inflection/ru/noun/text" used in "сущ-ru"
386 "одушевлённое": "animate",
387 "неодушевлённое": "inanimate",
388 "одушевлённое или неодушевлённое": ["animate", "inanimate"],
389 "неодушевлённое или одушевлённое": ["animate", "inanimate"],
390 "мужской род": "masculine",
391 "женский род": "feminine",
392 "средний род": "neuter",
393 "общий род (может согласовываться с другими частями речи как мужского": "common", # noqa: E501
394 "мужской или женский род": ["masculine", "feminine"],
395 "мужской или средний род": ["masculine", "neuter"],
396 "женский или мужской род": ["masculine", "feminine"],
397 "женский или средний род": ["feminine", "neuter"],
398 "средний или мужской род": ["masculine", "neuter"],
399 "средний или женский род": ["feminine", "neuter"],
400 "несклоняемое": "indeclinable",
401 "адъективное": "adjective",
402 "местоименное": "pronominal",
403 # https://en.wikipedia.org/wiki/Russian_declension
404 "1-е": "declension-1",
405 "2-е": "declension-2",
406 "3-е": "declension-3",
407 "2-е (5-e)": ["declension-1", "declension-5"],
408 # Шаблон:inflection/ru/adj
409 "качественное": "qualitative",
410 "относительное": "relative",
411 "притяжательное": "possessive",
412 # verb tags from "Шаблон:Гл-блок"
413 "совершенный вид": "perfect",
414 "несовершенный вид": "imperfective",
415 "двувидовой": "biaspectual",
416 "непереходный": "intransitive",
417 "переходный": "transitive",
418 "безличный": "impersonal",
419 "возвратный": "reflexive",
420}
422ALL_TAGS = {
423 **STYLE_TAGS,
424 **GRAMMATICAL_TAGS,
425 **OTHER_TAGS,
426 **CASE_TAGS,
427 **TENSE_TAGS,
428 **MOOD_TAGS,
429 **PERSON_TAGS,
430 **VOICE_TAGS,
431 **NUMBER_TAGS,
432 **TRANSLATION_TAGS,
433}
436def translate_raw_tags(data: WordEntry) -> None:
437 raw_tags = []
438 for raw_tag in data.raw_tags:
439 raw_tag_lower = raw_tag.lower()
440 if raw_tag_lower in ALL_TAGS:
441 tr_data = ALL_TAGS[raw_tag_lower]
442 if isinstance(tr_data, str):
443 data.tags.append(tr_data)
444 elif isinstance(tr_data, list): 444 ↛ 438line 444 didn't jump to line 438 because the condition on line 444 was always true
445 data.tags.extend(tr_data)
446 elif hasattr(data, "topics"):
447 tr_data = ""
448 if raw_tag_lower in TOPICS:
449 tr_data = TOPICS[raw_tag_lower]
450 elif raw_tag_lower in SLANG_TOPICS: 450 ↛ 454line 450 didn't jump to line 454 because the condition on line 450 was always true
451 tr_data = SLANG_TOPICS[raw_tag_lower]
452 if "slang" not in data.tags: 452 ↛ 454line 452 didn't jump to line 454 because the condition on line 452 was always true
453 data.tags.append("slang")
454 if isinstance(tr_data, str) and len(tr_data) > 0: 454 ↛ 456line 454 didn't jump to line 456 because the condition on line 454 was always true
455 data.topics.append(tr_data)
456 elif isinstance(tr_data, list):
457 data.topics.extend(tr_data)
458 else:
459 raw_tags.append(raw_tag)
460 data.raw_tags = raw_tags