You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式修复PDF提取文本中的重复字母问题?

解决PDF OCR粗体字重复字符问题

这种PDF OCR识别粗体字时出现的重复字符问题太常见了!你之前尝试的正则思路方向是对的,但因为没区分OCR错误导致的全单词字母重复单词本身的正常连续重复字母,所以才会出现assesses被误改的情况。

问题分析

你的原文本中,错误的单词(oouurrrreeffoorrmmeeddtteeaacchhiinngg)有个明显特征:每个字母都连续重复两次,而正常单词(比如assesses)只是部分字母重复,且相邻字符不全是成对相同的。之前的正则要么会误改正常单词,要么只能处理局部的重复字母对,没法覆盖所有情况。

完美解决方案

我们可以用Python的正则配合回调函数,先识别出符合OCR错误特征的单词,再针对性修复:

import re

text = 'and assesses oouurr rreeffoorrmmeedd tteeaacchhiinngg in the classroom'

def fix_ocr_duplicate_words(match):
    word = match.group(0)
    # 先过滤长度为奇数的单词(不可能是全字母重复的OCR错误)
    if len(word) % 2 != 0:
        return word
    # 检查是否每个相邻字符都成对相同
    is_ocr_error = True
    for i in range(0, len(word), 2):
        if i + 1 >= len(word) or word[i] != word[i+1]:
            is_ocr_error = False
            break
    # 如果是OCR错误,提取每个重复对的第一个字符
    if is_ocr_error:
        return ''.join([word[i] for i in range(0, len(word), 2)])
    # 否则返回原单词
    else:
        return word

# 匹配所有小写字母组成的单词
fixed_text = re.sub(r'\b[a-z]+\b', fix_ocr_duplicate_words, text)
print(fixed_text)

运行结果

执行后会输出正确文本:

and assesses our reformed teaching in the classroom

为什么这个方案有效?

  1. 精准识别错误单词:通过检查单词长度是否为偶数,且每两个相邻字符都相同,确保只处理OCR导致的全重复单词,不会误改assesses这类正常单词。
  2. 针对性修复:对确认的错误单词,提取每一对重复字母的第一个字符,直接还原成原单词。

如果你只想用纯正则(不用回调函数),其实很难完美区分正常重复和OCR错误重复,因为正则擅长模式匹配,但不擅长逻辑判断。上面的代码方案是最稳妥的。

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

火山引擎 最新活动