PDF交易表金额提取失败,请求Python技术支持
问题描述
无法从财务交易表中提取全部信息,尤其是Concept列、**Debit Amount(借方金额)和Credit Amount(贷方金额)**列——每笔交易仅为借方或贷方,故一列有值时另一列为空。当前代码可正确提取前四列,但后三列提取结果不理想,需提取PDF中23页交易表的所有列。
列提取要求
- Transaction Date(交易日期)和Accounting Date(记账日期):格式统一为
dd/mm/yy - Card列:值为空白时标记为
NA,否则为数字(当前固定为24,需兼容其他数字) - Document列:仅包含数值
- Concept列:字母数字混合,首字母大写,可包含数字及
-、_、+符号,内容可能因过长换行(非新行),需完整保留 - Debit Amount和Credit Amount列:数值类型,使用
.作为小数分隔符,,作为千位分隔符,每笔交易仅其中一列有值
当前实现代码
# Libraries import os import pandas as pd import re from unidecode import unidecode import unicodedata import pdfplumber from IPython.display import display import plotly.express as px # WorkSpace workspace_path = r"C:\Users\Oscar Centeno\Desktop\Oscar\CGR\2024\Ingresosnotributarios\data" os.chdir(workspace_path) print(f"Directorio actual: {os.getcwd()}") print("Archivos en el espacio de trabajo:", os.listdir(workspace_path)) # Data ingestion pdf_filename1 = "Estado cuenta BCR cta 242 Diciembre 2023.pdf" pdf_filename2 = "11. NOVIEMBRE BNCR INGRESOS COLONES.pdf" # Reg # Patrón de expresión regular para fechas, tarjeta y documento date_tarjeta_documento_pattern = r'(\d{2}/\d{2}/\d{2})\s+(\d{2}/\d{2}/\d{2})\s*(24)?\s+(\d+)' with pdfplumber.open(pdf_filename1) as pdf: for page in pdf.pages: text = page.extract_text() # Buscar todas las instancias de fechas consecutivas, tarjeta opcional, y documento numérico matches = re.findall(date_tarjeta_documento_pattern, text) for match in matches: # Verificar si el tercer grupo (tarjeta) está vacío y asignar 'Na' si es así tarjeta = match[2] if match[2] == '24' else "Na" data.append({ "Fecha Movimiento": match[0], "Fecha Contable": match[1], "Tarjeta": tarjeta, "Documento": match[3] # El cuarto grupo captura el número de documento }) # Convert into a DataFrame df = pd.DataFrame(data)
内容的提问来源于stack exchange,提问作者Oscar CENTENO MORA
相关产品推荐
相关产品推荐

