python3 将中文句子中汉字数字转阿拉伯数字

common_used_numerals_tmp = {'零': 0, '一': 1, '二': 2, '两': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
                            '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}
common_used_numerals = {}
for key in common_used_numerals_tmp:
    common_used_numerals[key] = common_used_numerals_tmp[key]


def chinese2digits(uchars_chinese):
    total = 0
    r = 1  # 表示单位:个十百千...
    for i in range(len(uchars_chinese) - 1, -1, -1):
        val = common_used_numerals.get(uchars_chinese[i])
        if val >= 10 and i == 0:  # 应对 十三 十四 十*之类
            if val > r:
                r = val
                total = total + val
            else:
                r = r * val
                # total =total + r * x
        elif val >= 10:
            if val > r:
                r = val
            else:
                r = r * val
        else:
            total = total + r * val
    return total


num_str_start_symbol = ['一', '二', '两', '三', '四', '五', '六', '七', '八', '九',
                        '十']
more_num_str_symbol = ['零', '一', '二', '两', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千', '万', '亿']

def changeChineseNumToArab(oriStr):
    lenStr = len(oriStr);
    aProStr = ''
    if lenStr == 0:
        return aProStr;

    hasNumStart = False;
    numberStr = ''
    for idx in range(lenStr):
        if oriStr[idx] in num_str_start_symbol:
            if not hasNumStart:
                hasNumStart = True;

            numberStr += oriStr[idx]
        else:
            if hasNumStart:
                if oriStr[idx] in more_num_str_symbol:
                    numberStr += oriStr[idx]
                    continue
                else:
                    numResult = str(chinese2digits(numberStr))
                    numberStr = ''
                    hasNumStart = False;
                    aProStr += numResult

            aProStr += oriStr[idx]
            pass

    if len(numberStr) > 0:
        resultNum = chinese2digits(numberStr)
        aProStr += str(resultNum)

    return aProStr


testStr = ['两百三十二', '我有两百三十二块钱', '十二个套餐', '一亿零八万零三百二十三', '今天天气真不错',
           '百分之八十 discount rate很高了', '千万不要',
           '这个invoice value值一百万',
           '我的一百件商品have quality',
           '找一找我的收藏夹里,有没有一个眼镜', ]

for tstr in testStr:
    print(tstr + ' = ' + changeChineseNumToArab(tstr))

结果为:

两百三十二 = 232
我有两百三十二块钱 = 我有232块钱
十二个套餐 = 12个套餐
一亿零八万零三百二十三 = 100080323
今天天气真不错 = 今天天气真不错
健身架不错,一千二百八十,就是太累,离H腹肌太遥远 = 健身架不错,1280,就是太累,离H腹肌太遥远
百分之八十 discount rate很高了 = 百分之80 discount rate很高了
千万不要 = 千万不要
这个invoice value值一百万 = 这个invoice value值1000000
我的一百件商品have quality = 我的100件商品have quality
找一找我的收藏夹里,有没有一个眼镜 = 找1找我的收藏夹里,有没有1个眼镜

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页