You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python从EasyOCR输出文本提取阿拉伯数字失败及索引异常问题

阿拉伯文页码提取异常问题分析与解决

问题原因

  1. start_idx为2而非0:你的文本文件开头存在不可见的Unicode控制字符(比如UTF-8 BOM \ufeff、零宽空格等),这些字符占据了开头的索引位置,导致目标字符串"صفحه رقم"从索引2开始。
  2. 提取结果为空:你要提取的"ا"是阿拉伯文字母(常被用来表示数字1),但代码中使用filter(str.isdigit)过滤字符——str.isdigit()不会将阿拉伯字母"ا"识别为数字,因此过滤后结果为空。同时,substr.split()[0]得到的就是"ا",但被过滤逻辑清空了。

修正方案

步骤1:清理文本开头的隐藏字符

先移除文件开头的BOM或控制字符,确保目标字符串从正确位置开始。

步骤2:调整提取逻辑

直接提取目标字符串后的第一个元素,无需用数字过滤;如果需要将字母"ا"转换为数字1,可添加字符映射。

修正后的代码

with open(r'file.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 移除开头的BOM及空白控制字符
text = text.strip('\ufeff').strip()

page_num_str = 'صفحه رقم'
start_idx = text.find(page_num_str)
if start_idx != -1:
    # 截取目标字符串后的内容并去除首尾空格
    substr = text[start_idx + len(page_num_str):].strip()
    # 直接获取第一个词
    page_num = substr.split()[0]
    # 可选:将阿拉伯字母ا映射为数字1
    num_mapping = {'ا': '1', '١': '1'}
    page_num = num_mapping.get(page_num, page_num)
    print("Page number extracted: ", page_num)

验证方法

可以先打印文本的原始表示,确认开头的隐藏字符:

with open(r'file.txt', 'r', encoding='utf-8') as f:
    text = f.read()
print(repr(text))

输出会显示类似"\ufeffصفحه رقم ا من ٤"的内容,其中\ufeff就是导致索引偏移的BOM字符。

内容的提问来源于stack exchange,提问作者AAA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:42:24