Python 数值相关代码模板

1. 将句子中的中文数字、阿拉伯数字等提取出来


def extract_number(text):
    """
        将句子中的中文数字、阿拉伯数字等提取出来
        输入:句子
        输出:list,提取出来的中文数字、阿拉伯数字
    """
    # 定义匹配各种数字的正则表达式
    regex_patterns = [
        # 匹配中文数字、分数(如一分之二)、百分比
        r'((?:\d|一|二|三|四|五|六|七|八|九|零|十|百|千|万|亿|档|挡|度|级|格)+(?:分之|/|\.)?(?:\d|一|二|三|四|五|六|七|八|九|零|十|百|千|万|亿|档|挡|度|级|格|%)*)',
        # 匹配罗马数字和普通小数
        # r'\b(?:\d+\.\d+|\d+)\b'
    ]

    # 预定义不应抽取数字的后续字符串
    exclude_follows = ['条', '点', '个', '下', '排', '些', '百', '千', '万', '亿']

    # 遍历正则表达式进行匹配
    res = []
    for pattern in regex_patterns:
        matches = re.findall(pattern, text)
        if matches:
            for match in matches:
                if match in ('档', '挡', '度', '级', '格'):
                    continue
                # 确保匹配的数字后面不是排除的词语
                if not any(excl in text[text.index(match) + len(match):].lower() and len(match) == 1 for excl in exclude_follows):
                    res.append(match)
    return res

2. 将字符串中的中文数字转换成阿拉伯数字


import re

# 汉字数字与对应值的映射
chinese_to_value = {'一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '零': 0}
unit_dict = {'十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}

def chinese_number_to_int(chinese_num):
    total = 0
    unit = 1
    for char in reversed(chinese_num):
        if char in unit_dict:
            unit = unit_dict[char]
        elif char in chinese_to_value:
            value = chinese_to_value[char]
            current = value
            total += current * unit

    return total


def replace_chinese_numbers(text):
    """
        将句子中的中文数字替换成数字
        输入:句子
        输出:句子
    """
    # 查找所有可能的汉字数字串
    chinese_num_pattern = re.compile(r'[一二三四五六七八九十百千万亿]+')

    def replacement(match):
        chinese_num = match.group(0)
        if chinese_num in unit_dict:
            return chinese_num
        arabic_num = chinese_number_to_int(chinese_num)
        return str(arabic_num)

    result = re.sub(chinese_num_pattern, replacement, text)
    return result


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值