# msd mappings from slo to ang class Msdmap(): def __init__(self): # http://nl.ijs.si/ME/V4/msd/html/msd.categories-sl.html self.pos_slo_ang = [ ("samostalnik", "S", "Noun", "N"), ("glagol", "G", "Verb", "V"), ("pridevnik", "P", "Adjective", "A"), ("prislov", "R", "Adverb", "R"), ("zaimek", "Z", "Pronoun", "P"), ("števnik", "K", "Numeral", "M"), ("predlog", "D", "Preposition", "S"), ("veznik", "V", "Conjunction", "C"), ("členek", "L", "Particle", "Q"), ("medmet", "M", "Interjection", "I"), ("okrajšava", "O", "Abbreviation", "Y"), ("neuvrščeno", "N", "Residual", "X"), ] # http://nl.ijs.si/ME/V4/msd/html/msd.values-sl.html # col: # (Value (sl), Code (sl), Attribute (sl), Category (sl), # Value (en), Code (en), Attribute (en), Category (en)) self.pos_val = [ ("arabski", "a", "zapis", "števnik", "digit", "d", "Form", "Numeral"), ("besedni", "b", "zapis", "števnik", "letter", "l", "Form", "Numeral"), ("celostni", "c", "vrsta", "zaimek", "general", "g", "Type", "Pronoun"), ("da", "d", "določnost", "pridevnik", "yes", "y", "Definiteness", "Adjective"), ("da", "d", "določnost", "števnik", "yes", "y", "Definiteness", "Numeral"), ("da", "d", "živost", "samostalnik", "yes", "y", "Animate", "Noun"), ("dajalnik", "d", "sklon", "predlog", "dative", "d", "Case", "Adposition"), ("dajalnik", "d", "sklon", "pridevnik", "dative", "d", "Case", "Adjective"), ("dajalnik", "d", "sklon", "samostalnik", "dative", "d", "Case", "Noun"), ("dajalnik", "d", "sklon", "zaimek", "dative", "d", "Case", "Pronoun"), ("dajalnik", "d", "sklon", "števnik", "dative", "d", "Case", "Numeral"), ("deležje", "d", "vrsta", "prislov", "participle", "r", "Type", "Adverb"), ("deležnik", "d", "oblika", "glagol", "participle", "p", "VForm", "Verb"), ("deležniški", "d", "vrsta", "pridevnik", "participle", "p", "Type", "Adjective"), ("dovršni", "d", "vid", "glagol", "perfective", "e", "Aspect", "Verb"), ("druga", "d", "oseba", "glagol", "second", "2", "Person", "Verb"), ("druga", "d", "oseba", "zaimek", "second", "2", "Person", "Pronoun"), ("drugi", "d", "vrsta", "števnik", "special", "s", "Type", "Numeral"), ("dvojina", "d", "število", "glagol", "dual", "d", "Number", "Verb"), ("dvojina", "d", "število", "pridevnik", "dual", "d", "Number", "Adjective"), ("dvojina", "d", "število", "samostalnik", "dual", "d", "Number", "Noun"), ("dvojina", "d", "število", "zaimek", "dual", "d", "Number", "Pronoun"), ("dvojina", "d", "število", "števnik", "dual", "d", "Number", "Numeral"), ("dvojina", "d", "število_svojine", "zaimek", "dual", "d", "Owner_Number", "Pronoun"), ("dvovidski", "v", "vid", "glagol", "biaspectual", "b", "Aspect", "Verb"), ("ednina", "e", "število", "glagol", "singular", "s", "Number", "Verb"), ("ednina", "e", "število", "pridevnik", "singular", "s", "Number", "Adjective"), ("ednina", "e", "število", "samostalnik", "singular", "s", "Number", "Noun"), ("ednina", "e", "število", "zaimek", "singular", "s", "Number", "Pronoun"), ("ednina", "e", "število", "števnik", "singular", "s", "Number", "Numeral"), ("ednina", "e", "število_svojine", "zaimek", "singular", "s", "Owner_Number", "Pronoun"), ("glavni", "g", "vrsta", "glagol", "main", "m", "Type", "Verb"), ("glavni", "g", "vrsta", "števnik", "cardinal", "c", "Type", "Numeral"), ("imenovalnik", "i", "sklon", "predlog", "nominative", "n", "Case", "Adposition"), ("imenovalnik", "i", "sklon", "pridevnik", "nominative", "n", "Case", "Adjective"), ("imenovalnik", "i", "sklon", "samostalnik", "nominative", "n", "Case", "Noun"), ("imenovalnik", "i", "sklon", "zaimek", "nominative", "n", "Case", "Pronoun"), ("imenovalnik", "i", "sklon", "števnik", "nominative", "n", "Case", "Numeral"), ("kazalni", "k", "vrsta", "zaimek", "demonstrative", "d", "Type", "Pronoun"), ("klitična", "k", "naslonskost", "zaimek", "yes", "y", "Clitic", "Pronoun"), ("lastno_ime", "l", "vrsta", "samostalnik", "proper", "p", "Type", "Noun"), ("mestnik", "m", "sklon", "predlog", "locative", "l", "Case", "Adposition"), ("mestnik", "m", "sklon", "pridevnik", "locative", "l", "Case", "Adjective"), ("mestnik", "m", "sklon", "samostalnik", "locative", "l", "Case", "Noun"), ("mestnik", "m", "sklon", "zaimek", "locative", "l", "Case", "Pronoun"), ("mestnik", "m", "sklon", "števnik", "locative", "l", "Case", "Numeral"), ("množina", "m", "število", "glagol", "plural", "p", "Number", "Verb"), ("množina", "m", "število", "pridevnik", "plural", "p", "Number", "Adjective"), ("množina", "m", "število", "samostalnik", "plural", "p", "Number", "Noun"), ("množina", "m", "število", "zaimek", "plural", "p", "Number", "Pronoun"), ("množina", "m", "število", "števnik", "plural", "p", "Number", "Numeral"), ("množina", "m", "število_svojine", "zaimek", "plural", "p", "Owner_Number", "Pronoun"), ("moški", "m", "spol", "glagol", "masculine", "m", "Gender", "Verb"), ("moški", "m", "spol", "pridevnik", "masculine", "m", "Gender", "Adjective"), ("moški", "m", "spol", "samostalnik", "masculine", "m", "Gender", "Noun"), ("moški", "m", "spol", "zaimek", "masculine", "m", "Gender", "Pronoun"), ("moški", "m", "spol", "števnik", "masculine", "m", "Gender", "Numeral"), ("moški", "m", "spol_svojine", "zaimek", "masculine", "m", "Owner_Gender", "Pronoun"), ("namenilnik", "m", "oblika", "glagol", "supine", "u", "VForm", "Verb"), ("navezna", "z", "naslonskost", "zaimek", "bound", "b", "Clitic", "Pronoun"), ("ne", "n", "določnost", "pridevnik", "no", "n", "Definiteness", "Adjective"), ("ne", "n", "določnost", "števnik", "no", "n", "Definiteness", "Numeral"), ("ne", "n", "živost", "samostalnik", "no", "n", "Animate", "Noun"), ("nedoločeno", "n", "stopnja", "pridevnik", "positive", "p", "Degree", "Adjective"), ("nedoločeno", "n", "stopnja", "prislov", "positive", "p", "Degree", "Adverb"), ("nedoločni", "n", "vrsta", "zaimek", "indefinite", "i", "Type", "Pronoun"), ("nedoločnik", "n", "oblika", "glagol", "infinitive", "n", "VForm", "Verb"), ("nedovršni", "n", "vid", "glagol", "progressive", "p", "Aspect", "Verb"), ("nezanikani", "n", "nikalnost", "glagol", "no", "n", "Negative", "Verb"), ("nikalni", "l", "vrsta", "zaimek", "negative", "z", "Type", "Pronoun"), ("občno_ime", "o", "vrsta", "samostalnik", "common", "c", "Type", "Noun"), ("orodnik", "o", "sklon", "predlog", "instrumental", "i", "Case", "Adposition"), ("orodnik", "o", "sklon", "pridevnik", "instrumental", "i", "Case", "Adjective"), ("orodnik", "o", "sklon", "samostalnik", "instrumental", "i", "Case", "Noun"), ("orodnik", "o", "sklon", "zaimek", "instrumental", "i", "Case", "Pronoun"), ("orodnik", "o", "sklon", "števnik", "instrumental", "i", "Case", "Numeral"), ("osebni", "o", "vrsta", "zaimek", "personal", "p", "Type", "Pronoun"), ("oziralni", "z", "vrsta", "zaimek", "relative", "r", "Type", "Pronoun"), ("podredni", "d", "vrsta", "veznik", "subordinating", "s", "Type", "Conjunction"), ("pogojnik", "g", "oblika", "glagol", "conditional", "c", "VForm", "Verb"), ("pomožni", "p", "vrsta", "glagol", "auxiliary", "a", "Type", "Verb"), ("povratni", "p", "vrsta", "zaimek", "reflexive", "x", "Type", "Pronoun"), ("presežnik", "s", "stopnja", "pridevnik", "superlative", "s", "Degree", "Adjective"), ("presežnik", "s", "stopnja", "prislov", "superlative", "s", "Degree", "Adverb"), ("prihodnjik", "p", "oblika", "glagol", "future", "f", "VForm", "Verb"), ("primernik", "p", "stopnja", "pridevnik", "comparative", "c", "Degree", "Adjective"), ("primernik", "r", "stopnja", "prislov", "comparative", "c", "Degree", "Adverb"), ("priredni", "p", "vrsta", "veznik", "coordinating", "c", "Type", "Conjunction"), ("program", "p", "vrsta", "neuvrščeno", "program", "p", "Type", "Residual"), ("prva", "p", "oseba", "glagol", "first", "1", "Person", "Verb"), ("prva", "p", "oseba", "zaimek", "first", "1", "Person", "Pronoun"), ("rimski", "r", "zapis", "števnik", "roman", "r", "Form", "Numeral"), ("rodilnik", "r", "sklon", "predlog", "genitive", "g", "Case", "Adposition"), ("rodilnik", "r", "sklon", "pridevnik", "genitive", "g", "Case", "Adjective"), ("rodilnik", "r", "sklon", "samostalnik", "genitive", "g", "Case", "Noun"), ("rodilnik", "r", "sklon", "zaimek", "genitive", "g", "Case", "Pronoun"), ("rodilnik", "r", "sklon", "števnik", "genitive", "g", "Case", "Numeral"), ("sedanjik", "s", "oblika", "glagol", "present", "r", "VForm", "Verb"), ("splošni", "p", "vrsta", "pridevnik", "general", "g", "Type", "Adjective"), ("splošni", "s", "vrsta", "prislov", "general", "g", "Type", "Adverb"), ("srednji", "s", "spol", "glagol", "neuter", "n", "Gender", "Verb"), ("srednji", "s", "spol", "pridevnik", "neuter", "n", "Gender", "Adjective"), ("srednji", "s", "spol", "samostalnik", "neuter", "n", "Gender", "Noun"), ("srednji", "s", "spol", "zaimek", "neuter", "n", "Gender", "Pronoun"), ("srednji", "s", "spol", "števnik", "neuter", "n", "Gender", "Numeral"), ("srednji", "s", "spol_svojine", "zaimek", "neuter", "n", "Owner_Gender", "Pronoun"), ("svojilni", "s", "vrsta", "pridevnik", "possessive", "s", "Type", "Adjective"), ("svojilni", "s", "vrsta", "zaimek", "possessive", "s", "Type", "Pronoun"), ("tipkarska", "t", "vrsta", "neuvrščeno", "typo", "t", "Type", "Residual"), ("tožilnik", "t", "sklon", "predlog", "accusative", "a", "Case", "Adposition"), ("tožilnik", "t", "sklon", "pridevnik", "accusative", "a", "Case", "Adjective"), ("tožilnik", "t", "sklon", "samostalnik", "accusative", "a", "Case", "Noun"), ("tožilnik", "t", "sklon", "zaimek", "accusative", "a", "Case", "Pronoun"), ("tožilnik", "t", "sklon", "števnik", "accusative", "a", "Case", "Numeral"), ("tretja", "t", "oseba", "glagol", "third", "3", "Person", "Verb"), ("tretja", "t", "oseba", "zaimek", "third", "3", "Person", "Pronoun"), ("tujejezično", "j", "vrsta", "neuvrščeno", "foreign", "f", "Type", "Residual"), ("velelnik", "v", "oblika", "glagol", "imperative", "m", "VForm", "Verb"), ("vprašalni", "v", "vrsta", "zaimek", "interrogative", "q", "Type", "Pronoun"), ("vrstilni", "v", "vrsta", "števnik", "ordinal", "o", "Type", "Numeral"), ("zaimkovni", "z", "vrsta", "števnik", "pronominal", "p", "Type", "Numeral"), ("zanikani", "d", "nikalnost", "glagol", "yes", "y", "Negative", "Verb"), ("ženski", "z", "spol", "glagol", "feminine", "f", "Gender", "Verb"), ("ženski", "z", "spol", "pridevnik", "feminine", "f", "Gender", "Adjective"), ("ženski", "z", "spol", "samostalnik", "feminine", "f", "Gender", "Noun"), ("ženski", "z", "spol", "zaimek", "feminine", "f", "Gender", "Pronoun"), ("ženski", "z", "spol", "števnik", "feminine", "f", "Gender", "Numeral"), ("ženski", "z", "spol_svojine", "zaimek", "feminine", "f", "Owner_Gender", "Pronoun"), ] def pos_slo_ang_map(self, col, query): for pos in self.pos_slo_ang: if pos[col] == query: return pos raise ValueError("Wrong part of speech.") def pos_val_map(self, en_category, col, query): for pos in self.pos_val: if pos[7] == en_category and pos[col] == query: return pos raise ValueError("Wrong part of speech value.") def msd_from_slo(self, msd): pos = self.pos_slo_ang_map(1, msd[0]) category = pos[2] attr = [self.pos_val_map(category, 1, m) for m in msd[1:] if m != "-"] return pos, attr if __name__ == "__main__": test_msds = [ "Soser", "Ppnzmm", "Gp-d-mz" ] for msd in test_msds: print(Msdmap().msd_from_slo(msd))