Beispiel #1
0
def get_eu_stem2(stem1, initial):
    if stem1[-1] == '쓰':  # 쓰다 derivatives always conjugate as 쓰다
        return stem1[:-1] + '써'
    elif len(stem1) > 1:
        letters = jamo.decompose(stem1[-2])
        if letters[1] == 'ᅡ':
            return stem1[:-1] + jamo.compose(initial, 'ᅡ', None)
        else:
            return stem1[:-1] + jamo.compose(initial, 'ᅥ', None)
Beispiel #2
0
def get_irregular_stem3(stem1):
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 3:
        if letters[2] == stem2.final_s:
            return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                             None) + stem3_final
        elif letters[2] == stem2.final_t:
            return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                             stem2.final_l) + stem3_final
        elif letters[2] == stem2.final_p:
            return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                             None) + '우'
        elif letters[2] == stem2.final_l:
            return stem1[:-1] + jamo.compose(letters[0], letters[1], None)
    raise RuntimeError(
        f'{stem2.stem1_to_word(stem1)} cannot be irregular verb')
def get_present_determiner(word):
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 3 and letters[2] == stem2.final_l:
        return stem1[:-1] + jamo.compose(letters[0], letters[1], None) + '는'
    else:
        return stem1 + '는'
def get_plain_interrogative(word: str):
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 3 and letters[2] == stem2.final_l:
        return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                         None) + '니'  # '냐'
    else:
        return stem1 + '니'  # '으' + '냐'
def get_eupsi(word):
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 3 and letters[2] != stem2.final_l:
        return stem1 + '읍시'
    else:
        return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                         stem2.final_p) + '시'
def get_seumni(word):
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 3 and letters[2] != stem2.final_l:
        return stem1 + polite_formal_suffix
    else:
        return stem1[:-1] + jamo.compose(letters[0], letters[1],
                                         stem2.final_p) + '니'
Beispiel #7
0
def get_p_irregular_stem2(prefix, initial, vowel):
    # 롭다 - never 2 jamo, so always gets 워
    # 곱다 and 돕다 are only producing 와
    initial_k = 'ᄀ'
    initial_t = 'ᄃ'
    gopda_or_dopda = initial in (initial_k, initial_t)
    return prefix + jamo.compose(initial, vowel, None) + \
        ('와' if is_bright_vowel(vowel) and len(prefix) == 0 and gopda_or_dopda else '워')
Beispiel #8
0
def get_leu_irregular_stem2(prefix):
    if len(prefix) == 0:
        raise RuntimeError('르다 is not a verb')
    letters = jamo.decompose(prefix[-1])
    if len(letters) == 3:
        raise RuntimeError(f'{prefix}르다 is not a 르 verb')
    return prefix[:-1] + jamo.compose(letters[0], letters[1], final_l) + (
        '라' if is_bright_vowel(letters[1]) else '러')
def get_plain(word: str, adjective: bool):
    if adjective:
        return word
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if len(letters) == 2 or letters[2] == stem2.final_l:
        return stem1[:-1] + jamo.compose(
            letters[0], letters[1],
            stem2.final_n) + word_ending  # final l -> n
    else:
        return stem1 + '는' + word_ending
 def get(word, tense: int, irregular: bool):
     if tense == NounForm.PRESENT:
         st1 = stem2.get_stem1(word)
         letters = jamo.decompose(st1[-1])
         if len(letters) == 3 and letters[2] == stem2.final_l:
             nominalization = (st1[:-1] +
                               jamo.compose(letters[0], letters[1], 'ᆱ'))
         else:
             nominalization = stem2.get_stem1(word) + '음'
         return [nominalization, stem2.get_stem1(word) + '기']
     elif tense == NounForm.PAST:
         past = get_past(word, irregular)
         return [past + '음', past + '기']
def get_past_and_future_determiner(word, irregular, regular_ending,
                                   p_irregular_ending, ending_final):
    stem1 = stem2.get_stem1(word)
    letters = jamo.decompose(stem1[-1])
    if irregular and len(letters) == 3:
        if letters[2] == stem2.final_s:
            return stem1[:-1] + jamo.compose(
                letters[0], letters[1], None) + regular_ending  # s removed
        elif letters[2] == stem2.final_t:
            return stem1[:-1] + jamo.compose(
                letters[0], letters[1],
                stem2.final_l) + regular_ending  # t -> l
        elif letters[2] == stem2.final_p:
            return stem1[:-1] + jamo.compose(
                letters[0], letters[1],
                None) + p_irregular_ending  # p -> un/ul

    if len(letters) == 2 or letters[2] == stem2.final_l or letters[
            2] == stem2.final_h:
        return stem1[:-1] + jamo.compose(letters[0], letters[1], ending_final)
    else:
        return stem1 + regular_ending
Beispiel #12
0
def get_regular_stem2(stem1):
    letters = jamo.decompose(stem1[-1])
    vowel = letters[1]
    if len(letters) == 3:
        # if vowel in ('ᅩ', 'ᅣ', 'ᅪ'):
        return stem1 + ('아' if is_bright_vowel(vowel) else '어')
    else:
        if letters[1] == 'ᅳ':  # consider not irregular
            return get_eu_stem2(stem1, letters[0])
        replace_to = {'ᅩ': 'ᅪ', 'ᅮ': 'ᅯ', 'ᅵ': 'ᅧ'}
        vowel_to = replace_to.get(vowel)
        if vowel_to:
            return stem1[:-1] + jamo.compose(letters[0], vowel_to, None)
        else:
            return stem1
def get_past(word, irregular):
    stem = stem2.get_stem2(word, irregular)
    letters = jamo.decompose(stem[-1])
    assert (len(letters) == 2)
    return stem[:-1] + jamo.compose(letters[0], letters[1], final_ss)
Beispiel #14
0
def get_h_irregular_stem2(prefix, initial):
    return prefix + jamo.compose(initial, 'ᅢ', None)
Beispiel #15
0
def get_s_irregular_stem2(prefix, initial, vowel):
    return prefix + jamo.compose(initial, vowel,
                                 None) + get_jamo_after_vowel(vowel)
Beispiel #16
0
def get_t_irregular_stem2(prefix, initial, vowel):
    return prefix + jamo.compose(initial, vowel,
                                 final_l) + get_jamo_after_vowel(vowel)