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)
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) + '니'
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 '워')
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
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)
def get_h_irregular_stem2(prefix, initial): return prefix + jamo.compose(initial, 'ᅢ', None)
def get_s_irregular_stem2(prefix, initial, vowel): return prefix + jamo.compose(initial, vowel, None) + get_jamo_after_vowel(vowel)
def get_t_irregular_stem2(prefix, initial, vowel): return prefix + jamo.compose(initial, vowel, final_l) + get_jamo_after_vowel(vowel)