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

40 statements  

« prev     ^ index     » next       coverage.py v7.6.4, created at 2024-10-25 10:11 +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 # "обсц.": "обсценное", 

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 # "агрон.": "агрономическое", 

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 # "исх. п.": "исходный падеж", 

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} 

283 

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

285OTHER_TAGS = { 

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

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

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

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

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

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

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

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

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

295} 

296 

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} 

317 

318TENSE_TAGS = { 

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

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

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

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

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

324} 

325 

326MOOD_TAGS = { 

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

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

329} 

330 

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} 

340 

341VOICE_TAGS = { 

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

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

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

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

346} 

347 

348NUMBER_TAGS = { 

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

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

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

352} 

353 

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} 

383 

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} 

421 

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} 

434 

435 

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