def test_akkadian_cv_pattern(self): """Test Akkadian CV pattern method""" cv_patterner = AkkadianCVPattern() word = "iparras" cv_pattern = cv_patterner.get_cv_pattern(word, pprint=True) target = "V₁C₁V₂C₂C₂V₂C₃" self.assertEquals(cv_pattern, target)
class BoundForm(object): """ Return the bound form of a noun, suitable for adding suffixed pronouns. """ def __init__(self): self.syllabifier = Syllabifier() self.stemmer = Stemmer() self.cv_patterner = CVPattern() def get_bound_form(self, noun, gender): """Return bound form of nound, given its gender.""" syllables = self.syllabifier.syllabify(noun) stem = self.stemmer.get_stem(noun, gender) cv_pattern = self.cv_patterner.get_cv_pattern(stem) # Based on Huehnergard Appendix 6.C.1: base in -VC if [letter[0] for letter in cv_pattern[-2:]] == ['V', 'C'] or stem in ['nakr']: # a. 2-syllable if len(syllables) > 2: # awīlum > awīl, nakrum > naker if stem in ['nakr']: return 'naker' else: return stem # b. 1-syllable elif len(syllables) > 1: # bēlum > bēl return stem # c. abum, aḫum if stem in ['ab', 'aḫ']: return stem + 'i' # Appendix 6.C.2: base in -C₁C₁ if cv_pattern[-1][:2] == cv_pattern[-2][:2]: # a. 1-syllable if 3 > len(syllables) > 1: return stem + 'i' # b. 2-syllable, -tt if len(syllables) > 2 and cv_pattern[-1][2] + cv_pattern[-2][2] == 'tt': return stem + 'i' # c. 2-syllable, other if len(syllables) > 2: return stem[:-1] # Appendix 6.C.3: base in -C₁C₂, C₂ ≠ t, i.e. pVrs if cv_pattern[-1][0] == cv_pattern[-2][0] and cv_pattern[-1][1] != cv_pattern[-2][1]: return stem[:-1] + stem[1] + stem[-1] # Appendix 6.C.4: base in -Ct (fem.) if cv_pattern[-1][2] == 't' and cv_pattern[-2][0] == 'C': if len(syllables) > 2: return stem + 'i' # Need to deal with fem. Ptcpl. māḫirtum -> māḫirat if len(syllables) > 1: # These are case by case if stem in ['qīšt']: return stem + 'i' if stem in ['mārt']: return stem[:-1] + stem[1] + stem[-1]
def __init__(self): self.syllabifier = Syllabifier() self.stemmer = Stemmer() self.cv_patterner = CVPattern()