TR translation

TR translation of num2word reading all cardinals and ordinals up to 10**21-1
This commit is contained in:
Tufan Kaynak
2017-08-30 19:36:29 +03:00
parent 39356b495d
commit a659e63eb5
3 changed files with 682 additions and 1 deletions

View File

@@ -37,6 +37,7 @@ from . import lang_IT
from . import lang_ES_VE from . import lang_ES_VE
from . import lang_ES_CO from . import lang_ES_CO
from . import lang_VN from . import lang_VN
from . import lang_TR
CONVERTER_CLASSES = { CONVERTER_CLASSES = {
@@ -60,7 +61,8 @@ CONVERTER_CLASSES = {
'pt_BR': lang_PT_BR.Num2Word_PT_BR(), 'pt_BR': lang_PT_BR.Num2Word_PT_BR(),
'he': lang_HE.Num2Word_HE(), 'he': lang_HE.Num2Word_HE(),
'it': lang_IT.Num2Word_IT(), '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'): def num2words(number, ordinal=False, lang='en'):

575
num2words/lang_TR.py Normal file
View File

@@ -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):

104
tests/test_tr.py Normal file
View File

@@ -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")