Coverage for src/wiktextract/extractor/ru/tags.py: 85%

41 statements  

« prev     ^ index     » next       coverage.py v7.9.0, created at 2025-06-13 07:43 +0000

1from typing import Union 

2 

3from .models import WordEntry 

4 

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 "обсц.": "vulgar", 

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} 

69 

70# Предметные области 

71TOPICS = { 

72 "авиац.": "aeronautics", 

73 "автомоб.": "automotive", 

74 "агрон.": "agriculture", 

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} 

203 

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} 

221 

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 "исх. п.": "ablative", 

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 "прил.": "adjective", 

256 # "прош.": "", 

257 # "разд. п.": "", 

258 "род. п.": "genitive", 

259 "собир.": "collective", 

260 # "ср. р.": "", 

261 "статив.": "stative", 

262 "субстантивир.": "substantive", 

263 "сущ.": "noun", 

264 "тв. п.": "instrumental", 

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 # Шаблон:мест ru п1*b 

283 "с.": "neuter", 

284 "в. (^(одуш.)/_(неодуш.))": ["accusative", "animate", "inanimate"], 

285 # Шаблон:словоформы tt 

286 "прит.": "possessive", 

287 "1-е": "first-person", 

288 "2-е": "second-person", 

289 "3-е": "third-person", 

290 # Template:гл ru ^bСВ 

291 "пр. действ. прош.": ["active", "participle", "past"], 

292 "деепр. прош.": ["adverbial", "participle", "past"], 

293 "пр. страд. прош.": ["passive", "participle", "past"], 

294 "прич. страд. прош.": ["passive", "participle", "past"], 

295 # Template:гл ru 2a 

296 "пр. действ. наст.": ["active", "participle", "present"], 

297 "деепр. наст.": ["adverbial", "participle", "present"], 

298 "пр. страд. наст.": ["passive", "participle", "present"], 

299} 

300 

301# Прочие сокращения 

302OTHER_TAGS = { 

303 "букв.": "literary", 

304 # "искаж.": "искажённое", 

305 "неправ.": "irregular", 

306 "перен.": "figuratively", 

307 "редк.": "rare", 

308 # "тж.": "", # Шаблон:тж. 

309 "общая": "indefinite", 

310 "опред.": "definite", 

311 "счётн.": "count-form", 

312 "наречия": "adverb", 

313 "имена собственные": "proper-noun", 

314 "причастия": "participle", 

315 "деепричастия": ["adverbial", "participle"], 

316 "топонимы": "toponymic", 

317 "неопр.": "indefinite", 

318 "опр.": "definite", 

319 "imperfectum": "imperfect", 

320 "perfectum": "perfect", 

321 "gerundium": "gerund", 

322 "gerundivum": "gerundive", 

323 "plusquamperfectum": "pluperfect", 

324 "инфинитив": "infinitive", 

325 "герундий": "gerund", 

326 "предикативы": "predicative", 

327 "сша": "USA", 

328 "превосх. формы": "superior", 

329 "местоимения": "pronoun", 

330 "ум.-ласк.": "diminutive", 

331 "междометия": "interjection", 

332 # Template:гл cu IV 

333 "аорист": "aorist", 

334 "нетемат.": "non-thematic", 

335 "темат.": "thematic", 

336 "предлоги": "prepositional", 

337} 

338 

339CASE_TAGS = { 

340 # Шаблон:сущ ru m a 1a 

341 "им.": "nominative", 

342 "р.": "genitive", 

343 "д.": "dative", 

344 "в.": "accusative", 

345 "тв.": "instrumental", 

346 "пр.": "prepositional", 

347 # Шаблон:сущ bg 7 

348 "зват.": "vocative", 

349 # Шаблон:сущ de (e)s er ern/n 

350 "ном.": "nominative", 

351 "ген.": "genitive", 

352 "дат.": "dative", 

353 "акк.": "accusative", 

354 # Шаблон:сущ cu (-а) 

355 # "м.": "locative", # conflict with gender tag 

356 "местный": "locative", 

357 "зв.": "vocative", 

358 # Template:падежи la 3 

359 "абл.": "ablative", 

360 "вок.": "vocative", 

361 # Template:гл la 1 

362 "supinum i": "supine-i", 

363 "supinum ii": "supine-ii", 

364 # Template:падежи tr 

365 "вин.": "accusative", 

366 "мест.": "locative", 

367 "род.": "genitive", 

368} 

