【问题标题】:How to extract text (PyPDF2) from specific location/span on PDF如何从 PDF 上的特定位置/范围提取文本 (PyPDF2)
【发布时间】:2021-11-02 20:26:32
【问题描述】:

我已经将 PDF 页面中的文本提取到 Text 变量中。 我正在寻找字符串“你的号码是”之后的数字(14 长度的字符串在跨度(982,996)上匹配:

object=PyPDF2.PdfFileReader(filename)
Text = PageObj.extractText()
PageObj = object.getPage(0) 
ResSearch = re.search(String, Text)

我得到了一个结果:span = (982, 996) match = 'your number is'。现在我只需要抓取之后出现的三位数文本('您的号码是 105'),因为文件每天都在变化,并且获取应该是动态的。
谢谢大家!!

【问题讨论】:

    标签: python pdf text scrape pypdf2


    【解决方案1】:

    问题在于正则表达式而不是 pdf 本身。假设每页最多匹配一个,您可以使用search,否则使用findall。看看doc 的如何使用组,(...) 部分。

    import PyPDF2, re
    
    filename = '' # 
    
    pdf_r = PyPDF2.PdfFileReader(open(filename, 'rb'))
    text = pdf_r.getPage(0).extractText() # from 1st page or make a loop
    
    if p := re.search(r'your number is (\d{3})', text):
       my_number = int(p.groups()[0]) # as int
    

    使用 PyPDF4,语法相同,没有“有”extractText 问题:

    • 来自doc这适用于某些 PDF 文件,但对其他文件效果不佳,具体取决于所使用的生成器。 [...]不要依赖从这个函数出来的文本顺序,因为如果这个函数变得更复杂,它会改变。

    【讨论】:

    • 非常感谢您的帮助!我已经运行了建议的代码,问题是它获取了一个带有 NoneType 对象值的 P 参数,因此 my_number 参数不会取回任何值。
    • Ahhhhh 我在if 中犯了一个愚蠢的错误!我更正了:将match 替换为compile,对此感到抱歉[已编辑]
    • 再次您好,感谢您的帮助和耐心。我仍在努力解决这个问题,在将搜索更改为编译后,我收到“&: 'str' 和 'int' 不支持的操作数类型”失败消息。所以 P 仍然是一个 NonType 对象,因此我相信 my_number 不能拉动和施加分组和搜索。我还尝试在 P 和 my_number 上使用 input()
    • 海象算子:=是python3.8中引入的。你运行的是哪个版本?
    • 我编辑了它,让我知道它现在可以工作了。我在复制粘贴我的解决方案和写帖子的过程中搞砸了
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多