python提取发票信息

def getPdfText2(path):
    with pdfplumber.open(path) as pdf:
        page = pdf.pages[0]
        text = page.extract_text()
        print(text)
        # 提取发票表格上方内容
        invoice = {}
        ftype: int = 0  # 取购销方纳税识别号方式  1 是 纳税人识别号: 91320213586657279T ,2是只有18位数字
        item = re.search(r'发票号码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'发票号码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"发票号码(FPHM)": item})
 
        item = re.search(r'开票日期(:|: |:)(.*)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'开票日期(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"开票日期(KPRQ)": item})
 
        item = re.search(r'机器编号(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'机器编号(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"机器编号(JQBH)": item})
 
        item = re.search(r'发票代码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'发票代码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"发票代码(FPDM)": item})
 
        item = re.search(r'校验码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'校验码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"校验码(JYM)": item})
 
        item = re.search(r'合(\s+)计(.*)', text)
        if item is not None:
            item = item.group()
            item = item.replace(' ', '').replace('合计', '')
            item = re.search(r'¥(\d+).(\d+)', item).group()
            item = item.replace('¥', '')
            invoice.update({"合计(HJ)": item})
 
        # 购销方 纳税人识别号  方式1 (纳税人识别号: 913202006829704176)
        items = re.findall(r'纳税人识别号(:|: |:)(\w+)', text)
        if len(items) >= 2:
            invoice.update({"购方": items[0][1]})
            invoice.update({"销方": items[1][1]})
            ftype = 1
 
        if ftype == 0:
            # 购销方 纳税人识别号  方式2 (只有18位数字)
            items = re.findall(r'[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}', text)
            if len(items) == 2:
                invoice.update({"购方": items[0]})
                invoice.update({"销方": items[1]})
            if len(items) >= 2:
                invoice.update({"购方": items[1]})
                invoice.update({"销方": items[2]})
 
        item = re.search(r'(小写)(.*)', text)
        if item is not None:
            item = item.group()
            item = item.replace(' ', '').replace('小写)¥', '').replace('小写)¥', '')
            invoice.update({"价税合计(JSHJ)": item})
 
        items = re.findall(r'\*[\u4e00-\u9fa5]+\*(.*)', text)
        i: int = 1
        for item in items:
            invoice.update({"项目(XM)-" + str(i): item})
            i = i + 1
 
        print(invoice)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python3 可以使用一些库来提取发票信息,其中最常用的是 pytesseract以及 OpenCV。 首先,我们需要安装 pytesseract 和 OpenCV 的库。可以使用以下命令进行安装: ``` pip install pytesseract opencv-python ``` 安装完成后,我们可以使用 pytesseract 的 OCR 功能来识别图片中的文本,并通过 OpenCV 进行图片处理。 ```python import cv2 import pytesseract # 读取图片 image = cv2.imread('invoice.jpg') # 转为灰度图像 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用二值化处理,提高文字识别的准确度 _, threshold_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) # 通过 pytesseract 识别文本 text = pytesseract.image_to_string(threshold_image, lang='eng') # 输出识别结果 print(text) ``` 以上代码将读取名为 "invoice.jpg" 的图片,将其转换为灰度图像,并使用二值化处理。然后,使用 pytesseract 的 `image_to_string` 方法识别图像中的文本,并将结果输出。 需要注意的是,提取发票信息可能涉及到图片预处理、文本分析等复杂的操作。以上代码仅提供了一个基本的示例,具体的提取过程可能需要根据实际情况进行调整和优化。 ### 回答2: 要提取发票信息,可以使用Python3中的相关库和技术来完成。以下是一个简单的步骤: 1. 导入必要的库:首先需要导入Python中的一些库,例如OpenCV、Tesseract等。这些库可以用来处理图像和文字识别。 2. 加载发票图像:使用OpenCV库加载发票的图像文件,确保图像清晰且文字清晰可辨。 3. 文字识别:使用Tesseract库进行文字识别,可以将发票图像中的文本提取出来。可以使用以下命令将图像转化为可识别的文本: ``` import pytesseract text = pytesseract.image_to_string(image, lang='chi_sim') ``` 这里的`image`是发票图像的OpenCV对象,`lang='chi_sim'`表示使用中文字符集。 4. 提取所需信息:根据所需的发票信息,利用字符串处理技术、正则表达式等方法提取出关键字或特定格式的文本。例如,要提取发票号码,可以使用正则表达式`r'发票号码:(\w+)'`来匹配发票号码的文本。根据实际发票的布局和格式,可以编写相应的提取规则。 5. 输出提取结果:最后,将提取到的发票信息进行输出,可以选择以文本、JSON、CSV等格式进行输出,以便进一步处理或存储。 总之,通过使用适当的库和技术,结合图像处理和文字识别,可以完成Python3中的发票信息提取任务。具体的实现细节可以根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的光头强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值