369 

370TENSE_TAGS = { 

371 # Шаблон:Гл-блок 

372 "наст.": "present", 

373 "будущ.": "future", 

374 "прош.": "past", 

375 "будущее": "future", 

376 # Template:гл la 1 

377 "praesens": "present", 

378 "futūrum i": "future-i", 

379 "futūrum ii": "future-ii", 

380 "infīnitivus praesentis actīvi": ["infinitive", "present", "active"], 

381 "infīnitivus praesentis passīvi": ["infinitive", "present", "passive"], 

382 "participium praesentis actīvi": ["participle", "present", "active"], 

383 "infīnitivus perfecti actīvi": ["infinitive", "perfect", "active"], 

384 "participium perfecti passivi": ["participle", "perfect", "passive"], 

385 "participium futuri activi": ["participle", "future", "active"], 

386 # Template:гл en irreg 

387 "прош. вр.": "past", 

388 "прич. прош. вр.": ["past", "participle"], 

389 # Template:гл ru 2a-ся 

390 "наст./будущ.": ["present", "future"], 

391} 

392 

393MOOD_TAGS = { 

394 # Шаблон:Гл-блок 

395 "повелит.": "imperative", 

396 # Template:гл la 1 

397 "indicatīvus": "indicative", 

398 "coniunctīvus": "conjunctive", 

399 "imperatīvus": "imperative", 

400} 

401 

402PERSON_TAGS = { 

403 # Шаблон:Гл-блок 

404 "я": ["first-person", "singular"], 

405 "ты": ["second-person", "singular"], 

406 "он\nона\nоно": ["third-person", "singular"], 

407 "он\nона": ["third-person", "singular"], 

408 "мы": ["first-person", "plural"], 

409 "вы": ["second-person", "plural"], 

410 "они": ["third-person", "plural"], 

411 # Template:гл la 1 

412 "1 p.": "first-person", 

413 "2 p.": "second-person", 

414 "3 p.": "third-person", 

415 # Template:гл en irreg 

416 "3-е л. ед. ч.": ["third-person", "singular"], 

417} 

418 

419VOICE_TAGS = { 

420 # Шаблон:Гл-блок 

421 "пр. действ.": "active", 

422 "деепр.": "adverbial", 

423 "пр. страд.": "passive", 

424 # Template:гл la 1 

425 "act.": "active", 

426 "pass.": "passive", 

427} 

428 

429NUMBER_TAGS = { 

430 # Шаблон:сущ cu (-а) 

431 "дв. ч.": "dual", 

432 "часто мн. ч.": ["often", "plural"], 

433 # Template:гл la 1 

434 "sing.": "singular", 

435 "plur.": "plural", 

436 "sg.": "singular", 

437 "pl.": "plural", 

438} 

439 

440TRANSLATION_TAGS = { 

441 # Шаблон:перев-блок 

442 # https://en.wikipedia.org/wiki/Azerbaijani_alphabet 

443 # https://ru.wiktionary.org/wiki/Модуль:languages/data 

444 "арабск.": "Arabic", 

445 "кир.": "Cyrillic", 

446 "лат.": "Latin", 

447 "лат": "Latin", 

448 "кана": "katakana", 

449 "сир.": "Syriac", 

450 "иуд.": "Jewish", 

451 "центральный": "Central", 

452 "демот.": "Demotic Greek", 

453 "кафар.": "Katharevousa", 

454 "мальдивский": "Maldivian", 

455 "традиц.": "traditional", 

456 "у": "Wu", 

457 "упрощ.": "simplified", 

458 "южноминьский": "Min", 

459 "курманджи": "Kurmanji", 

460 "сорани": "Sorani", 

461 "севернокурдский": "Kurmanji", 

462 "южнокурдский": "Southern Kurdish", 

463 "кириллица": "Cyrillic", 

464 "глаголица": "Glagolitic", 

465 "араб.": "Arabic", 

466 "письменный": "Written-Form", # italic tag 

467 "устный": "colloquial", 

468} 

