m0_74031376 2024-05-29 14:26 采纳率: 13.6%
浏览 1

python正则匹配repdf数据

python正则匹配提取pdf中的数据,数据都在文本表格中,匹配的数据是Cm 1.9<3<3.3,Cmk 8.4<9<9.6,还有Char.Descr. intapple 8999N(有数字和字母),pdf一共4页,每一页的Cm,Cmk和Char.Descr后的数据不同
但是他们中间相隔距离较远,需要提取其后面的数据,数据都在不规则表格中,用group存储

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-29 14:26
    关注

    引自免费微信小程序:皆我百晓生

    要从PDF中提取特定格式的数据,我们可以使用Python的PyPDF2库来读取PDF内容,并结合正则表达式进行匹配。然而,由于PDF文件结构复杂且包含图形、图像等元素,直接解析文本可能并不容易。对于复杂的PDF,可能需要借助第三方工具如tabula-py来识别表格。

    首先,请确保安装了所需的库:

    pip install PyPDF2 tabula-py
    

    接下来是一个基本的示例,展示了如何使用tabula-py来提取表格数据,然后通过正则表达式匹配所需的关键字和数据。这个例子假设所有的数据都在表格中,如果不在表格中,你可能需要探索其他方法来定位这些文本。

    import re
    import tabula
    
    # 定义要匹配的模式
    patterns = [
        r"Cm\s+(\d+\.\d+)<\d+<\d+\.\d+",
        r"Cmk\s+(\d+\.\d+)<\d+<\d+\.\d+",
        r"Char\.Descr\..*?(\w+\s+\d+[\w\d]+N)",
    ]
    
    def extract_data(pdf_path):
        # 使用tabula提取所有表格内容为DataFrame
        tables = tabula.read_pdf(pdf_path, pages="all")
    
        data_dict = {}
        
        for table in tables:
            for i, row in table.iterrows():
                for pattern in patterns:
                    match = re.search(pattern, str(row))
                    if match:
                        key, value = match.groups()
                        if key not in data_dict:
                            data_dict[key] = []
                        data_dict[key].append(value)
    
        return data_dict
    
    pdf_path = "your_pdf_file.pdf"
    data = extract_data(pdf_path)
    print(data)
    

    your_pdf_file.pdf替换为你的PDF文件路径。这段代码会读取PDF中的所有表格,对每一行进行正则匹配,找到匹配的模式后将其添加到字典中。字典的键是匹配模式的一部分,值是一列表,存储每一页找到的所有对应值。

    注意:这种方法依赖于tabula-py库正确识别表格。如果PDF中的表格结构复杂,可能需要调整正则表达式以适应不同的文本格式,或者尝试其他PDF处理库,如pdfplumberpdfminer.six

    如果你的PDF中表格不明显或者数据分布非常不规律,那么你可能需要使用OCR(光学字符识别)技术来转换PDF为可搜索的文本,然后再进行分析。在这种情况下,可以考虑使用pytesseract库与Google的Tesseract OCR引擎结合。但这也增加了复杂性,因为OCR结果可能会有误识率。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月29日