Python中的日语数字转换为阿拉伯数字器

7 投票
2 回答
1965 浏览
提问于 2025-04-17 16:25

有没有一个开源的Python库,可以把汉字数字转换成阿拉伯数字?

输入:10亿2千9百万
输出:1,029,000,000

输入:1亿6,717万2,600
输出:167,172,600

输入:3,139百万
输出:3,139,000,000

关于日本数字系统的更多信息:http://en.wikipedia.org/wiki/Japanese_numerals

在线转换工具:http://www.sljfaq.org/cgi/kanjinumbers.cgi

2 个回答

2

其实,这个可以通过一个函数比较简单地实现:

def convert_kanji(self, zahl):
    japnumber = ("兆", "億",  "万")
    jap_factors = {
            "兆": 1000000000000,
            "億": 100000000,
            "万": 10000
            }

    #Define the variables
    converted_number = 0
    already_found = False
    found_kanji_previous = 0

    try: #If the number can be returned as an integer (i.e. no Kanji in it) -> do it
        return(int(zahl)) 
    except ValueError: #If not, disintegrate it
        for key in japnumber: #do it for every Kanji
            if key in zahl: #If it has been found in the original string:
                gef_kanji = zahl.find(key) #mark, which Kanji has been found
                if not already_found: #if it is the first kanji:
                    intermediate_step = int(zahl[:gef_kanji]) * jap_factors[key] #Convert the number in front of the Kanji with the appropriate factor
                    converted_number = intermediate_step
                    already_found = True
                    found_kanji_previous = gef_kanji
                else: #for sll other kanjis
                    intermediate_step = int(zahl[found_kanji_previous+1:gef_kanji]) * jap_factors[key]
                    converted_number = converted_number + intermediate_step #sum them up
                    found_kanji_previous = gef_kanji

        if len(zahl) > (found_kanji_previous+1):
            converted_number = converted_number + int(zahl[found_kanji_previous+1:])
        return converted_number

这段代码还是比较简单的。它只能接受像2314兆3424亿3422万2342这样的数字格式。

另外,这段代码可能写得很糟糕,因为这是我很久以来写的第一个程序。不过,对于你来说,这可能是一个不错的起点。

我现在正在做一个简单的转换器,可以把日文数字转换成容易理解的西方数字(比如把231亿转换成“23 billion 100 million”;其实它已经能做到这一点了)。我想还有很多工作要做,比如全角字符、完全用汉字表示的数字等等。如果我把这些都搞定了,我可能会像kanjinums那样上传它 :D

2

这个应该可以用:

import kanjinums
kanjinums.kanji2num("五百十一")

在下载并安装了kanjinums之后,就可以使用了,不过这个库不支持通过pip安装。

补充:这个方法只适用于基本的数字,对于复杂的情况就不行了。

经过一些小修改,这个方法实际上是可以工作的,比如:

3139*kanjinums.kanji2num("百万")
3139000000

撰写回答