469 

470MORPHOLOGICAL_TEMPLATE_TAGS = { 

471 # "Шаблон:inflection/ru/noun/text" used in "сущ-ru" 

472 "одушевлённое": "animate", 

473 "неодушевлённое": "inanimate", 

474 "одушевлённое или неодушевлённое": ["animate", "inanimate"], 

475 "неодушевлённое или одушевлённое": ["animate", "inanimate"], 

476 "мужской род": "masculine", 

477 "женский род": "feminine", 

478 "средний род": "neuter", 

479 "общий род (может согласовываться с другими частями речи как мужского": "common", # noqa: E501 

480 "мужской или женский род": ["masculine", "feminine"], 

481 "мужской или средний род": ["masculine", "neuter"], 

482 "женский или мужской род": ["masculine", "feminine"], 

483 "женский или средний род": ["feminine", "neuter"], 

484 "средний или мужской род": ["masculine", "neuter"], 

485 "средний или женский род": ["feminine", "neuter"], 

486 "несклоняемое": "indeclinable", 

487 "адъективное": "adjective", 

488 "местоименное": "pronominal", 

489 # https://en.wikipedia.org/wiki/Russian_declension 

490 "1-е": "declension-1", 

491 "2-е": "declension-2", 

492 "3-е": "declension-3", 

493 "2-е (5-e)": ["declension-1", "declension-5"], 

494 # Шаблон:inflection/ru/adj 

495 "качественное": "qualitative", 

496 "относительное": "relative", 

497 "притяжательное": "possessive", 

498 # verb tags from "Шаблон:Гл-блок" 

499 "совершенный вид": "perfect", 

500 "несовершенный вид": "imperfective", 

501 "двувидовой": "biaspectual", 

502 "непереходный": "intransitive", 

503 "переходный": "transitive", 

504 "безличный": "impersonal", 

505 "возвратный": "reflexive", 

506} 

507 

508ALL_TAGS = { 

509 **STYLE_TAGS, 

510 **GRAMMATICAL_TAGS, 

511 **OTHER_TAGS, 

512 **CASE_TAGS, 

513 **TENSE_TAGS, 

514 **MOOD_TAGS, 

515 **PERSON_TAGS, 

516 **VOICE_TAGS, 

517 **NUMBER_TAGS, 

518 **TRANSLATION_TAGS, 

519} 

520 

521 

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

523 raw_tags = [] 

524 for raw_tag in data.raw_tags: 

525 raw_tag_lower = raw_tag.lower() 

526 if raw_tag_lower in ALL_TAGS: 

527 tr_data = ALL_TAGS[raw_tag_lower] 

528 if isinstance(tr_data, str): 

529 data.tags.append(tr_data) 

530 elif isinstance(tr_data, list): 530 ↛ 524line 530 didn't jump to line 524 because the condition on line 530 was always true

531 data.tags.extend(tr_data) 

532 elif hasattr(data, "topics"): 

533 tr_data = "" 

534 if raw_tag_lower in TOPICS: 

535 tr_data = TOPICS[raw_tag_lower] 

536 elif raw_tag_lower in SLANG_TOPICS: 536 ↛ 540line 536 didn't jump to line 540 because the condition on line 536 was always true

537 tr_data = SLANG_TOPICS[raw_tag_lower] 

538 if "slang" not in data.tags: 538 ↛ 540line 538 didn't jump to line 540 because the condition on line 538 was always true

539 data.tags.append("slang") 

540 if isinstance(tr_data, str) and len(tr_data) > 0: 540 ↛ 542line 540 didn't jump to line 542 because the condition on line 540 was always true

541 data.topics.append(tr_data) 

542 elif isinstance(tr_data, list): 

543 data.topics.extend(tr_data) 

544 else: 

545 raw_tags.append(raw_tag) 

546 else: 

547 raw_tags.append(raw_tag) 

548 data.raw_tags = raw_tags