From a659e63eb5ab813fa0de6328285dba92d8fb6d80 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Wed, 30 Aug 2017 19:36:29 +0300 Subject: [PATCH 1/7] TR translation TR translation of num2word reading all cardinals and ordinals up to 10**21-1 --- num2words/__init__.py | 4 +- num2words/lang_TR.py | 575 ++++++++++++++++++++++++++++++++++++++++++ tests/test_tr.py | 104 ++++++++ 3 files changed, 682 insertions(+), 1 deletion(-) create mode 100644 num2words/lang_TR.py create mode 100644 tests/test_tr.py diff --git a/num2words/__init__.py b/num2words/__init__.py index 69ad8db..58eabfb 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -37,6 +37,7 @@ from . import lang_IT from . import lang_ES_VE from . import lang_ES_CO from . import lang_VN +from . import lang_TR CONVERTER_CLASSES = { @@ -60,7 +61,8 @@ CONVERTER_CLASSES = { 'pt_BR': lang_PT_BR.Num2Word_PT_BR(), 'he': lang_HE.Num2Word_HE(), 'it': lang_IT.Num2Word_IT(), - 'vi_VN': lang_VN.Num2Word_VN() + 'vi_VN': lang_VN.Num2Word_VN(), + 'tr': lang_TR.Num2Word_TR() } def num2words(number, ordinal=False, lang='en'): diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py new file mode 100644 index 0000000..7b011c1 --- /dev/null +++ b/num2words/lang_TR.py @@ -0,0 +1,575 @@ +# -*- encoding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2017, Tufan Kaynak, Framras. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import unicode_literals + + +class Num2Word_TR(object): + def __init__(self): + self.precision = 2 + self.negword = u"eksi " + self.pointword = u"virgül" + self.CURRENCY_UNIT = (u"lira",) + self.CURRENCY_SUBUNIT = (u"kuruş",) + # type(%s) not in [long, int, float] + self.errmsg_nonnum = u"Sadece sayılar yazıya çevrilebilir." + # Cannot treat float %s as ordinal. + self.errmsg_floatord = u"Tam sayı olmayan {} sıralamada kullanılamaz." + # Cannot treat negative num %s as ordinal. + self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz." + # abs(%s) must be less than %s. + self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. Yazıya çevrilebilecek en büyük rakam {}." + self.exclude_title = ["et", "virgule", "moins"] + # ordered number tuples in Turkish + self.ORDINAL_SIGN = (",",) + self.CARDINAL_BIRLER = ( + u"sıfır", u"bir", u"iki", u"üç", u"dört", u"beş", u"altı", u"yedi", u"sekiz", u"dokuz",) + self.ORDINAL_BIRLER = ( + u"", u"birinci", u"ikinci", u"üçüncü", u"dördüncü", u"beşinci", u"altıncı", u"yedinci", u"sekizinci", u"dokuzuncu",) + self.CARDINAL_ONLAR = ( + u"", u"on", u"yirmi", u"otuz", u"kırk", u"elli", u"altmış", u"yetmiş", u"seksen", u"doksan",) + self.ORDINAL_ONLAR = ( + u"", u"onuncu", u"yirminci", u"otuzuncu", u"kırkıncı", u"ellinci", u"altmışıncı", u"yetmişinci", u"sekseninci", + u"doksanıncı",) + self.CARDINAL_YUZLER = (u"yüz",) + self.ORDINAL_YUZLER = (u"yüzüncü",) + self.CARDINAL_UCLU_GRUPLAR = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",) + self.ORDINAL_UCLU_GRUPLAR = ( + u"", u"bininci", u"milyonuncu", u"milyarıncı", u"trilyonuncu", u"katrilyonuncu", u"kentilyon",) + self.MAXVAL = (10 ** (len(self.CARDINAL_UCLU_GRUPLAR) * 3)) - 1 + + self.okunacak_tam_sayi = [] + self.okunacak_uclu_grup_sayisi = 0 + self.okunacak_artik_basamak_sayisi = 0 + self.son_sifir_basamagi = 0 + + # def set_numwords(self): + + # def gen_high_numwords(self, units, tens, lows): + + # def set_mid_numwords(self, mid): + + # def set_low_numwords(self, numwords): + + def splitnum(self, value): + return self.to_splitnum(value) + + def to_cardinal(self, value): + oku = "" + is_cardinal = self.verify_cardinal(value) + if is_cardinal: + if not int(value) == value: + return self.to_cardinal_float(value) + self.splitnum(value) + + if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]): + # number like 00 and all 0s and even more, raise error + return oku + + if self.okunacak_uclu_grup_sayisi == 1: + if self.okunacak_artik_basamak_sayisi == 2: + if self.son_sifir_basamagi == 1: + # number like x0, read cardinal x0 and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + return oku + if self.son_sifir_basamagi == 0: + # number like xy, read cardinal xy and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][0] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + return oku + + if self.okunacak_artik_basamak_sayisi == 1: + if self.son_sifir_basamagi == 0: + # number like x, read ordinal x and return + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + return oku + + if self.okunacak_artik_basamak_sayisi == 0: + if self.son_sifir_basamagi == 2: + # number like x00, read cardinal x00 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + return oku + if self.son_sifir_basamagi == 1: + # number like xy0, read cardinal xy0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + return oku + if self.son_sifir_basamagi == 0: + # number like xyz, read cardinal xyz and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + return oku + + if self.okunacak_uclu_grup_sayisi >= 2: + if self.okunacak_artik_basamak_sayisi == 2: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x0 and all 0s, read cardinal x0 0..0 and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + # number like xy and all 0s, read cardinal xy 0..0 and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][1] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2: + # number like xy and others, read cardinal xy n..n and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][1] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + if self.okunacak_artik_basamak_sayisi == 1: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x and all 0s, read cardinal x 0..0 and return + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1: + # number like x and others, read cardinal x n..n and return + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + if self.okunacak_artik_basamak_sayisi == 0: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x00 and all 0s, read cardinal x00 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + # number like xy0 and all 0s, read cardinal xy0 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3: + # number like xyz and all 0s, read cardinal xyz 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3: + # number like xyz and all others, read cardinal xyz n..n + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)): + okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i + if self.okunacak_artik_basamak_sayisi == 0: + son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + else: + son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0": + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])] + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 1: + if i == 1: + oku += self.CARDINAL_YUZLER[0] + return oku + elif i > 1: + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + oku += self.CARDINAL_YUZLER[0] + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0": + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 2: + if i == 1: + oku += self.CARDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + return oku + elif i > 1: + oku += self.CARDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + oku += self.CARDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0": + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 3: + if i == 1: + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + return oku + if i == 2: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + return oku + if i > 2: + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + else: + if i == 2: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + + return oku + + def to_cardinal_float(self, value): + self.splitnum(value) + oku = "" + oku += self.pointword + if len(self.okunacak_tam_sayi[1]) >= 1: + if not self.okunacak_tam_sayi[1][0] == "0": + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[1][0])] + if len(self.okunacak_tam_sayi[1]) == 2: + if not self.okunacak_tam_sayi[1][1] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[1][1])] + oku = self.to_cardinal(int(self.okunacak_tam_sayi[0])) + oku + return oku + + # def merge(self, curr, next): + + # def clean(self, val): + + # def title(self, value): + + def verify_cardinal(self, value): + iscardinal = True + try: + if not float(value) == value: + iscardinal = False + except (ValueError, TypeError): + iscardinal = False + raise TypeError(self.errmsg_nonnum) + if abs(value) >= self.MAXVAL: + iscardinal = False + raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL)) + return iscardinal + + def verify_ordinal(self, value): + isordinal = True + try: + if not int(value) == value: + isordinal = False + if not abs(value) == value: + isordinal = False + raise TypeError(self.errmsg_negord.format(value)) + except (ValueError, TypeError): + isordinal = False + raise TypeError(self.errmsg_nonnum) + if abs(value) >= self.MAXVAL: + isordinal = False + raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL)) + return isordinal + + # def verify_num(self, value): + + # def set_wordnums(self): + + def to_ordinal(self, value): + oku = "" + isordinal = self.verify_ordinal(value) + if isordinal: + self.splitnum(value) + + if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]): + # number like 00 and all 0s and even more, raise error + return oku + + if self.okunacak_uclu_grup_sayisi == 1: + if self.okunacak_artik_basamak_sayisi == 2: + if self.son_sifir_basamagi == 1: + # number like x0, read ordinal x0 and return + oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + return oku + if self.son_sifir_basamagi == 0: + # number like xy, read ordinal xy and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][0] == "0": + oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + return oku + + if self.okunacak_artik_basamak_sayisi == 1: + if self.son_sifir_basamagi == 0: + # number like x, read ordinal x and return + oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + return oku + + if self.okunacak_artik_basamak_sayisi == 0: + if self.son_sifir_basamagi == 2: + # number like x00, read ordinal x00 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.ORDINAL_YUZLER[0] + return oku + if self.son_sifir_basamagi == 1: + # number like xy0, read ordinal xy0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + return oku + if self.son_sifir_basamagi == 0: + # number like xyz, read ordinal xyz and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + return oku + + if self.okunacak_uclu_grup_sayisi >= 2: + if self.okunacak_artik_basamak_sayisi == 2: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x0 and all 0s, read ordinal x0 0..0 and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + # number like xy and all 0s, read ordinal xy 0..0 and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][1] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2: + # number like xy and others, read cardinal xy n..n and return + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + if not self.okunacak_tam_sayi[0][1] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + if self.okunacak_artik_basamak_sayisi == 1: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x and all 0s, read ordinal x 0..0 and return + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1: + # number like x and others, read cardinal x n..n and return + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + if self.okunacak_artik_basamak_sayisi == 0: + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + # number like x00 and all 0s, read ordinal x00 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + # number like xy0 and all 0s, read ordinal xy0 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3: + # number like xyz and all 0s, read ordinal xyz 0..0 and return + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + return oku + if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3: + # number like xyz and all others, read cardinal xyz n..n + if not self.okunacak_tam_sayi[0][0] == "1": + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.okunacak_tam_sayi[0][2] == "0": + if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"): + oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + + for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)): + okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i + if self.okunacak_artik_basamak_sayisi == 0: + son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + else: + son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0": + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])] + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 1: + if i == 1: + oku += self.ORDINAL_YUZLER[0] + return oku + elif i > 1: + oku += self.CARDINAL_YUZLER[0] + oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + oku += self.CARDINAL_YUZLER[0] + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0": + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 2: + if i == 1: + oku += self.ORDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + return oku + elif i > 1: + oku += self.CARDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + oku += self.CARDINAL_ONLAR[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + + if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0": + if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + son_okunan_basamak_sirasi) - 3: + if i == 1: + oku += self.ORDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + return oku + if i == 2: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + return oku + if i > 2: + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + return oku + else: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + else: + if not self.okunacak_tam_sayi[0][ + son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_BIRLER[ + int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + + oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + + return oku + + def to_ordinal_num(self, value): + oku = "" + isordinal = self.verify_ordinal(value) + if isordinal: + self.splitnum(value) + oku = self.okunacak_tam_sayi[0] + self.ORDINAL_SIGN[0] + + return oku + + # def inflect(self, value, text): + + def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="", divisor=100, longval=True, cents=True): + kesirlibolum = str(int(val * 10**self.precision)) + self.okunacak_tam_sayi = [str(int(val)), kesirlibolum[len(kesirlibolum)-self.precision:]] + if len(self.okunacak_tam_sayi[0]) % 3 > 0: + self.okunacak_uclu_grup_sayisi = (len(self.okunacak_tam_sayi[0]) // 3) + 1 + elif len(self.okunacak_tam_sayi[0]) % 3 == 0: + self.okunacak_uclu_grup_sayisi = len(self.okunacak_tam_sayi[0]) // 3 + self.okunacak_artik_basamak_sayisi = len(self.okunacak_tam_sayi[0]) % 3 + + okunacak = list(self.okunacak_tam_sayi[0][::-1]) + self.son_sifir_basamagi = 0 + found = 0 + for i in range(len(okunacak) - 1): + if int(okunacak[i]) == 0 and found == 0: + self.son_sifir_basamagi = i + 1 + else: + found = 1 + + def to_year(self, value, **kwargs): + return self.to_cardinal(value) + + def to_currency(self, value, **kwargs): + return self.to_cardinal(value) + + # def base_setup(self): + + # def setup(self): + + # def test(self, value): diff --git a/tests/test_tr.py b/tests/test_tr.py new file mode 100644 index 0000000..46210b6 --- /dev/null +++ b/tests/test_tr.py @@ -0,0 +1,104 @@ +# -*- encoding: utf-8 -*- +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2017, Tufan Kaynak, Framras. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsTRTest(TestCase): + def test_tr(self): + # ref https://github.com/savoirfairelinux/num2words/issues/8 + + self.assertEqual(num2words(1, True, "tr"), u"birinci") + self.assertEqual(num2words(2, True, "tr"), u"ikinci") + self.assertEqual(num2words(9, True, "tr"), u"dokuzuncu") + self.assertEqual(num2words(10, True, "tr"), u"onuncu") + self.assertEqual(num2words(11, True, "tr"), u"onbirinci") + self.assertEqual(num2words(44, True, "tr"), u"kırkdördüncü") + self.assertEqual(num2words(100, True, "tr"), u"yüzüncü") + self.assertEqual(num2words(101, True, "tr"), u"yüzbirinci") + self.assertEqual(num2words(103, True, "tr"), u"yüzüçüncü") + self.assertEqual(num2words(110, True, "tr"), u"yüzonuncu") + self.assertEqual(num2words(1000, True, "tr"), u"bininci") + self.assertEqual(num2words(1001, True, "tr"), u"binbirinci") + self.assertEqual(num2words(10000, True, "tr"), u"onbininci") + self.assertEqual(num2words(10100, True, "tr"), u"onbinyüzüncü") + self.assertEqual(num2words(11000, True, "tr"), u"onbirbininci") + self.assertEqual(num2words(35000, True, "tr"), u"otuzbeşbininci") + self.assertEqual(num2words(116331, True, "tr"), u"yüzonaltıbinüçyüzotuzbirinci") + self.assertEqual(num2words(116330, True, "tr"), u"yüzonaltıbinüçyüzotuzuncu") + self.assertEqual(num2words(100000, True, "tr"), u"yüzbininci") + self.assertEqual(num2words(501000, True, "tr"), u"beşyüzbirbininci") + self.assertEqual(num2words(1000111, True, "tr"), u"birmilyonyüzonbirinci") + self.assertEqual(num2words(111000111, True, "tr"), u"yüzonbirmilyonyüzonbirinci") + self.assertEqual(num2words(111001111, True, "tr"), u"yüzonbirmilyonbinyüzonbirinci") + self.assertEqual(num2words(111111111, True, "tr"), u"yüzonbirmilyonyüzonbirbinyüzonbirinci") + self.assertEqual(num2words(100001000, True, "tr"), u"yüzmilyonbininci") + self.assertEqual(num2words(100001001, True, "tr"), u"yüzmilyonbinbirinci") + self.assertEqual(num2words(100010000, True, "tr"), u"yüzmilyononbininci") + self.assertEqual(num2words(100010001, True, "tr"), u"yüzmilyononbinbirinci") + self.assertEqual(num2words(100011000, True, "tr"), u"yüzmilyononbirbininci") + self.assertEqual(num2words(100011001, True, "tr"), u"yüzmilyononbirbinbirinci") + self.assertEqual(num2words(101011001, True, "tr"), u"yüzbirmilyononbirbinbirinci") + self.assertEqual(num2words(101011010, True, "tr"), u"yüzbirmilyononbirbinonuncu") + self.assertEqual(num2words(1101011010, True, "tr"), u"birmilyaryüzbirmilyononbirbinonuncu") + self.assertEqual(num2words(101101011010, True, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonuncu") + self.assertEqual(num2words(1000000000001, True, "tr"), u"birtrilyonbirinci") + + self.assertEqual(num2words(1, False, "tr"), u"bir") + self.assertEqual(num2words(2, False, "tr"), u"iki") + self.assertEqual(num2words(9, False, "tr"), u"dokuz") + self.assertEqual(num2words(10, False, "tr"), u"on") + self.assertEqual(num2words(11, False, "tr"), u"onbir") + self.assertEqual(num2words(44, False, "tr"), u"kırkdört") + self.assertEqual(num2words(100, False, "tr"), u"yüz") + self.assertEqual(num2words(101, False, "tr"), u"yüzbir") + self.assertEqual(num2words(103, False, "tr"), u"yüzüç") + self.assertEqual(num2words(110, False, "tr"), u"yüzon") + self.assertEqual(num2words(1000, False, "tr"), u"bin") + self.assertEqual(num2words(1001, False, "tr"), u"binbir") + self.assertEqual(num2words(10000, False, "tr"), u"onbin") + self.assertEqual(num2words(10100, False, "tr"), u"onbinyüz") + self.assertEqual(num2words(11000, False, "tr"), u"onbirbin") + self.assertEqual(num2words(35000, False, "tr"), u"otuzbeşbin") + self.assertEqual(num2words(116331, False, "tr"), u"yüzonaltıbinüçyüzotuzbir") + self.assertEqual(num2words(116330, False, "tr"), u"yüzonaltıbinüçyüzotuz") + self.assertEqual(num2words(500000, False, "tr"), u"beşyüzbin") + self.assertEqual(num2words(501000, False, "tr"), u"beşyüzbirbin") + self.assertEqual(num2words(1000111, False, "tr"), u"birmilyonyüzonbir") + self.assertEqual(num2words(111000111, False, "tr"), u"yüzonbirmilyonyüzonbir") + self.assertEqual(num2words(111001111, False, "tr"), u"yüzonbirmilyonbinyüzonbir") + self.assertEqual(num2words(111111111, False, "tr"), u"yüzonbirmilyonyüzonbirbinyüzonbir") + self.assertEqual(num2words(100001000, False, "tr"), u"yüzmilyonbin") + self.assertEqual(num2words(100001001, False, "tr"), u"yüzmilyonbinbir") + self.assertEqual(num2words(100010000, False, "tr"), u"yüzmilyononbin") + self.assertEqual(num2words(100010001, False, "tr"), u"yüzmilyononbinbir") + self.assertEqual(num2words(100011000, False, "tr"), u"yüzmilyononbirbin") + self.assertEqual(num2words(100011001, False, "tr"), u"yüzmilyononbirbinbir") + self.assertEqual(num2words(101011001, False, "tr"), u"yüzbirmilyononbirbinbir") + self.assertEqual(num2words(101011010, False, "tr"), u"yüzbirmilyononbirbinon") + self.assertEqual(num2words(1101011010, False, "tr"), u"birmilyaryüzbirmilyononbirbinon") + self.assertEqual(num2words(101101011010, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinon") + self.assertEqual(num2words(1000000000001, False, "tr"), u"birtrilyonbir") + self.assertEqual(num2words(0.1, False, "tr"), u"sıfırvirgülon") + self.assertEqual(num2words(0.21, False, "tr"), u"sıfırvirgülyirmibir") + self.assertEqual(num2words(1.01, False, "tr"), u"birvirgülbir") + self.assertEqual(num2words(1.1, False, "tr"), u"birvirgülon") + self.assertEqual(num2words(1.21, False, "tr"), u"birvirgülyirmibir") + self.assertEqual(num2words(101101011010.02, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki") + self.assertEqual(num2words(101101011010.2, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi") From 969c5daf9b971817ae9f84d01038b0763a1593d0 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Fri, 1 Sep 2017 00:46:23 +0300 Subject: [PATCH 2/7] var names changed to English --- num2words/lang_TR.py | 604 +++++++++++++++++++++---------------------- 1 file changed, 302 insertions(+), 302 deletions(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 7b011c1..45add35 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -22,7 +22,7 @@ from __future__ import unicode_literals class Num2Word_TR(object): def __init__(self): self.precision = 2 - self.negword = u"eksi " + self.negword = u"eksi" self.pointword = u"virgül" self.CURRENCY_UNIT = (u"lira",) self.CURRENCY_SUBUNIT = (u"kuruş",) @@ -37,26 +37,27 @@ class Num2Word_TR(object): self.exclude_title = ["et", "virgule", "moins"] # ordered number tuples in Turkish self.ORDINAL_SIGN = (",",) - self.CARDINAL_BIRLER = ( + self.CARDINAL_ONES = ( u"sıfır", u"bir", u"iki", u"üç", u"dört", u"beş", u"altı", u"yedi", u"sekiz", u"dokuz",) - self.ORDINAL_BIRLER = ( - u"", u"birinci", u"ikinci", u"üçüncü", u"dördüncü", u"beşinci", u"altıncı", u"yedinci", u"sekizinci", u"dokuzuncu",) - self.CARDINAL_ONLAR = ( + self.ORDINAL_ONES = ( + u"", u"birinci", u"ikinci", u"üçüncü", u"dördüncü", u"beşinci", u"altıncı", u"yedinci", u"sekizinci", + u"dokuzuncu",) + self.CARDINAL_TEN = ( u"", u"on", u"yirmi", u"otuz", u"kırk", u"elli", u"altmış", u"yetmiş", u"seksen", u"doksan",) - self.ORDINAL_ONLAR = ( - u"", u"onuncu", u"yirminci", u"otuzuncu", u"kırkıncı", u"ellinci", u"altmışıncı", u"yetmişinci", u"sekseninci", - u"doksanıncı",) - self.CARDINAL_YUZLER = (u"yüz",) - self.ORDINAL_YUZLER = (u"yüzüncü",) - self.CARDINAL_UCLU_GRUPLAR = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",) - self.ORDINAL_UCLU_GRUPLAR = ( + self.ORDINAL_TENS = ( + u"", u"onuncu", u"yirminci", u"otuzuncu", u"kırkıncı", u"ellinci", u"altmışıncı", u"yetmişinci", + u"sekseninci", u"doksanıncı",) + self.CARDINAL_HUNDREDS = (u"yüz",) + self.ORDINAL_HUNDREDS = (u"yüzüncü",) + self.CARDINAL_TRIPLETS = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",) + self.ORDINAL_TRIPLETS = ( u"", u"bininci", u"milyonuncu", u"milyarıncı", u"trilyonuncu", u"katrilyonuncu", u"kentilyon",) - self.MAXVAL = (10 ** (len(self.CARDINAL_UCLU_GRUPLAR) * 3)) - 1 + self.MAXVAL = (10 ** (len(self.CARDINAL_TRIPLETS) * 3)) - 1 - self.okunacak_tam_sayi = [] - self.okunacak_uclu_grup_sayisi = 0 - self.okunacak_artik_basamak_sayisi = 0 - self.son_sifir_basamagi = 0 + self.integers_to_read = [] + self.total_triplets_to_read = 0 + self.total_digits_outside_triplets = 0 + self.order_of_last_zero_digit = 0 # def set_numwords(self): @@ -77,202 +78,202 @@ class Num2Word_TR(object): return self.to_cardinal_float(value) self.splitnum(value) - if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]): + if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error return oku - if self.okunacak_uclu_grup_sayisi == 1: - if self.okunacak_artik_basamak_sayisi == 2: - if self.son_sifir_basamagi == 1: + if self.total_triplets_to_read == 1: + if self.total_digits_outside_triplets == 2: + if self.order_of_last_zero_digit == 1: # number like x0, read cardinal x0 and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] return oku - if self.son_sifir_basamagi == 0: + if self.order_of_last_zero_digit == 0: # number like xy, read cardinal xy and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][0] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][0] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] return oku - if self.okunacak_artik_basamak_sayisi == 1: - if self.son_sifir_basamagi == 0: + if self.total_digits_outside_triplets == 1: + if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] return oku - if self.okunacak_artik_basamak_sayisi == 0: - if self.son_sifir_basamagi == 2: + if self.total_digits_outside_triplets == 0: + if self.order_of_last_zero_digit == 2: # number like x00, read cardinal x00 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] return oku - if self.son_sifir_basamagi == 1: + if self.order_of_last_zero_digit == 1: # number like xy0, read cardinal xy0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] return oku - if self.son_sifir_basamagi == 0: + if self.order_of_last_zero_digit == 0: # number like xyz, read cardinal xyz and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] return oku - if self.okunacak_uclu_grup_sayisi >= 2: - if self.okunacak_artik_basamak_sayisi == 2: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_triplets_to_read >= 2: + if self.total_digits_outside_triplets == 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read cardinal x0 0..0 and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read cardinal xy 0..0 and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][1] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][1] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][1] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][1] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - if self.okunacak_artik_basamak_sayisi == 1: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_digits_outside_triplets == 1: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read cardinal x 0..0 and return - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - if self.okunacak_artik_basamak_sayisi == 0: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_digits_outside_triplets == 0: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read cardinal x00 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read cardinal xy0 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read cardinal xyz 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)): - okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i - if self.okunacak_artik_basamak_sayisi == 0: + for i in list(range(self.total_triplets_to_read - 1, 0, -1)): + okunan_grup_sirasi = self.total_triplets_to_read - i + if self.total_digits_outside_triplets == 0: son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi + son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0": - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])] - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": + if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": + if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 1: if i == 1: - oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_HUNDREDS[0] return oku elif i > 1: - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku else: - oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_HUNDREDS[0] - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0": - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 2: if i == 1: - oku += self.CARDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.CARDINAL_TEN[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] return oku elif i > 1: - oku += self.CARDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_TEN[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku else: - oku += self.CARDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.CARDINAL_TEN[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0": - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 3: if i == 1: - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] return oku if i == 2: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku if i > 2: - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku else: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] else: if i == 2: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku @@ -280,13 +281,13 @@ class Num2Word_TR(object): self.splitnum(value) oku = "" oku += self.pointword - if len(self.okunacak_tam_sayi[1]) >= 1: - if not self.okunacak_tam_sayi[1][0] == "0": - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[1][0])] - if len(self.okunacak_tam_sayi[1]) == 2: - if not self.okunacak_tam_sayi[1][1] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[1][1])] - oku = self.to_cardinal(int(self.okunacak_tam_sayi[0])) + oku + if len(self.integers_to_read[1]) >= 1: + if not self.integers_to_read[1][0] == "0": + oku += self.CARDINAL_TEN[int(self.integers_to_read[1][0])] + if len(self.integers_to_read[1]) == 2: + if not self.integers_to_read[1][1] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[1][1])] + oku = self.to_cardinal(int(self.integers_to_read[0])) + oku return oku # def merge(self, curr, next): @@ -301,10 +302,8 @@ class Num2Word_TR(object): if not float(value) == value: iscardinal = False except (ValueError, TypeError): - iscardinal = False raise TypeError(self.errmsg_nonnum) if abs(value) >= self.MAXVAL: - iscardinal = False raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL)) return iscardinal @@ -314,13 +313,10 @@ class Num2Word_TR(object): if not int(value) == value: isordinal = False if not abs(value) == value: - isordinal = False raise TypeError(self.errmsg_negord.format(value)) except (ValueError, TypeError): - isordinal = False raise TypeError(self.errmsg_nonnum) if abs(value) >= self.MAXVAL: - isordinal = False raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL)) return isordinal @@ -334,202 +330,202 @@ class Num2Word_TR(object): if isordinal: self.splitnum(value) - if self.son_sifir_basamagi >= len(self.okunacak_tam_sayi[0]): + if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error return oku - if self.okunacak_uclu_grup_sayisi == 1: - if self.okunacak_artik_basamak_sayisi == 2: - if self.son_sifir_basamagi == 1: + if self.total_triplets_to_read == 1: + if self.total_digits_outside_triplets == 2: + if self.order_of_last_zero_digit == 1: # number like x0, read ordinal x0 and return - oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] + oku += self.ORDINAL_TENS[int(self.integers_to_read[0][0])] return oku - if self.son_sifir_basamagi == 0: + if self.order_of_last_zero_digit == 0: # number like xy, read ordinal xy and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][0] == "0": - oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][0] == "0": + oku += self.ORDINAL_ONES[int(self.integers_to_read[0][1])] return oku - if self.okunacak_artik_basamak_sayisi == 1: - if self.son_sifir_basamagi == 0: + if self.total_digits_outside_triplets == 1: + if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] + oku += self.ORDINAL_ONES[int(self.integers_to_read[0][0])] return oku - if self.okunacak_artik_basamak_sayisi == 0: - if self.son_sifir_basamagi == 2: + if self.total_digits_outside_triplets == 0: + if self.order_of_last_zero_digit == 2: # number like x00, read ordinal x00 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.ORDINAL_YUZLER[0] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.ORDINAL_HUNDREDS[0] return oku - if self.son_sifir_basamagi == 1: + if self.order_of_last_zero_digit == 1: # number like xy0, read ordinal xy0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.ORDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.ORDINAL_TENS[int(self.integers_to_read[0][1])] return oku - if self.son_sifir_basamagi == 0: + if self.order_of_last_zero_digit == 0: # number like xyz, read ordinal xyz and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - oku += self.ORDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + oku += self.ORDINAL_ONES[int(self.integers_to_read[0][2])] return oku - if self.okunacak_uclu_grup_sayisi >= 2: - if self.okunacak_artik_basamak_sayisi == 2: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_triplets_to_read >= 2: + if self.total_digits_outside_triplets == 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read ordinal x0 0..0 and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read ordinal xy 0..0 and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][1] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][1] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][0])] - if not self.okunacak_tam_sayi[0][1] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][1])] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] + if not self.integers_to_read[0][1] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - if self.okunacak_artik_basamak_sayisi == 1: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_digits_outside_triplets == 1: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read ordinal x 0..0 and return - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 1: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][0] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - if self.okunacak_artik_basamak_sayisi == 0: - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 1: + if self.total_digits_outside_triplets == 0: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read ordinal x00 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 2: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read ordinal xy0 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - 3: + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read ordinal xyz 0..0 and return - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] - oku += self.ORDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] + oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] return oku - if self.son_sifir_basamagi < len(self.okunacak_tam_sayi[0]) - 3: + if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.okunacak_tam_sayi[0][0] == "1": - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][0])] - oku += self.CARDINAL_YUZLER[0] - oku += self.CARDINAL_ONLAR[int(self.okunacak_tam_sayi[0][1])] - if not self.okunacak_tam_sayi[0][2] == "0": - if not (self.okunacak_uclu_grup_sayisi == 2 and self.okunacak_tam_sayi[0][2] == "1"): - oku += self.CARDINAL_BIRLER[int(self.okunacak_tam_sayi[0][2])] - oku += self.CARDINAL_UCLU_GRUPLAR[self.okunacak_uclu_grup_sayisi - 1] + if not self.integers_to_read[0][0] == "1": + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + if not self.integers_to_read[0][2] == "0": + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] + oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - for i in list(range(self.okunacak_uclu_grup_sayisi - 1, 0, -1)): - okunan_grup_sirasi = self.okunacak_uclu_grup_sayisi - i - if self.okunacak_artik_basamak_sayisi == 0: + for i in list(range(self.total_triplets_to_read - 1, 0, -1)): + okunan_grup_sirasi = self.total_triplets_to_read - i + if self.total_digits_outside_triplets == 0: son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.okunacak_artik_basamak_sayisi + son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "0": - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi])] - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": + if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": + if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 1: if i == 1: - oku += self.ORDINAL_YUZLER[0] + oku += self.ORDINAL_HUNDREDS[0] return oku elif i > 1: - oku += self.CARDINAL_YUZLER[0] - oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_HUNDREDS[0] + oku += self.ORDINAL_TRIPLETS[i - 1] return oku else: - oku += self.CARDINAL_YUZLER[0] + oku += self.CARDINAL_HUNDREDS[0] - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1] == "0": - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 2: if i == 1: - oku += self.ORDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.ORDINAL_TENS[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] return oku elif i > 1: - oku += self.CARDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] - oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_TEN[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + oku += self.ORDINAL_TRIPLETS[i - 1] return oku else: - oku += self.CARDINAL_ONLAR[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 1])] + oku += self.CARDINAL_TEN[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - if not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "0": - if self.son_sifir_basamagi == len(self.okunacak_tam_sayi[0]) - ( + if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( son_okunan_basamak_sirasi) - 3: if i == 1: - oku += self.ORDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.ORDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] return oku if i == 2: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + oku += self.ORDINAL_TRIPLETS[i - 1] return oku if i > 2: - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + oku += self.ORDINAL_TRIPLETS[i - 1] return oku else: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] else: - if not self.okunacak_tam_sayi[0][ + if not self.integers_to_read[0][ son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] - elif not self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_BIRLER[ - int(self.okunacak_tam_sayi[0][son_okunan_basamak_sirasi + 2])] + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": + oku += self.CARDINAL_ONES[ + int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_UCLU_GRUPLAR[i - 1] + oku += self.CARDINAL_TRIPLETS[i - 1] return oku @@ -538,27 +534,27 @@ class Num2Word_TR(object): isordinal = self.verify_ordinal(value) if isordinal: self.splitnum(value) - oku = self.okunacak_tam_sayi[0] + self.ORDINAL_SIGN[0] + oku = self.integers_to_read[0] + self.ORDINAL_SIGN[0] return oku # def inflect(self, value, text): def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="", divisor=100, longval=True, cents=True): - kesirlibolum = str(int(val * 10**self.precision)) - self.okunacak_tam_sayi = [str(int(val)), kesirlibolum[len(kesirlibolum)-self.precision:]] - if len(self.okunacak_tam_sayi[0]) % 3 > 0: - self.okunacak_uclu_grup_sayisi = (len(self.okunacak_tam_sayi[0]) // 3) + 1 - elif len(self.okunacak_tam_sayi[0]) % 3 == 0: - self.okunacak_uclu_grup_sayisi = len(self.okunacak_tam_sayi[0]) // 3 - self.okunacak_artik_basamak_sayisi = len(self.okunacak_tam_sayi[0]) % 3 + kesirlibolum = str(int(val * 10 ** self.precision)) + self.integers_to_read = [str(int(val)), kesirlibolum[len(kesirlibolum) - self.precision:]] + if len(self.integers_to_read[0]) % 3 > 0: + self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3) + 1 + elif len(self.integers_to_read[0]) % 3 == 0: + self.total_triplets_to_read = len(self.integers_to_read[0]) // 3 + self.total_digits_outside_triplets = len(self.integers_to_read[0]) % 3 - okunacak = list(self.okunacak_tam_sayi[0][::-1]) - self.son_sifir_basamagi = 0 + okunacak = list(self.integers_to_read[0][::-1]) + self.order_of_last_zero_digit = 0 found = 0 for i in range(len(okunacak) - 1): if int(okunacak[i]) == 0 and found == 0: - self.son_sifir_basamagi = i + 1 + self.order_of_last_zero_digit = i + 1 else: found = 1 @@ -566,10 +562,14 @@ class Num2Word_TR(object): return self.to_cardinal(value) def to_currency(self, value, **kwargs): - return self.to_cardinal(value) + valueparts = self.to_cardinal(value).split(self.pointword) + if len(valueparts) == 1: + return valueparts[0] + self.CURRENCY_UNIT[0] + if len(valueparts) == 2: + return self.CURRENCY_UNIT[0].join(valueparts) + self.CURRENCY_SUBUNIT[0] - # def base_setup(self): + # def base_setup(self): - # def setup(self): + # def setup(self): - # def test(self, value): + # def test(self, value): From a235058ba6a89f1d5a865885dd7721234c7c1147 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Sat, 2 Sep 2017 14:22:50 +0300 Subject: [PATCH 3/7] refactoring data elements --- num2words/lang_TR.py | 587 +++++++++++++++++++++++-------------------- tests/test_tr.py | 16 ++ 2 files changed, 326 insertions(+), 277 deletions(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 45add35..fe51b00 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -34,25 +34,84 @@ class Num2Word_TR(object): self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz." # abs(%s) must be less than %s. self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. Yazıya çevrilebilecek en büyük rakam {}." - self.exclude_title = ["et", "virgule", "moins"] + self.exclude_title = [] # ordered number tuples in Turkish - self.ORDINAL_SIGN = (",",) - self.CARDINAL_ONES = ( - u"sıfır", u"bir", u"iki", u"üç", u"dört", u"beş", u"altı", u"yedi", u"sekiz", u"dokuz",) - self.ORDINAL_ONES = ( - u"", u"birinci", u"ikinci", u"üçüncü", u"dördüncü", u"beşinci", u"altıncı", u"yedinci", u"sekizinci", - u"dokuzuncu",) - self.CARDINAL_TEN = ( - u"", u"on", u"yirmi", u"otuz", u"kırk", u"elli", u"altmış", u"yetmiş", u"seksen", u"doksan",) - self.ORDINAL_TENS = ( - u"", u"onuncu", u"yirminci", u"otuzuncu", u"kırkıncı", u"ellinci", u"altmışıncı", u"yetmişinci", - u"sekseninci", u"doksanıncı",) - self.CARDINAL_HUNDREDS = (u"yüz",) - self.ORDINAL_HUNDREDS = (u"yüzüncü",) - self.CARDINAL_TRIPLETS = (u"", u"bin", u"milyon", u"milyar", u"trilyon", u"katrilyon", u"kentilyon",) - self.ORDINAL_TRIPLETS = ( - u"", u"bininci", u"milyonuncu", u"milyarıncı", u"trilyonuncu", u"katrilyonuncu", u"kentilyon",) - self.MAXVAL = (10 ** (len(self.CARDINAL_TRIPLETS) * 3)) - 1 + self.DECIMAL_SIGN = (",",) + self.ORDINAL_SIGN = (".",) + self.ZERO = (u"sıfır",) + self.CARDINAL_ONES = { + "1": u"bir", + "2": u"iki", + "3": u"üç", + "4": u"dört", + "5": u"beş", + "6": u"altı", + "7": u"yedi", + "8": u"sekiz", + "9": u"dokuz" + } + self.ORDINAL_ONES = { + "1": u"birinci", + "2": u"ikinci", + "3": u"üçüncü", + "4": u"dördüncü", + "5": u"beşinci", + "6": u"altıncı", + "7": u"yedinci", + "8": u"sekizinci", + "9": u"dokuzuncu", + } + self.CARDINAL_TENS = { + "1": u"on", + "2": u"yirmi", + "3": u"otuz", + "4": u"kırk", + "5": u"elli", + "6": u"altmış", + "7": u"yetmiş", + "8": u"seksen", + "9": u"doksan" + } + self.ORDINAL_TENS = { + "1": u"onuncu", + "2": u"yirminci", + "3": u"otuzuncu", + "4": u"kırkıncı", + "5": u"ellinci", + "6": u"altmışıncı", + "7": u"yetmişinci", + "8": u"sekseninci", + "9": u"doksanıncı" + } + self.HUNDREDS = { + "2": u"iki", + "3": u"üç", + "4": u"dört", + "5": u"beş", + "6": u"altı", + "7": u"yedi", + "8": u"sekiz", + "9": u"dokuz" + } + self.CARDINAL_HUNDRED = (u"yüz",) + self.ORDINAL_HUNDRED = (u"yüzüncü",) + self.CARDINAL_TRIPLETS = { + 1: u"bin", + 2: u"milyon", + 3: u"milyar", + 4: u"trilyon", + 5: u"katrilyon", + 6: u"kentilyon" + } + self.ORDINAL_TRIPLETS = { + 1: u"bininci", + 2: u"milyonuncu", + 3: u"milyarıncı", + 4: u"trilyonuncu", + 5: u"katrilyonuncu", + 6: u"kentilyon" + } + self.MAXVAL = (10 ** ((len(self.CARDINAL_TRIPLETS) + 1) * 3)) - 1 self.integers_to_read = [] self.total_triplets_to_read = 0 @@ -71,7 +130,7 @@ class Num2Word_TR(object): return self.to_splitnum(value) def to_cardinal(self, value): - oku = "" + wrd = "" is_cardinal = self.verify_cardinal(value) if is_cardinal: if not int(value) == value: @@ -80,215 +139,203 @@ class Num2Word_TR(object): if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error - return oku + return wrd if self.total_triplets_to_read == 1: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == 1: # number like x0, read cardinal x0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xy, read cardinal xy and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][0] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + return wrd if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + return wrd if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == 2: # number like x00, read cardinal x00 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + return wrd if self.order_of_last_zero_digit == 1: # number like xy0, read cardinal xy0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xyz, read cardinal xyz and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + return wrd if self.total_triplets_to_read >= 2: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read cardinal x0 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read cardinal xy 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read cardinal x 0..0 and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read cardinal x00 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read cardinal xy0 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read cardinal xyz 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] for i in list(range(self.total_triplets_to_read - 1, 0, -1)): - okunan_grup_sirasi = self.total_triplets_to_read - i + reading_triplet_order = self.total_triplets_to_read - i if self.total_digits_outside_triplets == 0: - son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + last_read_digit_order = reading_triplet_order * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets + last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets - if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000": + if not self.integers_to_read[0][last_read_digit_order] == "0": + wrd += self.HUNDREDS.get(self.integers_to_read[0][last_read_digit_order], "") if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 1: + last_read_digit_order) - 1: if i == 1: - oku += self.CARDINAL_HUNDREDS[0] - return oku + wrd += self.CARDINAL_HUNDRED[0] + return wrd elif i > 1: - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_HUNDREDS[0] + wrd += self.CARDINAL_HUNDRED[0] - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if not self.integers_to_read[0][last_read_digit_order + 1] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 2: + last_read_digit_order) - 2: if i == 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + return wrd elif i > 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1], + "") - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if not self.integers_to_read[0][last_read_digit_order + 2] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 3: + last_read_digit_order) - 3: if i == 1: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + return wrd if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd if i > 2: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.CARDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.CARDINAL_TRIPLETS[i - 1] + return wrd else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") else: if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") - oku += self.CARDINAL_TRIPLETS[i - 1] + wrd += self.CARDINAL_TRIPLETS[i - 1] - return oku + return wrd def to_cardinal_float(self, value): self.splitnum(value) - oku = "" - oku += self.pointword + wrd = "" + wrd += self.pointword if len(self.integers_to_read[1]) >= 1: - if not self.integers_to_read[1][0] == "0": - oku += self.CARDINAL_TEN[int(self.integers_to_read[1][0])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[1][0], "") + if len(self.integers_to_read[1]) == 2: - if not self.integers_to_read[1][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[1][1])] - oku = self.to_cardinal(int(self.integers_to_read[0])) + oku - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[1][1], "") + + if self.integers_to_read[0] == "0": + wrd = self.ZERO[0] + wrd + else: + wrd = self.to_cardinal(int(self.integers_to_read[0])) + wrd + return wrd # def merge(self, curr, next): @@ -325,218 +372,204 @@ class Num2Word_TR(object): # def set_wordnums(self): def to_ordinal(self, value): - oku = "" + wrd = "" isordinal = self.verify_ordinal(value) if isordinal: self.splitnum(value) if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error - return oku + return wrd if self.total_triplets_to_read == 1: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == 1: # number like x0, read ordinal x0 and return - oku += self.ORDINAL_TENS[int(self.integers_to_read[0][0])] - return oku + wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][0], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xy, read ordinal xy and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][0] == "0": - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][1])] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][1], "") + return wrd if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == 0: # number like x, read ordinal x and return - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][0])] - return oku + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][0], "") + return wrd if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == 2: # number like x00, read ordinal x00 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_HUNDREDS[0] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_HUNDRED[0] + return wrd if self.order_of_last_zero_digit == 1: # number like xy0, read ordinal xy0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TENS[int(self.integers_to_read[0][1])] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][1], "") + return wrd if self.order_of_last_zero_digit == 0: # number like xyz, read ordinal xyz and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") if not self.integers_to_read[0][2] == "0": - oku += self.ORDINAL_ONES[int(self.integers_to_read[0][2])] - return oku + wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][2], "") + return wrd if self.total_triplets_to_read >= 2: if self.total_digits_outside_triplets == 2: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x0 and all 0s, read ordinal x0 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy and all 0s, read ordinal xy 0..0 and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2: # number like xy and others, read cardinal xy n..n and return - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][0])] - if not self.integers_to_read[0][1] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][1])] - - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x and all 0s, read ordinal x 0..0 and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1: # number like x and others, read cardinal x n..n and return if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] if self.total_digits_outside_triplets == 0: if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1: # number like x00 and all 0s, read ordinal x00 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2: # number like xy0 and all 0s, read ordinal xy0 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3: # number like xyz and all 0s, read ordinal xyz 0..0 and return - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] - return oku + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1] + return wrd if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3: # number like xyz and all others, read cardinal xyz n..n - if not self.integers_to_read[0][0] == "1": - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][0])] - oku += self.CARDINAL_HUNDREDS[0] - oku += self.CARDINAL_TEN[int(self.integers_to_read[0][1])] - if not self.integers_to_read[0][2] == "0": - if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): - oku += self.CARDINAL_ONES[int(self.integers_to_read[0][2])] - oku += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] + wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "") + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "") + if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"): + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "") + wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1] for i in list(range(self.total_triplets_to_read - 1, 0, -1)): - okunan_grup_sirasi = self.total_triplets_to_read - i + reading_triplet_order = self.total_triplets_to_read - i if self.total_digits_outside_triplets == 0: - son_okunan_basamak_sirasi = okunan_grup_sirasi * 3 + last_read_digit_order = reading_triplet_order * 3 else: - son_okunan_basamak_sirasi = (okunan_grup_sirasi - 1) * 3 + self.total_digits_outside_triplets + last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets - if not self.integers_to_read[0][son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 3] == "000": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "0": - if not self.integers_to_read[0][son_okunan_basamak_sirasi] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi])] + if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000": + if not self.integers_to_read[0][last_read_digit_order] == "0": + if not self.integers_to_read[0][last_read_digit_order] == "1": + wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][last_read_digit_order], "") if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 1: + last_read_digit_order) - 1: if i == 1: - oku += self.ORDINAL_HUNDREDS[0] - return oku + wrd += self.ORDINAL_HUNDRED[0] + return wrd elif i > 1: - oku += self.CARDINAL_HUNDREDS[0] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_HUNDRED[0] + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_HUNDREDS[0] + wrd += self.CARDINAL_HUNDRED[0] - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 1] == "0": + if not self.integers_to_read[0][last_read_digit_order + 1] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 2: + last_read_digit_order) - 2: if i == 1: - oku += self.ORDINAL_TENS[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - return oku + wrd += self.ORDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + return wrd elif i > 1: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_TENS.get( + self.integers_to_read[0][last_read_digit_order + 1], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: - oku += self.CARDINAL_TEN[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 1])] + wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1], + "") - if not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "0": + if not self.integers_to_read[0][last_read_digit_order + 2] == "0": if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - ( - son_okunan_basamak_sirasi) - 3: + last_read_digit_order) - 3: if i == 1: - oku += self.ORDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - return oku + wrd += self.ORDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + return wrd if i == 2: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd if i > 2: - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - oku += self.ORDINAL_TRIPLETS[i - 1] - return oku + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + wrd += self.ORDINAL_TRIPLETS[i - 1] + return wrd else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") else: if not self.integers_to_read[0][ - son_okunan_basamak_sirasi: son_okunan_basamak_sirasi + 2] == "00": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] - elif not self.integers_to_read[0][son_okunan_basamak_sirasi + 2] == "1": - oku += self.CARDINAL_ONES[ - int(self.integers_to_read[0][son_okunan_basamak_sirasi + 2])] + last_read_digit_order: last_read_digit_order + 2] == "00": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") + elif not self.integers_to_read[0][last_read_digit_order + 2] == "1": + wrd += self.CARDINAL_ONES.get( + self.integers_to_read[0][last_read_digit_order + 2], "") - oku += self.CARDINAL_TRIPLETS[i - 1] + wrd += self.CARDINAL_TRIPLETS[i - 1] - return oku + return wrd def to_ordinal_num(self, value): - oku = "" + wrd = "" isordinal = self.verify_ordinal(value) if isordinal: self.splitnum(value) - oku = self.integers_to_read[0] + self.ORDINAL_SIGN[0] + wrd = self.integers_to_read[0] + self.ORDINAL_SIGN[0] - return oku + return wrd # def inflect(self, value, text): diff --git a/tests/test_tr.py b/tests/test_tr.py index 46210b6..4cc9d4d 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -34,10 +34,18 @@ class Num2WordsTRTest(TestCase): self.assertEqual(num2words(101, True, "tr"), u"yüzbirinci") self.assertEqual(num2words(103, True, "tr"), u"yüzüçüncü") self.assertEqual(num2words(110, True, "tr"), u"yüzonuncu") + self.assertEqual(num2words(111, True, "tr"), u"yüzonbirinci") self.assertEqual(num2words(1000, True, "tr"), u"bininci") self.assertEqual(num2words(1001, True, "tr"), u"binbirinci") + self.assertEqual(num2words(1010, True, "tr"), u"binonuncu") + self.assertEqual(num2words(1011, True, "tr"), u"binonbirinci") + self.assertEqual(num2words(1100, True, "tr"), u"binyüzüncü") + self.assertEqual(num2words(1110, True, "tr"), u"binyüzonuncu") + self.assertEqual(num2words(2341, True, "tr"), u"ikibinüçyüzkırkbirinci") self.assertEqual(num2words(10000, True, "tr"), u"onbininci") + self.assertEqual(num2words(10010, True, "tr"), u"onbinonuncu") self.assertEqual(num2words(10100, True, "tr"), u"onbinyüzüncü") + self.assertEqual(num2words(10110, True, "tr"), u"onbinyüzonuncu") self.assertEqual(num2words(11000, True, "tr"), u"onbirbininci") self.assertEqual(num2words(35000, True, "tr"), u"otuzbeşbininci") self.assertEqual(num2words(116331, True, "tr"), u"yüzonaltıbinüçyüzotuzbirinci") @@ -70,10 +78,18 @@ class Num2WordsTRTest(TestCase): self.assertEqual(num2words(101, False, "tr"), u"yüzbir") self.assertEqual(num2words(103, False, "tr"), u"yüzüç") self.assertEqual(num2words(110, False, "tr"), u"yüzon") + self.assertEqual(num2words(111, False, "tr"), u"yüzonbir") self.assertEqual(num2words(1000, False, "tr"), u"bin") self.assertEqual(num2words(1001, False, "tr"), u"binbir") + self.assertEqual(num2words(1010, False, "tr"), u"binon") + self.assertEqual(num2words(1011, False, "tr"), u"binonbir") + self.assertEqual(num2words(1100, False, "tr"), u"binyüz") + self.assertEqual(num2words(1110, False, "tr"), u"binyüzon") + self.assertEqual(num2words(2341, False, "tr"), u"ikibinüçyüzkırkbir") self.assertEqual(num2words(10000, False, "tr"), u"onbin") + self.assertEqual(num2words(10010, False, "tr"), u"onbinon") self.assertEqual(num2words(10100, False, "tr"), u"onbinyüz") + self.assertEqual(num2words(10110, False, "tr"), u"onbinyüzon") self.assertEqual(num2words(11000, False, "tr"), u"onbirbin") self.assertEqual(num2words(35000, False, "tr"), u"otuzbeşbin") self.assertEqual(num2words(116331, False, "tr"), u"yüzonaltıbinüçyüzotuzbir") From bdc9b8e8ea7faa0158ac7b1985249c1432d58444 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Mon, 4 Sep 2017 23:11:39 +0300 Subject: [PATCH 4/7] remove the last comma in dictionary --- num2words/lang_TR.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index fe51b00..f716ea5 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -59,7 +59,7 @@ class Num2Word_TR(object): "6": u"altıncı", "7": u"yedinci", "8": u"sekizinci", - "9": u"dokuzuncu", + "9": u"dokuzuncu" } self.CARDINAL_TENS = { "1": u"on", From 5ff8e343a02dbecb6c55afbc84e915feb9480f77 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Tue, 5 Sep 2017 08:10:42 +0300 Subject: [PATCH 5/7] unused elements stripped --- num2words/lang_TR.py | 51 ++++---------------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index f716ea5..b2a0211 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -26,16 +26,11 @@ class Num2Word_TR(object): self.pointword = u"virgül" self.CURRENCY_UNIT = (u"lira",) self.CURRENCY_SUBUNIT = (u"kuruş",) - # type(%s) not in [long, int, float] self.errmsg_nonnum = u"Sadece sayılar yazıya çevrilebilir." - # Cannot treat float %s as ordinal. self.errmsg_floatord = u"Tam sayı olmayan {} sıralamada kullanılamaz." - # Cannot treat negative num %s as ordinal. self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz." - # abs(%s) must be less than %s. self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. Yazıya çevrilebilecek en büyük rakam {}." self.exclude_title = [] - # ordered number tuples in Turkish self.DECIMAL_SIGN = (",",) self.ORDINAL_SIGN = (".",) self.ZERO = (u"sıfır",) @@ -118,14 +113,6 @@ class Num2Word_TR(object): self.total_digits_outside_triplets = 0 self.order_of_last_zero_digit = 0 - # def set_numwords(self): - - # def gen_high_numwords(self, units, tens, lows): - - # def set_mid_numwords(self, mid): - - # def set_low_numwords(self, numwords): - def splitnum(self, value): return self.to_splitnum(value) @@ -155,7 +142,7 @@ class Num2Word_TR(object): if self.total_digits_outside_triplets == 1: if self.order_of_last_zero_digit == 0: - # number like x, read ordinal x and return + # number like x, read cardinal x and return wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "") return wrd @@ -337,12 +324,6 @@ class Num2Word_TR(object): wrd = self.to_cardinal(int(self.integers_to_read[0])) + wrd return wrd - # def merge(self, curr, next): - - # def clean(self, val): - - # def title(self, value): - def verify_cardinal(self, value): iscardinal = True try: @@ -367,10 +348,6 @@ class Num2Word_TR(object): raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL)) return isordinal - # def verify_num(self, value): - - # def set_wordnums(self): - def to_ordinal(self, value): wrd = "" isordinal = self.verify_ordinal(value) @@ -562,20 +539,9 @@ class Num2Word_TR(object): return wrd - def to_ordinal_num(self, value): - wrd = "" - isordinal = self.verify_ordinal(value) - if isordinal: - self.splitnum(value) - wrd = self.integers_to_read[0] + self.ORDINAL_SIGN[0] - - return wrd - - # def inflect(self, value, text): - - def to_splitnum(self, val, hightxt="", lowtxt="", jointxt="", divisor=100, longval=True, cents=True): - kesirlibolum = str(int(val * 10 ** self.precision)) - self.integers_to_read = [str(int(val)), kesirlibolum[len(kesirlibolum) - self.precision:]] + def to_splitnum(self, val): + float_digits = str(int(val * 10 ** self.precision)) + self.integers_to_read = [str(int(val)), float_digits[len(float_digits) - self.precision:]] if len(self.integers_to_read[0]) % 3 > 0: self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3) + 1 elif len(self.integers_to_read[0]) % 3 == 0: @@ -591,18 +557,9 @@ class Num2Word_TR(object): else: found = 1 - def to_year(self, value, **kwargs): - return self.to_cardinal(value) - def to_currency(self, value, **kwargs): valueparts = self.to_cardinal(value).split(self.pointword) if len(valueparts) == 1: return valueparts[0] + self.CURRENCY_UNIT[0] if len(valueparts) == 2: return self.CURRENCY_UNIT[0].join(valueparts) + self.CURRENCY_SUBUNIT[0] - - # def base_setup(self): - - # def setup(self): - - # def test(self, value): From c3cec93c4db18fbf04694c09d70c751da56517f6 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Tue, 5 Sep 2017 14:50:32 +0300 Subject: [PATCH 6/7] correction of 0.0n reading --- num2words/lang_TR.py | 5 ++++- tests/test_tr.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index b2a0211..3bf2406 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -541,7 +541,10 @@ class Num2Word_TR(object): def to_splitnum(self, val): float_digits = str(int(val * 10 ** self.precision)) - self.integers_to_read = [str(int(val)), float_digits[len(float_digits) - self.precision:]] + if not int(val) == 0: + self.integers_to_read = [str(int(val)), float_digits[len(float_digits) - self.precision:]] + else: + self.integers_to_read = ["0", "0" * (self.precision - len(float_digits)) + float_digits[len(float_digits) - self.precision:]] if len(self.integers_to_read[0]) % 3 > 0: self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3) + 1 elif len(self.integers_to_read[0]) % 3 == 0: diff --git a/tests/test_tr.py b/tests/test_tr.py index 4cc9d4d..3e9753d 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -111,6 +111,7 @@ class Num2WordsTRTest(TestCase): self.assertEqual(num2words(1101011010, False, "tr"), u"birmilyaryüzbirmilyononbirbinon") self.assertEqual(num2words(101101011010, False, "tr"), u"yüzbirmilyaryüzbirmilyononbirbinon") self.assertEqual(num2words(1000000000001, False, "tr"), u"birtrilyonbir") + self.assertEqual(num2words(0.01, False, "tr"), u"sıfırvirgülbir") self.assertEqual(num2words(0.1, False, "tr"), u"sıfırvirgülon") self.assertEqual(num2words(0.21, False, "tr"), u"sıfırvirgülyirmibir") self.assertEqual(num2words(1.01, False, "tr"), u"birvirgülbir") From 935d95a87f8e59341991982d51d3dd365ebad3f0 Mon Sep 17 00:00:00 2001 From: Tufan Kaynak <31142607+toofun666@users.noreply.github.com> Date: Tue, 5 Sep 2017 14:53:42 +0300 Subject: [PATCH 7/7] removed ineffective splitnum function --- num2words/lang_TR.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 3bf2406..dc3c26a 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -113,16 +113,13 @@ class Num2Word_TR(object): self.total_digits_outside_triplets = 0 self.order_of_last_zero_digit = 0 - def splitnum(self, value): - return self.to_splitnum(value) - def to_cardinal(self, value): wrd = "" is_cardinal = self.verify_cardinal(value) if is_cardinal: if not int(value) == value: return self.to_cardinal_float(value) - self.splitnum(value) + self.to_splitnum(value) if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error @@ -309,7 +306,7 @@ class Num2Word_TR(object): return wrd def to_cardinal_float(self, value): - self.splitnum(value) + self.to_splitnum(value) wrd = "" wrd += self.pointword if len(self.integers_to_read[1]) >= 1: @@ -352,7 +349,7 @@ class Num2Word_TR(object): wrd = "" isordinal = self.verify_ordinal(value) if isordinal: - self.splitnum(value) + self.to_splitnum(value) if self.order_of_last_zero_digit >= len(self.integers_to_read[0]): # number like 00 and all 0s and even more, raise error