Als ich es gegoogelt habe, gab es nicht viele Beispiele und es war nur alt (Python2-Version), also habe ich es gemacht. (Behoben, weil es ein Fehler war)
python
import re
tt_ksuji = str.maketrans('1 2 3 4 5 6 7 8 90 Ichi 2', '1234567890123')
re_suji = re.compile(r'[10 Millionen Milliarden Billionen\d]+')
re_kunit = re.compile(r'[Hunderttausend]|\d+')
re_manshin = re.compile(r'[100 Milliarden Billionen]|[^100 Milliarden Billionen]+')
TRANSUNIT = {'Zehn': 10,
'Abholen': 10,
'hundert': 100,
'tausend': 1000}
TRANSMANS = {'Zehntausend': 10000,
'Milliarde': 100000000,
'Billion': 1000000000000}
def kansuji2arabic(kstring: str, sep=False):
"""Konvertieren Sie chinesische Zahlen in arabische Zahlen"""
def _transvalue(sj: str, re_obj=re_kunit, transdic=TRANSUNIT):
unit = 1
result = 0
for piece in reversed(re_obj.findall(sj)):
if piece in transdic:
if unit > 1:
result += unit
unit = transdic[piece]
else:
val = int(piece) if piece.isdecimal() else _transvalue(piece)
result += val * unit
unit = 1
if unit > 1:
result += unit
return result
transuji = kstring.translate(tt_ksuji)
for suji in sorted(set(re_suji.findall(transuji)), key=lambda s: len(s),
reverse=True):
if not suji.isdecimal():
arabic = _transvalue(suji, re_manshin, TRANSMANS)
arabic = '{:,}'.format(arabic) if sep else str(arabic)
transuji = transuji.replace(suji, arabic)
elif sep and len(suji) > 3:
transuji = transuji.replace(suji, '{:,}'.format(int(suji)))
return transuji
Tatsächlich wird jede chinesische oder arabische Zahl jetzt auf eine arabische Zahl mit halber Breite normalisiert.
kansuji2arabic('Das Budget für das Geschäftsjahr 2007 beläuft sich auf 135 Millionen, 164 Yen', True)
'Haushaltsbetrag 2015 1,035,001,164 Yen'
Recommended Posts