def __resolveA(self, root: TxtWord, formation: str, rootWord: bool): if root.isAbbreviation(): return formation + 'e' if "0" <= self.__lastVowel(self.__formationToCheck) <= "9": if self.__lastVowel(self.__formationToCheck) == "6" or self.__lastVowel(self.__formationToCheck) == 9: return formation + 'a' elif self.__lastVowel(self.__formationToCheck) == "0": if root.getName().endswith("10") or root.getName().endswith("30") or root.getName().endswith("40") \ or root.getName().endswith("60") or root.getName().endswith("90"): return formation + 'a' else: return formation + 'e' else: return formation + 'e' if TurkishLanguage.isBackVowel(self.__lastVowel(self.__formationToCheck)): if root.notObeysVowelHarmonyDuringAgglutination() and rootWord: return formation + 'e' else: return formation + 'a' if TurkishLanguage.isFrontVowel(self.__lastVowel(self.__formationToCheck)): if root.notObeysVowelHarmonyDuringAgglutination() and rootWord: return formation + 'a' else: return formation + 'e' if root.isNumeral() or root.isFraction() or root.isReal(): if root.getName().endswith("6") or root.getName().endswith("9") or root.getName().endswith("10") or \ root.getName().endswith("30") or root.getName().endswith("40") or root.getName().endswith("60") \ or root.getName().endswith("90"): return formation + 'a' else: return formation + 'e' return formation
def __resolveH(self, root: TxtWord, formation: str, beginningOfSuffix: bool, specialCaseTenseSuffix: bool, rootWord: bool): if root.isAbbreviation(): return formation + 'i' if beginningOfSuffix and TurkishLanguage.isVowel(self.__lastPhoneme(self.__formationToCheck)) and \ not specialCaseTenseSuffix: return formation if specialCaseTenseSuffix: if rootWord: if root.vowelAChangesToIDuringYSuffixation(): if TurkishLanguage.isFrontRoundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'ü' if TurkishLanguage.isFrontUnroundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'i' if TurkishLanguage.isBackRoundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'u' if TurkishLanguage.isBackUnroundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'ı' if TurkishLanguage.isVowel(self.__lastPhoneme(self.__formationToCheck)): if TurkishLanguage.isFrontRoundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'ü' if TurkishLanguage.isFrontUnroundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'i' if TurkishLanguage.isBackRoundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'u' if TurkishLanguage.isBackUnroundedVowel(self.__beforeLastVowel(self.__formationToCheck)): return formation[:len(formation) - 1] + 'ı' if TurkishLanguage.isFrontRoundedVowel(self.__lastVowel(self.__formationToCheck)) or \ (TurkishLanguage.isBackRoundedVowel(self.__lastVowel(self.__formationToCheck)) and root.notObeysVowelHarmonyDuringAgglutination()): return formation + 'ü' if TurkishLanguage.isFrontUnroundedVowel(self.__lastVowel(self.__formationToCheck)) or \ (self.__lastVowel(self.__formationToCheck) == 'a' and root.notObeysVowelHarmonyDuringAgglutination()): return formation + 'i' if TurkishLanguage.isBackRoundedVowel(self.__lastVowel(self.__formationToCheck)): return formation + 'u' if TurkishLanguage.isBackUnroundedVowel(self.__lastVowel(self.__formationToCheck)): return formation + 'ı' if root.isNumeral() or root.isFraction() or root.isReal(): if root.getName().endswith("6") or root.getName().endswith("40") or root.getName().endswith("60") \ or root.getName().endswith("90"): return formation + 'ı' else: if root.getName().endswith("3") or root.getName().endswith("4") or root.getName().endswith("00"): return formation + 'ü' else: if root.getName().endswith("9") or root.getName().endswith("10") or root.getName().endswith("30"): return formation + 'u' else: return formation + 'i' return formation
def makeTransition(self, root: TxtWord, stem: str, startState: State) -> str: rootWord = root.getName() == stem or (root.getName() + "'") == stem formation = stem i = 0 if self.__with == "0": return stem if (stem == "bu" or stem == "şu" or stem == "o") and rootWord and self.__with == "ylA": return stem + "nunla" if self.__with == "yA": if stem == "ben": return "bana" self.__formationToCheck = stem if rootWord and self.__withFirstChar() == "y" and root.vowelEChangesToIDuringYSuffixation() \ and self.__with[1] != "H": formation = stem[:len(stem) - 1] + "i" self.__formationToCheck = formation else: if rootWord and (self.__with == "Hl" or self.__with == "Hn") and root.lastIdropsDuringPassiveSuffixation(): formation = stem[:len(stem) - 2] + stem[len(stem) - 1] self.__formationToCheck = stem else: if rootWord and root.showsSuRegularities() and self.__startWithVowelorConsonantDrops() and \ not self.__with.startswith("y"): formation = stem + 'y' self.__formationToCheck = formation else: if rootWord and root.duplicatesDuringSuffixation() and TurkishLanguage.isConsonantDrop( self.__with[0]): if self.softenDuringSuffixation(root): if self.__lastPhoneme(stem) == "p": formation = stem[:len(stem) - 1] + "bb" elif self.__lastPhoneme(stem) == "t": formation = stem[:len(stem) - 1] + "dd" else: formation = stem + stem[len(stem) - 1] self.__formationToCheck = formation else: if rootWord and root.lastIdropsDuringSuffixation() and \ not startState.getName().startswith( "VerbalRoot") and not startState.getName().startswith("ProperRoot") \ and self.__startWithVowelorConsonantDrops(): if self.softenDuringSuffixation(root): if self.__lastPhoneme(stem) == "p": formation = stem[:len(stem) - 2] + 'b' elif self.__lastPhoneme(stem) == "t": formation = stem[:len(stem) - 2] + 'd' elif self.__lastPhoneme(stem) == "ç": formation = stem[:len(stem) - 2] + 'c' else: formation = stem[:len(stem) - 2] + stem[len(stem) - 1] self.__formationToCheck = stem else: if self.__lastPhoneme(stem) == "p": if self.__startWithVowelorConsonantDrops() and rootWord and \ self.softenDuringSuffixation(root): formation = stem[:len(stem) - 1] + 'b' elif self.__lastPhoneme(stem) == "t": if self.__startWithVowelorConsonantDrops() and rootWord and \ self.softenDuringSuffixation(root): formation = stem[:len(stem) - 1] + 'd' elif self.__lastPhoneme(stem) == "ç": if self.__startWithVowelorConsonantDrops() and rootWord and \ self.softenDuringSuffixation(root): formation = stem[:len(stem) - 1] + 'c' elif self.__lastPhoneme(stem) == "g": if self.__startWithVowelorConsonantDrops() and rootWord and \ self.softenDuringSuffixation(root): formation = stem[:len(stem) - 1] + 'ğ' elif self.__lastPhoneme(stem) == "k": if self.__startWithVowelorConsonantDrops() and rootWord and root.endingKChangesIntoG() \ and not root.isProperNoun(): formation = stem[:len(stem) - 1] + 'g' else: if self.__startWithVowelorConsonantDrops() and (not rootWord or ( self.softenDuringSuffixation(root) and ( not root.isProperNoun() or startState.__str__() != "ProperRoot"))): formation = stem[:len(stem) - 1] + 'ğ' self.__formationToCheck = formation if TurkishLanguage.isConsonantDrop(self.__withFirstChar()) and not TurkishLanguage.isVowel(stem[len(stem) - 1])\ and (root.isNumeral() or root.isReal() or root.isFraction() or root.isTime() or root.isDate() or root.isPercent() or root.isRange()) \ and (root.getName().endswith("1") or root.getName().endswith("3") or root.getName().endswith("4") or root.getName().endswith("5") or root.getName().endswith("8") or root.getName().endswith("9") or root.getName().endswith("10") or root.getName().endswith("30") or root.getName().endswith("40") or root.getName().endswith("60") or root.getName().endswith("70") or root.getName().endswith("80") or root.getName().endswith("90") or root.getName().endswith("00")): if self.__with[0] == "'": formation = formation + "'" i = 2 else: i = 1 else: if (TurkishLanguage.isConsonantDrop(self.__withFirstChar()) and TurkishLanguage.isConsonant( self.__lastPhoneme(stem))) or (rootWord and root.consonantSMayInsertedDuringPossesiveSuffixation()): if self.__with[0] == "'": formation = formation + "'" if root.isAbbreviation(): i = 1 else: i = 2 else: i = 1 while i < len(self.__with): if self.__with[i] == "D": formation = self.__resolveD(root, formation) elif self.__with[i] == "A": formation = self.__resolveA(root, formation, rootWord) elif self.__with[i] == "H": if self.__with[0] != "'": formation = self.__resolveH(root, formation, i == 0, self.__with.startswith("Hyor"), rootWord) else: formation = self.__resolveH(root, formation, i == 1, False, rootWord) elif self.__with[i] == "C": formation = self.__resolveC(formation) elif self.__with[i] == "S": formation = self.__resolveS(formation) elif self.__with[i] == "Ş": formation = self.__resolveSh(formation) else: if i == len(self.__with) - 1 and self.__with[i] == "s": formation += "ş" else: formation += self.__with[i] self.__formationToCheck = formation i = i + 1 return formation