def __init__(self, abbr): root = abbr lexeme = DynamicLexeme(abbr, abbr, SyntacticCategory.NOUN, SecondarySyntacticCategory.ABBREVIATION, None) phonetic_attributes = None last_letter = TurkishAlphabet.get_letter_for_char(abbr[-1]) if last_letter.vowel: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(abbr) else: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(abbr + u"E") phonetic_expectations = None super(AbbreviationRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def __init__(self, numeral): root = numeral lexeme = DynamicLexeme(numeral, numeral, SyntacticCategory.NUMERAL, SecondarySyntacticCategory.DIGITS, None) phonetic_expectations = None phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( DigitsToNumberConverter.convert_digits_to_words(numeral) ) super(NumeralRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def __init__(self, numeral): root = numeral lexeme = DynamicLexeme(numeral, numeral, SyntacticCategory.NUMERAL, SecondarySyntacticCategory.DIGITS, None) phonetic_expectations = None phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( DigitsToNumberConverter.convert_digits_to_words(numeral)) super(NumeralRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def __init__(self, abbr): root = abbr lexeme = DynamicLexeme(abbr, abbr, SyntacticCategory.NOUN, SecondarySyntacticCategory.ABBREVIATION, None) phonetic_attributes = None last_letter = TurkishAlphabet.get_letter_for_char(abbr[-1]) if last_letter.vowel: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( abbr) else: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( abbr + u'E') phonetic_expectations = None super(AbbreviationRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def __init__(self, noun): root = noun lexeme = DynamicLexeme(noun, noun, SyntacticCategory.NOUN, SecondarySyntacticCategory.PROPER_NOUN, None) phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( noun) phonetic_expectations = None super(ProperNounRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def generate(cls, lexeme): if any(x in lexeme.attributes for x in RootGenerator._modifiers): try: return RootGenerator._generate_modified_root_nodes(lexeme) except: print u'Error generating roots for lexeme : {}'.format(lexeme) raise else: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(lexeme.root) root = Root(lexeme.root, lexeme, None, phonetic_attributes) return [root]
def generate(cls, lexeme): if any(x in lexeme.attributes for x in RootGenerator._modifiers): try: return RootGenerator._generate_modified_root_nodes(lexeme) except: print u'Error generating roots for lexeme : {}'.format(lexeme) raise else: phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( lexeme.root) root = Root(lexeme.root, lexeme, None, phonetic_attributes) return [root]
def find_roots_for_partial_input(self, partial_input, whole_surface=None): """ @type partial_input: unicode @type whole_surface: unicode @rtype: list of Root """ assert partial_input and whole_surface assert len(partial_input) <= len(whole_surface) assert whole_surface.startswith(partial_input) if len(whole_surface) == len(partial_input): assert whole_surface == partial_input if len( partial_input ) < 2: # not possible except (d,diyor) and (y,yiyor). but they are already in the dictionary return [] last_vowel = Phonetics.get_last_vowel(partial_input) if not last_vowel: return [] root = partial_input lemma = root lemma_root = lemma syntactic_category = SyntacticCategory.VERB secondary_syntactic_category = None lexeme_attributes = set() lexeme = DynamicLexeme(lemma, lemma_root, syntactic_category, secondary_syntactic_category, lexeme_attributes) phonetic_expectations = set() phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( partial_input) no_attr_root = DynamicRoot(root, lexeme, phonetic_expectations, phonetic_attributes) self._set_lexeme_and_phonetic_attributes([no_attr_root]) self._set_lemma([no_attr_root]) last_char = partial_input[-1] last_letter = TurkishAlphabet.get_letter_for_char(last_char) partial_surface_can_be_root_of_a_verb = self._seems_like_a_valid_verb_root( partial_input) if whole_surface == partial_input: return [no_attr_root ] if partial_surface_can_be_root_of_a_verb else [] first_char_after_partial_input = whole_surface[len(partial_input)] if first_char_after_partial_input.isupper(): return [] first_letter_after_partial_input = TurkishAlphabet.get_letter_for_char( first_char_after_partial_input) might_have_ProgressiveVowelDrop = not last_letter.vowel and\ any([whole_surface.startswith(partial_input+s) for s in [u'iyor', u'ıyor', u'uyor', u'üyor']]) might_have_Aorist_A = not last_letter.vowel and \ (whole_surface.startswith(partial_input + u'ar') or whole_surface.startswith(partial_input + u'er')) # no Aorist_I for -ur, -ür might_have_Aorist_I = not last_letter.vowel and\ (whole_surface.startswith(partial_input + u'ır') or whole_surface.startswith(partial_input + u'ir')) # for other letters, no voicing in verbs. {git+er->gider} vs {yapar, açar, diker} voicing_might_have_happened = last_letter == TurkishAlphabet.L_d and first_letter_after_partial_input.vowel possible_progressive_vowel_drop_roots = self._get_progressive_vowel_drop_roots( partial_input, whole_surface, no_attr_root, last_vowel) if might_have_ProgressiveVowelDrop else set() possible_aorist_A_roots = self._get_aorist_A_roots( no_attr_root) if might_have_Aorist_A else set() possible_aorist_I_roots = self._get_aorist_I_roots( no_attr_root) if might_have_Aorist_I else set() possible_causative_roots = self._get_possible_causative_roots( partial_input, whole_surface, no_attr_root) possible_passive_roots = self._get_possible_passive_roots( last_letter, partial_input, whole_surface, no_attr_root) if voicing_might_have_happened: possible_progressive_vowel_drop_roots = possible_progressive_vowel_drop_roots.union( set([ self._get_possible_voicing_root(r) for r in possible_progressive_vowel_drop_roots ])) possible_aorist_A_roots = possible_aorist_A_roots.union( set([ self._get_possible_voicing_root(r) for r in possible_aorist_A_roots ])) possible_aorist_I_roots = possible_aorist_I_roots.union( set([ self._get_possible_voicing_root(r) for r in possible_aorist_I_roots ])) possible_causative_roots = possible_causative_roots.union( set([ self._get_possible_voicing_root(r) for r in possible_causative_roots ])) possible_passive_roots = possible_passive_roots.union( set([ self._get_possible_voicing_root(r) for r in possible_passive_roots ])) generated_roots = set() generated_roots.add(no_attr_root) if voicing_might_have_happened: generated_roots.add(self._get_possible_voicing_root(no_attr_root)) generated_roots = generated_roots.union( possible_progressive_vowel_drop_roots) generated_roots = generated_roots.union(possible_aorist_A_roots) generated_roots = generated_roots.union(possible_aorist_I_roots) generated_roots = generated_roots.union(possible_causative_roots) generated_roots = generated_roots.union(possible_passive_roots) self._set_lexeme_and_phonetic_attributes(generated_roots) self._set_lemma(generated_roots) generated_roots = list(generated_roots) generated_roots = filter( lambda r: self._seems_like_a_valid_verb_root(r.lexeme.root), generated_roots) return generated_roots
def find_roots_for_partial_input(self, partial_input, whole_surface=None): """ @type partial_input: unicode @type whole_surface: unicode @rtype: list of Root """ assert partial_input and whole_surface assert len(partial_input) <= len(whole_surface) assert whole_surface.startswith(partial_input) if len(whole_surface) == len(partial_input): assert whole_surface == partial_input if len(partial_input) < 2: # not possible except (d,diyor) and (y,yiyor). but they are already in the dictionary return [] last_vowel = Phonetics.get_last_vowel(partial_input) if not last_vowel: return [] root = partial_input lemma = root lemma_root = lemma syntactic_category = SyntacticCategory.VERB secondary_syntactic_category = None lexeme_attributes = set() lexeme = DynamicLexeme(lemma, lemma_root, syntactic_category, secondary_syntactic_category, lexeme_attributes) phonetic_expectations = set() phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(partial_input) no_attr_root = DynamicRoot(root, lexeme, phonetic_expectations, phonetic_attributes) self._set_lexeme_and_phonetic_attributes([no_attr_root]) self._set_lemma([no_attr_root]) last_char = partial_input[-1] last_letter = TurkishAlphabet.get_letter_for_char(last_char) partial_surface_can_be_root_of_a_verb = self._seems_like_a_valid_verb_root(partial_input) if whole_surface==partial_input: return [no_attr_root] if partial_surface_can_be_root_of_a_verb else [] first_char_after_partial_input = whole_surface[len(partial_input)] if first_char_after_partial_input.isupper(): return [] first_letter_after_partial_input = TurkishAlphabet.get_letter_for_char(first_char_after_partial_input) might_have_ProgressiveVowelDrop = not last_letter.vowel and\ any([whole_surface.startswith(partial_input+s) for s in [u'iyor', u'ıyor', u'uyor', u'üyor']]) might_have_Aorist_A = not last_letter.vowel and \ (whole_surface.startswith(partial_input + u'ar') or whole_surface.startswith(partial_input + u'er')) # no Aorist_I for -ur, -ür might_have_Aorist_I = not last_letter.vowel and\ (whole_surface.startswith(partial_input + u'ır') or whole_surface.startswith(partial_input + u'ir')) # for other letters, no voicing in verbs. {git+er->gider} vs {yapar, açar, diker} voicing_might_have_happened = last_letter==TurkishAlphabet.L_d and first_letter_after_partial_input.vowel possible_progressive_vowel_drop_roots = self._get_progressive_vowel_drop_roots(partial_input, whole_surface, no_attr_root, last_vowel) if might_have_ProgressiveVowelDrop else set() possible_aorist_A_roots = self._get_aorist_A_roots(no_attr_root) if might_have_Aorist_A else set() possible_aorist_I_roots = self._get_aorist_I_roots(no_attr_root) if might_have_Aorist_I else set() possible_causative_roots = self._get_possible_causative_roots(partial_input, whole_surface, no_attr_root) possible_passive_roots = self._get_possible_passive_roots(last_letter, partial_input, whole_surface, no_attr_root) if voicing_might_have_happened: possible_progressive_vowel_drop_roots = possible_progressive_vowel_drop_roots.union(set([self._get_possible_voicing_root(r) for r in possible_progressive_vowel_drop_roots])) possible_aorist_A_roots = possible_aorist_A_roots.union(set([self._get_possible_voicing_root(r) for r in possible_aorist_A_roots])) possible_aorist_I_roots = possible_aorist_I_roots.union(set([self._get_possible_voicing_root(r) for r in possible_aorist_I_roots])) possible_causative_roots = possible_causative_roots.union(set([self._get_possible_voicing_root(r) for r in possible_causative_roots])) possible_passive_roots = possible_passive_roots.union(set([self._get_possible_voicing_root(r) for r in possible_passive_roots])) generated_roots = set() generated_roots.add(no_attr_root) if voicing_might_have_happened: generated_roots.add(self._get_possible_voicing_root(no_attr_root)) generated_roots = generated_roots.union(possible_progressive_vowel_drop_roots) generated_roots = generated_roots.union(possible_aorist_A_roots) generated_roots = generated_roots.union(possible_aorist_I_roots) generated_roots = generated_roots.union(possible_causative_roots) generated_roots = generated_roots.union(possible_passive_roots) self._set_lexeme_and_phonetic_attributes(generated_roots) self._set_lemma(generated_roots) generated_roots = list(generated_roots) generated_roots = filter(lambda r: self._seems_like_a_valid_verb_root(r.lexeme.root), generated_roots) return generated_roots
def __init__(self, noun): root = noun lexeme = DynamicLexeme(noun, noun, SyntacticCategory.NOUN, SecondarySyntacticCategory.PROPER_NOUN, None) phonetic_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(noun) phonetic_expectations = None super(ProperNounRoot, self).__init__(root, lexeme, phonetic_expectations, phonetic_attributes)
def _generate_modified_root_nodes(cls, lexeme): if LexemeAttribute.RootChange in lexeme.attributes: special_roots = cls._handle_special_roots(lexeme) if special_roots: return special_roots modified_seq = lexeme.root original_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( lexeme.root) modified_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( lexeme.root) original_phonetic_expectations = set() modified_phonetic_expectations = set() if LexemeAttribute.Voicing in lexeme.attributes or LexemeAttribute.VoicingOpt in lexeme.attributes: last_letter = TurkishAlphabet.get_letter_for_char(modified_seq[-1]) modified_letter = TurkishAlphabet.voice(last_letter) assert modified_letter is not None if lexeme.lemma.endswith(u"nk"): modified_letter = TurkishAlphabet.L_g modified_seq = modified_seq[:-1] + modified_letter.char_value if PhoneticAttributes.LastLetterVoicelessStop in modified_attributes: modified_attributes.remove( PhoneticAttributes.LastLetterVoicelessStop) if modified_letter.continuant: if PhoneticAttributes.LastLetterNotContinuant in modified_attributes: modified_attributes.remove( PhoneticAttributes.LastLetterNotContinuant) modified_attributes.add( PhoneticAttributes.LastLetterContinuant) else: if PhoneticAttributes.LastLetterContinuant in modified_attributes: modified_attributes.remove( PhoneticAttributes.LastLetterContinuant) modified_attributes.add( PhoneticAttributes.LastLetterNotContinuant) if LexemeAttribute.VoicingOpt not in lexeme.attributes: original_phonetic_expectations.add( PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.Doubling in lexeme.attributes: modified_seq = modified_seq + modified_seq[-1] original_phonetic_expectations.add( PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.LastVowelDrop in lexeme.attributes: modified_seq = modified_seq[:-2] + modified_seq[-1] if lexeme.syntactic_category != SyntacticCategory.VERB: original_phonetic_expectations.add( PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.InverseHarmony in lexeme.attributes: original_attributes.add(PhoneticAttributes.LastVowelFrontal) if PhoneticAttributes.LastVowelBack in original_attributes: original_attributes.remove(PhoneticAttributes.LastVowelBack) modified_attributes.add(PhoneticAttributes.LastVowelFrontal) if PhoneticAttributes.LastVowelBack in modified_attributes: modified_attributes.remove(PhoneticAttributes.LastVowelBack) if LexemeAttribute.ProgressiveVowelDrop in lexeme.attributes: modified_seq = modified_seq[:-1] if RootGenerator._has_vowel(modified_seq): modified_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence( modified_seq) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) original_phonetic_expectations = original_phonetic_expectations or None modified_phonetic_expectations = modified_phonetic_expectations or None original = Root(lexeme.root, lexeme, original_phonetic_expectations, original_attributes) modified = Root(modified_seq, lexeme, modified_phonetic_expectations, modified_attributes) if original == modified: return [original] else: return [original, modified]
def _handle_special_roots(cls, lexeme): lexeme.attributes.remove(LexemeAttribute.RootChange) if lexeme.lemma == u'ben': root_ben = Root( u'ben', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ben')) root_ban = Root( u'ban', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ban')) return [root_ben, root_ban] elif lexeme.lemma == u'sen': root_sen = Root( u'sen', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ben')) root_san = Root( u'san', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ban')) return [root_sen, root_san] elif lexeme.lemma == u'demek': root_di = Root( u'di', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'di')) root_de = Root( u'de', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'de')) return [root_di, root_de] elif lexeme.lemma == u'yemek': root_yi = Root( u'yi', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'yi')) root_ye = Root( u'ye', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ye')) return [root_yi, root_ye] elif lexeme.lemma == u'hepsi': root_hep = Root( u'hep', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'hep')) root_hepsi = Root( u'hepsi', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'hepsi')) return [root_hep, root_hepsi] elif lexeme.lemma == u'ora': root_or = Root( u'or', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'or')) root_ora = Root( u'ora', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ora')) return [root_or, root_ora] elif lexeme.lemma == u'bura': root_bur = Root( u'bur', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'bur')) root_bura = Root( u'bura', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'bura')) return [root_bur, root_bura] elif lexeme.lemma == u'şura': root_sur = Root( u'şur', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'şur')) root_sura = Root( u'şura', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'şura')) return [root_sur, root_sura] elif lexeme.lemma == u'nere': root_ner = Root( u'ner', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ner')) root_nere = Root( u'nere', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'nere')) return [root_ner, root_nere] elif lexeme.lemma == u'nere': root_ner = Root( u'ner', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'ner')) root_nere = Root( u'nere', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'nere')) return [root_ner, root_nere] elif lexeme.lemma == u'içeri': root_icer = Root( u'içer', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'içer')) root_iceri = Root( u'içeri', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'içeri')) return [root_icer, root_iceri] elif lexeme.lemma == u'dışarı': root_disar = Root( u'dışar', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'dışar')) root_disari = Root( u'dışarı', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'dışarı')) return [root_disar, root_disari] elif lexeme.lemma == u'birbiri': root_birbir = Root( u'birbir', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'birbir')) root_birbiri = Root( u'birbiri', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence( u'birbiri')) return [root_birbir, root_birbiri] else: raise Exception('Unhandled root change : {} !'.format(lexeme))
def _generate_modified_root_nodes(cls, lexeme): if LexemeAttribute.RootChange in lexeme.attributes: special_roots = cls._handle_special_roots(lexeme) if special_roots: return special_roots modified_seq = lexeme.root original_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(lexeme.root) modified_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(lexeme.root) original_phonetic_expectations = set() modified_phonetic_expectations = set() if LexemeAttribute.Voicing in lexeme.attributes or LexemeAttribute.VoicingOpt in lexeme.attributes: last_letter = TurkishAlphabet.get_letter_for_char(modified_seq[-1]) modified_letter = TurkishAlphabet.voice(last_letter) assert modified_letter is not None if lexeme.lemma.endswith(u"nk"): modified_letter = TurkishAlphabet.L_g modified_seq = modified_seq[:-1] + modified_letter.char_value if PhoneticAttributes.LastLetterVoicelessStop in modified_attributes: modified_attributes.remove(PhoneticAttributes.LastLetterVoicelessStop) if modified_letter.continuant: if PhoneticAttributes.LastLetterNotContinuant in modified_attributes : modified_attributes.remove(PhoneticAttributes.LastLetterNotContinuant) modified_attributes.add(PhoneticAttributes.LastLetterContinuant) else: if PhoneticAttributes.LastLetterContinuant in modified_attributes: modified_attributes.remove(PhoneticAttributes.LastLetterContinuant) modified_attributes.add(PhoneticAttributes.LastLetterNotContinuant) if LexemeAttribute.VoicingOpt not in lexeme.attributes: original_phonetic_expectations.add(PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.Doubling in lexeme.attributes: modified_seq = modified_seq + modified_seq[-1] original_phonetic_expectations.add(PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.LastVowelDrop in lexeme.attributes: modified_seq = modified_seq[:-2] + modified_seq[-1] if lexeme.syntactic_category!=SyntacticCategory.VERB: original_phonetic_expectations.add(PhoneticExpectation.ConsonantStart) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) if LexemeAttribute.InverseHarmony in lexeme.attributes: original_attributes.add(PhoneticAttributes.LastVowelFrontal) if PhoneticAttributes.LastVowelBack in original_attributes: original_attributes.remove(PhoneticAttributes.LastVowelBack) modified_attributes.add(PhoneticAttributes.LastVowelFrontal) if PhoneticAttributes.LastVowelBack in modified_attributes: modified_attributes.remove(PhoneticAttributes.LastVowelBack) if LexemeAttribute.ProgressiveVowelDrop in lexeme.attributes: modified_seq = modified_seq[:-1] if RootGenerator._has_vowel(modified_seq): modified_attributes = Phonetics.calculate_phonetic_attributes_of_plain_sequence(modified_seq) modified_phonetic_expectations.add(PhoneticExpectation.VowelStart) original_phonetic_expectations = original_phonetic_expectations or None modified_phonetic_expectations = modified_phonetic_expectations or None original = Root(lexeme.root, lexeme, original_phonetic_expectations, original_attributes) modified = Root(modified_seq, lexeme, modified_phonetic_expectations, modified_attributes) if original==modified: return [original] else: return [original, modified]
def _handle_special_roots(cls, lexeme): lexeme.attributes.remove(LexemeAttribute.RootChange) if lexeme.lemma==u'ben': root_ben = Root(u'ben', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ben')) root_ban = Root(u'ban', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ban')) return [root_ben, root_ban] elif lexeme.lemma==u'sen': root_sen = Root(u'sen', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ben')) root_san = Root(u'san', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ban')) return [root_sen, root_san] elif lexeme.lemma==u'demek': root_di = Root(u'di', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'di')) root_de = Root(u'de', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'de')) return [root_di, root_de] elif lexeme.lemma==u'yemek': root_yi = Root(u'yi', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'yi')) root_ye = Root(u'ye', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ye')) return [root_yi, root_ye] elif lexeme.lemma==u'hepsi': root_hep = Root(u'hep', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'hep')) root_hepsi = Root(u'hepsi', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'hepsi')) return [root_hep, root_hepsi] elif lexeme.lemma==u'ora': root_or = Root(u'or', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'or')) root_ora = Root(u'ora', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ora')) return [root_or, root_ora] elif lexeme.lemma==u'bura': root_bur = Root(u'bur', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'bur')) root_bura = Root(u'bura', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'bura')) return [root_bur, root_bura] elif lexeme.lemma==u'şura': root_sur = Root(u'şur', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'şur')) root_sura = Root(u'şura', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'şura')) return [root_sur, root_sura] elif lexeme.lemma==u'nere': root_ner = Root(u'ner', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ner')) root_nere = Root(u'nere', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'nere')) return [root_ner, root_nere] elif lexeme.lemma==u'nere': root_ner = Root(u'ner', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'ner')) root_nere = Root(u'nere', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'nere')) return [root_ner, root_nere] elif lexeme.lemma==u'içeri': root_icer = Root(u'içer', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'içer')) root_iceri = Root(u'içeri', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'içeri')) return [root_icer, root_iceri] elif lexeme.lemma==u'dışarı': root_disar = Root(u'dışar', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'dışar')) root_disari = Root(u'dışarı', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'dışarı')) return [root_disar, root_disari] elif lexeme.lemma==u'birbiri': root_birbir = Root(u'birbir', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'birbir')) root_birbiri = Root(u'birbiri', lexeme, None, Phonetics.calculate_phonetic_attributes_of_plain_sequence(u'birbiri')) return [root_birbir, root_birbiri] else: raise Exception('Unhandled root change : {} !'.format(lexeme))