Commit 25c9d72f authored by Veronika's avatar Veronika
Browse files

Implement ich->er rule for predicates, fix some bugs, other small modifications

parent 330d8817
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
from morph import Morph
from Genders import Gender
from utils import *

class Protagonist:
    """
@@ -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()

@@ -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


+8 −0
Original line number Diff line number Diff line
@@ -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)

@@ -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
+14 −4
Original line number Diff line number Diff line
@@ -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] == "" or self.lemmas[i] == "můj") and "p1" in self.tags[i]:
                if self.lemmas[i] == "" 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




+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ class Member(Enum):
    coord = '<coord>'

    # not as described members
    verb = 'verb'
    pred = 'pred'
    other = 'other'

    # as described members
+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)

@@ -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