Loading classes/Protagonist.py +10 −0 Original line number Diff line number Diff line from morph import Morph from Genders import Gender class Protagonist: """ Loading @@ -8,6 +9,7 @@ class Protagonist: def __init__(self, name: str): self.name = name self.forms = self._try_generate_forms() self.gender = self._get_gender() def _try_generate_forms(self): """ Loading Loading @@ -57,6 +59,14 @@ class Protagonist: return declined_forms def _get_gender(self): for form in self.forms: tag = form[1] for letter_index in range(0, len(tag), 2): if tag[letter_index] == "g": return Gender(tag[letter_index+1]) return Gender.MASC # default gender i guess Loading classes/Sentence.py +10 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ class Sentence: self.words = self._create_words_objects() self.root = self._find_root() self.protg = protg # self._add_parents() # self.resolved_subject = ? def _create_words_objects(self) -> List[Word]: Loading @@ -34,6 +35,7 @@ class Sentence: False) # TODO direct speech, anaphors words.append(word) self._add_dependencies(words) return words def _add_dependencies(self, words: List[Word]) -> None: Loading @@ -44,6 +46,14 @@ class Sentence: dep_idx = int(node[2]) words[dep_idx].dependents.append(words[i]) ''' def _add_parents(self) -> None: for word in self.words: if word.parent_idx == -1: continue word.parent_node = self.words[word.parent_idx] ''' def _find_root(self) -> Word: """ Method takes the Word objects list and finds the root of sentence tree. Loading classes/Word.py +30 −6 Original line number Diff line number Diff line from morph import Morph from Forms import Form from Protagonist import Protagonist from Members import Member from icher_rules import * class Word: """ Class representing a word. """ def __init__(self, index, string: str, member, parent_idx, dependents, anaphor, ds: bool): def __init__(self, index, string: str, member: Member, parent_idx, dependents, anaphor, ds: bool): self.index = index self.word = string self.lemma = Morph.get_lemma(string) # TODO self.tag = Morph.get_tag(string) self.lemmas = Morph.get_lemmas(string) # TODO self.tags = Morph.get_tags(string) # self.lts = Morph.get_lt(string) self.member = member self.parent_idx = parent_idx self.parent_node = None self.dependents = dependents self.new_form = string+"_new" self.new_form = string+"_new" # TODO delete after testing self.anaphor = anaphor self.direct_speech = ds def generate_new_form(self) -> str: # TODO return self.word def generate_new_form(self, form: Form, protg: Protagonist) -> str: # TODO if not self.is_real_word() or self.direct_speech: return if form == Form.ICH: self._ich_to_er(protg) elif form == Form.ER: pass def is_real_word(self) -> bool: return "<" not in self.word def _ich_to_er(self, protg: Protagonist): for i in range(len(self.lemmas)): if (self.lemmas[i] == "já" or self.lemmas[i] == "můj") and "p1" in self.tags[i]: self.new_form = icher_rule_replace_me_forms(self.tags[i], self.member, protg) enums/Genders.py 0 → 100644 +7 −0 Original line number Diff line number Diff line from enum import Enum class Gender(Enum): F = "F" M = "M" I = "I" N = "N" icher_rules.py 0 → 100644 +16 −0 Original line number Diff line number Diff line from morph import Morph from Members import Member from Protagonist import Protagonist def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): gtag = "g" + protg.gender.name new_tag = tag.replace("p1", "p3" + gtag) new_forms = Morph.get_words("on", new_tag) if member == Member.prep_object: return new_forms[1] return new_forms[0] def icher_rule_replace_mine_forms(): pass Loading
classes/Protagonist.py +10 −0 Original line number Diff line number Diff line from morph import Morph from Genders import Gender class Protagonist: """ Loading @@ -8,6 +9,7 @@ class Protagonist: def __init__(self, name: str): self.name = name self.forms = self._try_generate_forms() self.gender = self._get_gender() def _try_generate_forms(self): """ Loading Loading @@ -57,6 +59,14 @@ class Protagonist: return declined_forms def _get_gender(self): for form in self.forms: tag = form[1] for letter_index in range(0, len(tag), 2): if tag[letter_index] == "g": return Gender(tag[letter_index+1]) return Gender.MASC # default gender i guess Loading
classes/Sentence.py +10 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ class Sentence: self.words = self._create_words_objects() self.root = self._find_root() self.protg = protg # self._add_parents() # self.resolved_subject = ? def _create_words_objects(self) -> List[Word]: Loading @@ -34,6 +35,7 @@ class Sentence: False) # TODO direct speech, anaphors words.append(word) self._add_dependencies(words) return words def _add_dependencies(self, words: List[Word]) -> None: Loading @@ -44,6 +46,14 @@ class Sentence: dep_idx = int(node[2]) words[dep_idx].dependents.append(words[i]) ''' def _add_parents(self) -> None: for word in self.words: if word.parent_idx == -1: continue word.parent_node = self.words[word.parent_idx] ''' def _find_root(self) -> Word: """ Method takes the Word objects list and finds the root of sentence tree. Loading
classes/Word.py +30 −6 Original line number Diff line number Diff line from morph import Morph from Forms import Form from Protagonist import Protagonist from Members import Member from icher_rules import * class Word: """ Class representing a word. """ def __init__(self, index, string: str, member, parent_idx, dependents, anaphor, ds: bool): def __init__(self, index, string: str, member: Member, parent_idx, dependents, anaphor, ds: bool): self.index = index self.word = string self.lemma = Morph.get_lemma(string) # TODO self.tag = Morph.get_tag(string) self.lemmas = Morph.get_lemmas(string) # TODO self.tags = Morph.get_tags(string) # self.lts = Morph.get_lt(string) self.member = member self.parent_idx = parent_idx self.parent_node = None self.dependents = dependents self.new_form = string+"_new" self.new_form = string+"_new" # TODO delete after testing self.anaphor = anaphor self.direct_speech = ds def generate_new_form(self) -> str: # TODO return self.word def generate_new_form(self, form: Form, protg: Protagonist) -> str: # TODO if not self.is_real_word() or self.direct_speech: return if form == Form.ICH: self._ich_to_er(protg) elif form == Form.ER: pass def is_real_word(self) -> bool: return "<" not in self.word def _ich_to_er(self, protg: Protagonist): for i in range(len(self.lemmas)): if (self.lemmas[i] == "já" or self.lemmas[i] == "můj") and "p1" in self.tags[i]: self.new_form = icher_rule_replace_me_forms(self.tags[i], self.member, protg)
enums/Genders.py 0 → 100644 +7 −0 Original line number Diff line number Diff line from enum import Enum class Gender(Enum): F = "F" M = "M" I = "I" N = "N"
icher_rules.py 0 → 100644 +16 −0 Original line number Diff line number Diff line from morph import Morph from Members import Member from Protagonist import Protagonist def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): gtag = "g" + protg.gender.name new_tag = tag.replace("p1", "p3" + gtag) new_forms = Morph.get_words("on", new_tag) if member == Member.prep_object: return new_forms[1] return new_forms[0] def icher_rule_replace_mine_forms(): pass