Loading classes/Protagonist.py +4 −4 Original line number Diff line number Diff line from morph import Morph from Genders import Gender from utils import * class Protagonist: """ Loading @@ -18,7 +19,7 @@ class Protagonist: """ generated = Morph.get_wt(self.name) if generated: return generated return list(filter(lambda f: "nS" in f[1], generated)) return self.load_own_forms() Loading Loading @@ -62,9 +63,8 @@ class Protagonist: 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]) g = get_tag_part(tag, "g") return Gender(g) return Gender.MASC # default gender i guess Loading classes/Sentence.py +8 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class Sentence: [], {},# TODO self.anaphors[word_form], False) # TODO direct speech, anaphors if self._is_word_predicate(word_form, member): member = Member.pred words.append(word) self._add_dependencies(words) Loading Loading @@ -62,5 +64,11 @@ class Sentence: if word.parent_idx == -1: return word def _is_word_predicate(self, word_form: str, member): if len(member) > 0: return False tag = Morph.get_tag(word_form) return word_form[1] == "5" def rephrase(self, form: Form): pass No newline at end of file classes/Word.py +14 −4 Original line number Diff line number Diff line Loading @@ -34,14 +34,24 @@ class Word: elif form == Form.ER: pass def is_real_word(self) -> bool: return "<" not in self.word def _ich_to_er(self, protg: Protagonist): if self.member == Member.pred: self.new_form = icher_rule_replace_predicates(self) elif self.member == Member.auxiliary_verb: pass else: for i in range(len(self.lemmas)): if (self.lemmas[i] == "já" or self.lemmas[i] == "můj") and "p1" in self.tags[i]: if self.lemmas[i] == "já" and "p1" in self.tags[i]: self.new_form = icher_rule_replace_me_forms(self.tags[i], self.member, protg) return elif self.lemmas[i] == "můj" and "p1" in self.tags[i]: self.new_form = icher_rule_replace_mine_forms(self.tags[i], protg) return Loading enums/Members.py +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ class Member(Enum): coord = '<coord>' # not as described members verb = 'verb' pred = 'pred' other = 'other' # as described members Loading icher_rules.py +35 −2 Original line number Diff line number Diff line from morph import Morph from Members import Member from Protagonist import Protagonist from Genders import Gender from random import random from utils import * PROTG_NAME_USAGE_PROBABILITY = 0.7 def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): gtag = "g" + protg.gender.name if decide_use_name(): case = get_tag_part(tag, "c") filtered = list(filter(lambda f: gtag in f[1] and "c" + case in f[1], protg.forms)) if filtered: return filtered[0] new_tag = tag.replace("p1", "p3" + gtag) new_forms = Morph.get_words("on", new_tag) Loading @@ -12,5 +23,27 @@ def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): return new_forms[0] def icher_rule_replace_mine_forms(): pass def icher_rule_replace_mine_forms(tag: str, protg: Protagonist): # new_tag = tag.replace("xOp1", "p3") + "xO" # kdyz vertical generuje set (taguje ajka) new_tag = tag.replace("p1", "p3") form = "její" if protg.gender == Gender.F else "jeho" # TODO načítání i přivlastnovaci tvary jmena? zatim nahrazovat zajmenem new_form = Morph.get_words(form, new_tag)[0] return new_form def icher_rule_replace_predicates(word): for tag in word.tags: # present or future indicative form if "p1" in tag and ("mI" in tag or "mB" in tag): new_tag = tag.replace("p1", "p3") new_form = Morph.get_words(word.lemmas[0], new_tag)[0] # todo? return new_form # other cases return word.word def decide_use_name() -> bool: rand = random() return rand < PROTG_NAME_USAGE_PROBABILITY Loading
classes/Protagonist.py +4 −4 Original line number Diff line number Diff line from morph import Morph from Genders import Gender from utils import * class Protagonist: """ Loading @@ -18,7 +19,7 @@ class Protagonist: """ generated = Morph.get_wt(self.name) if generated: return generated return list(filter(lambda f: "nS" in f[1], generated)) return self.load_own_forms() Loading Loading @@ -62,9 +63,8 @@ class Protagonist: 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]) g = get_tag_part(tag, "g") return Gender(g) return Gender.MASC # default gender i guess Loading
classes/Sentence.py +8 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class Sentence: [], {},# TODO self.anaphors[word_form], False) # TODO direct speech, anaphors if self._is_word_predicate(word_form, member): member = Member.pred words.append(word) self._add_dependencies(words) Loading Loading @@ -62,5 +64,11 @@ class Sentence: if word.parent_idx == -1: return word def _is_word_predicate(self, word_form: str, member): if len(member) > 0: return False tag = Morph.get_tag(word_form) return word_form[1] == "5" def rephrase(self, form: Form): pass No newline at end of file
classes/Word.py +14 −4 Original line number Diff line number Diff line Loading @@ -34,14 +34,24 @@ class Word: elif form == Form.ER: pass def is_real_word(self) -> bool: return "<" not in self.word def _ich_to_er(self, protg: Protagonist): if self.member == Member.pred: self.new_form = icher_rule_replace_predicates(self) elif self.member == Member.auxiliary_verb: pass else: for i in range(len(self.lemmas)): if (self.lemmas[i] == "já" or self.lemmas[i] == "můj") and "p1" in self.tags[i]: if self.lemmas[i] == "já" and "p1" in self.tags[i]: self.new_form = icher_rule_replace_me_forms(self.tags[i], self.member, protg) return elif self.lemmas[i] == "můj" and "p1" in self.tags[i]: self.new_form = icher_rule_replace_mine_forms(self.tags[i], protg) return Loading
enums/Members.py +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ class Member(Enum): coord = '<coord>' # not as described members verb = 'verb' pred = 'pred' other = 'other' # as described members Loading
icher_rules.py +35 −2 Original line number Diff line number Diff line from morph import Morph from Members import Member from Protagonist import Protagonist from Genders import Gender from random import random from utils import * PROTG_NAME_USAGE_PROBABILITY = 0.7 def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): gtag = "g" + protg.gender.name if decide_use_name(): case = get_tag_part(tag, "c") filtered = list(filter(lambda f: gtag in f[1] and "c" + case in f[1], protg.forms)) if filtered: return filtered[0] new_tag = tag.replace("p1", "p3" + gtag) new_forms = Morph.get_words("on", new_tag) Loading @@ -12,5 +23,27 @@ def icher_rule_replace_me_forms(tag: str, member: Member, protg: Protagonist): return new_forms[0] def icher_rule_replace_mine_forms(): pass def icher_rule_replace_mine_forms(tag: str, protg: Protagonist): # new_tag = tag.replace("xOp1", "p3") + "xO" # kdyz vertical generuje set (taguje ajka) new_tag = tag.replace("p1", "p3") form = "její" if protg.gender == Gender.F else "jeho" # TODO načítání i přivlastnovaci tvary jmena? zatim nahrazovat zajmenem new_form = Morph.get_words(form, new_tag)[0] return new_form def icher_rule_replace_predicates(word): for tag in word.tags: # present or future indicative form if "p1" in tag and ("mI" in tag or "mB" in tag): new_tag = tag.replace("p1", "p3") new_form = Morph.get_words(word.lemmas[0], new_tag)[0] # todo? return new_form # other cases return word.word def decide_use_name() -> bool: rand = random() return rand < PROTG_NAME_USAGE_PROBABILITY