Пример #1
0
def midword_syllable_starts_without_onset(sy):
    onset = sy.elems[0]
    if is_vowel(onset):
        return False
    if not sy.starts_midword:
        return False
    return not onset.is_onset
Пример #2
0
 def __init__(self, syllable, is_stressed=Unknown):
     self.base_syllable = syllable
     self.elems = [
         make_long(elem) if is_vowel(elem) and syllable.is_open else elem
             for elem in syllable.elems
     ]
     self.is_stressed = is_stressed
Пример #3
0
    def _make_str(self, f, tie, accent_f):
        result = ''
        prev_elem = None

        for elem in self.elems:
            if prev_elem is not None and elem.is_at_start_of_word:
                result += tie
            if self.is_stressed is True and is_vowel(elem):
                result += accent_f(f(elem))
            else:
                result += f(elem)
            prev_elem = elem
        return result
Пример #4
0
    def score_by_onsets_and_codas(self):
        score = 0
        for sy in self.syllables:
            if is_vowel(sy.elems[0]):
                score += 1
            elif is_onset(sy.elems[0]):
                score += 1

            if len(sy.elems) == 1:
                continue
            
            if is_consonant(sy.elems[-1]):
                if is_midword_coda(sy.elems[-1]):
                    score += 1
        return score
Пример #5
0
def next_chunk(letters):
    result = []
    while len(letters):
        letter = letters[0]
        if not is_consonant(letter):
            if len(result):
                return result, letters
            else:
                return [letter], letters[1:]
        else:
            result.append(letter)
            letters = letters[1:]
    return result, letters

CC = TestVar('CC', lambda x: isinstance(x, ConsonantCluster))
V = TestVar('V', lambda x: is_vowel(x))
CC_at_start_of_word = TestVar('CC_at_start_of_word',
    lambda x: isinstance(x, ConsonantCluster) and x.is_at_start_of_word
)
CC_at_end_of_word = TestVar('CC_at_end_of_word',
    lambda x: isinstance(x, ConsonantCluster) and x.is_at_end_of_word
)
NONONSET_at_end_of_word = TestVar('NONONSET_at_end_of_word',
    lambda x: (
        isinstance(x, ConsonantCluster)
        and
        x.is_at_end_of_word
        and
        x.text not in onsets
    )
)
Пример #6
0
 def is_open(self):
     for i in range(len(self.elems)):
         if is_vowel(self.elems[i]):
             break
     return i + 1 >= len(self.elems)
Пример #7
0
class Weight:

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return self.name

Heavy = Weight('Heavy')
Light = Weight('Light')
HeavyOrLight = Weight('HeavyOrLight')


CC1 = TestVar('CC1', lambda x: isinstance(x, ConsonantCluster))
CC2 = TestVar('CC2', lambda x: isinstance(x, ConsonantCluster))
V1 = TestVar('V1', lambda x: is_vowel(x))
V2 = TestVar('V2', lambda x: is_vowel(x))

parse_syllables = CombinatoricMap(ignore_matched_input,
    (Var('SYLLABLE',
        Target(Optional(CC1), V1, Optional(CC2, NotFollowedBy(V2)))),
     ReplaceWith([Make(Syllable, Var('SYLLABLE'))]))
)

def midword_syllable_starts_without_onset(sy):
    onset = sy.elems[0]
    if is_vowel(onset):
        return False
    if not sy.starts_midword:
        return False
    return not onset.is_onset