Commit 330d8817 authored by Veronika's avatar Veronika
Browse files

Implement few rules, fix bugs, edit strucutre, add genders class

parent 89347e44
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
from morph import Morph
from Genders import Gender

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




+10 −0
Original line number Diff line number Diff line
@@ -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]:
@@ -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:
@@ -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.
+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] == "" 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