cari
Rumahpembangunan bahagian belakangTutorial PythonDemonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Penghuraian dokumen melibatkan pemeriksaan data dalam dokumen dan mengekstrak maklumat yang berguna. Ia boleh mengurangkan banyak kerja manual melalui automasi. Strategi penghuraian yang popular ialah menukar dokumen kepada imej dan menggunakan penglihatan komputer untuk pengecaman. Analisis Imej Dokumen merujuk kepada teknologi mendapatkan maklumat daripada data piksel imej dokumen Dalam beberapa kes, tidak ada jawapan yang jelas tentang hasil yang diharapkan (teks, imej, carta, nombor, Jadual, formula. ..).

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

OCR (Optical Character Recognition, optical character recognition) ialah proses mengesan dan mengekstrak teks dalam imej melalui penglihatan komputer. Ia dicipta semasa Perang Dunia I, apabila saintis Israel Emanuel Goldberg mencipta mesin yang boleh membaca aksara dan menukarnya menjadi kod telegraf. Kini bidang tersebut telah mencapai tahap yang sangat canggih, mencampurkan pemprosesan imej, penyetempatan teks, pembahagian aksara dan pengecaman aksara. Pada asasnya teknik pengesanan objek untuk teks.

Dalam artikel ini saya akan menunjukkan cara menggunakan OCR untuk penghuraian dokumen. Saya akan menunjukkan kepada anda beberapa kod Python berguna yang boleh digunakan dengan mudah dalam situasi serupa yang lain (hanya salin, tampal, jalankan), dan sediakan muat turun kod sumber penuh.

Di sini kami akan mengambil penyata kewangan dalam format PDF syarikat tersenarai sebagai contoh (pautan di bawah).

https://s2.q4cdn.com/470004039/files/doc_financials/2021/q4/_10-K-2021-(As-Filed).pdf

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Kesan dan ekstrak teks, grafik dan jadual daripada PDF ini

Tetapan Persekitaran

Bahagian penghuraian dokumen yang menjengkelkan ialah , di sana adalah begitu banyak alat untuk pelbagai jenis data (teks, grafik, jadual) tetapi tiada satu pun daripadanya berfungsi dengan sempurna. Berikut ialah beberapa kaedah dan pakej yang paling popular:

  • Proses dokumen sebagai teks: gunakan PyPDF2 untuk mengekstrak teks, gunakan Camelot atau TabulaPy untuk mengekstrak jadual dan gunakan PyMuPDF untuk mengekstrak grafik.
  • Tukar dokumen kepada imej (OCR): gunakan pdf2image untuk penukaran, PyTesseract dan banyak perpustakaan lain untuk mengekstrak data, atau hanya gunakan LayoutParser.

Mungkin anda akan bertanya: "Mengapa tidak memproses terus fail PDF, tetapi menukar halaman menjadi imej Anda boleh melakukan ini?" Kelemahan utama strategi ini ialah isu pengekodan: dokumen boleh dalam berbilang pengekodan (iaitu UTF-8, ASCII, Unicode), jadi penukaran kepada teks boleh mengakibatkan kehilangan data. Jadi untuk mengelakkan masalah ini, saya akan menggunakan OCR dan menukar halaman kepada imej dengan pdf2image Ambil perhatian bahawa perpustakaan rendering PDF Poppler diperlukan.

# with pip
pip install python-poppler
# with conda
conda install -c conda-forge poppler

Anda boleh membaca fail dengan mudah:

# READ AS IMAGE
import pdf2imagedoc = pdf2image.convert_from_path("doc_apple.pdf")
len(doc) #<-- check num pages
doc[0] #<-- visualize a page

Sama seperti tangkapan skrin kami, jika anda ingin menyimpan imej halaman secara setempat, anda boleh menggunakan kod berikut:

# Save imgs
import osfolder = "doc"
if folder not in os.listdir():
 os.makedirs(folder)p = 1
for page in doc:
 image_name = "page_"+str(p)+".jpg"
 page.save(os.path.join(folder, image_name), "JPEG")
 p = p+1

Akhir sekali, kita perlu menyediakan enjin CV yang akan kita gunakan. LayoutParser nampaknya merupakan pakej tujuan umum pertama untuk OCR berdasarkan pembelajaran mendalam. Ia menggunakan dua model terkenal untuk menyelesaikan tugas:

Pengesanan: Pustaka pengesanan objek paling canggih Facebook (versi kedua Detectron2 akan digunakan di sini).

pip install layoutparser torchvision && pip install "git+https://github.com/facebookresearch/detectron2.git@v0.5#egg=detectron2"

Tesseract: Sistem OCR paling terkenal, dicipta oleh HP pada tahun 1985 dan kini dibangunkan oleh Google.

pip install "layoutparser[ocr]"

Kini anda sudah bersedia untuk memulakan program OCR untuk pengesanan dan pengekstrakan maklumat.

import layoutparser as lp
import cv2
import numpy as np
import io
import pandas as pd
import matplotlib.pyplot as plt

Pengesanan

(Sasaran) Pengesanan ialah proses mencari sekeping maklumat dalam imej dan kemudian mengelilinginya dengan sempadan segi empat tepat. Untuk penghuraian dokumen, maklumatnya ialah tajuk, teks, grafik, jadual...

Mari kita lihat halaman kompleks yang mengandungi beberapa perkara:

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Halaman ini bermula dengan tajuk, mempunyai blok teks, kemudian angka dan jadual, jadi kami memerlukan model terlatih untuk mengenali objek ini. Nasib baik Detectron dapat melakukan ini, kita hanya perlu memilih model dari sini dan menentukan laluannya dalam kod.

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Model yang saya akan gunakan hanya boleh mengesan 4 objek (teks, tajuk, senarai, jadual, graf). Oleh itu, jika anda perlu mengenal pasti perkara lain (seperti persamaan), anda perlu menggunakan model lain.

## load pre-trained model
model = lp.Detectron2LayoutModel(
 "lp://PubLayNet/mask_rcnn_X_101_32x8d_FPN_3x/config",
 extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.8],
 label_map={0:"Text", 1:"Title", 2:"List", 3:"Table", 4:"Figure"})
## turn img into array
i = 21
img = np.asarray(doc[i])
## predict
detected = model.detect(img)
## plot
lp.draw_box(img, detected, box_width=5, box_alpha=0.2,
 show_element_type=True)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

结果包含每个检测到的布局的细节,例如边界框的坐标。根据页面上显示的顺序对输出进行排序是很有用的:

## sort
new_detected = detected.sort(key=lambda x: x.coordinates[1])
## assign ids
detected = lp.Layout([block.set(id=idx) for idx,block in
 enumerate(new_detected)])## check
for block in detected:
 print("---", str(block.id)+":", block.type, "---")
 print(block, end='nn')

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

完成OCR的下一步是正确提取检测到内容中的有用信息。

提取

我们已经对图像完成了分割,然后就需要使用另外一个模型处理分段的图像,并将提取的输出保存到字典中。

由于有不同类型的输出(文本,标题,图形,表格),所以这里准备了一个函数用来显示结果。

'''
{'0-Title': '...',
'1-Text': '...',
'2-Figure': array([[ [0,0,0], ...]]),
'3-Table': pd.DataFrame,
}
'''
def parse_doc(dic):
 for k,v in dic.items():
 if "Title" in k:
 print('x1b[1;31m'+ v +'x1b[0m')
 elif "Figure" in k:
 plt.figure(figsize=(10,5))
 plt.imshow(v)
 plt.show()
 else:
 print(v)
 print(" ")

首先看看文字:

# load model
model = lp.TesseractAgent(languages='eng')
dic_predicted = {}
for block in [block for block in detected if block.type in ["Title","Text"]]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## extraction
 extracted = model.detect(segmented)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] =
 extracted.replace('n',' ').strip()
# check
parse_doc(dic_predicted)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

再看看图形报表

for block in [block for block in detected if block.type == "Figure"]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] = segmented
# check
parse_doc(dic_predicted)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

上面两个看着很不错,那是因为这两种类型相对简单,但是表格就要复杂得多。尤其是我们上看看到的的这个,因为它的行和列都是进行了合并后产生的。

for block in [block for block in detected if block.type == "Table"]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## extraction
 extracted = model.detect(segmented)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] = pd.read_csv(
 io.StringIO(extracted) )
# check
parse_doc(dic_predicted)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

正如我们的预料提取的表格不是很好。好在Python有专门处理表格的包,我们可以直接处理而不将其转换为图像。这里使用TabulaPy 包:

import tabula
tables = tabula.read_pdf("doc_apple.pdf", pages=i+1)
tables[0]

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

结果要好一些,但是名称仍然错了,但是效果要比直接OCR好的多。

总结

本文是一个简单教程,演示了如何使用OCR进行文档解析。使用Layoutpars软件包进行了整个检测和提取过程。并展示了如何处理PDF文档中的文本,数字和表格。

Atas ialah kandungan terperinci Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:51CTO.COM. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bagaimana tatasusunan digunakan dalam pengkomputeran saintifik dengan python?Bagaimana tatasusunan digunakan dalam pengkomputeran saintifik dengan python?Apr 25, 2025 am 12:28 AM

Arraysinpython, terutamanya yang, arecrucialinscientificificputingputingfortheirefficiencyandversatility.1) mereka yang digunakan untuk

Bagaimana anda mengendalikan versi python yang berbeza pada sistem yang sama?Bagaimana anda mengendalikan versi python yang berbeza pada sistem yang sama?Apr 25, 2025 am 12:24 AM

Anda boleh menguruskan versi python yang berbeza dengan menggunakan Pyenv, Venv dan Anaconda. 1) Gunakan pyenv untuk menguruskan pelbagai versi python: Pasang pyenv, tetapkan versi global dan tempatan. 2) Gunakan VENV untuk mewujudkan persekitaran maya untuk mengasingkan kebergantungan projek. 3) Gunakan Anaconda untuk menguruskan versi python dalam projek sains data anda. 4) Simpan sistem python untuk tugas peringkat sistem. Melalui alat dan strategi ini, anda dapat menguruskan versi Python yang berbeza untuk memastikan projek yang lancar.

Apakah beberapa kelebihan menggunakan array numpy melalui array python standard?Apakah beberapa kelebihan menggunakan array numpy melalui array python standard?Apr 25, 2025 am 12:21 AM

Numpyarrayshaveseveraladvantagesoverstanderardpythonarrays: 1) thearemuchfasterduetoc-assedimplementation, 2) thearemorememory-efficient, antyedlargedataSets, and3) theyofferoptimized, vectorizedfuncionsformathhematicalicalicalicialisation

Bagaimanakah sifat tatasusunan homogen mempengaruhi prestasi?Bagaimanakah sifat tatasusunan homogen mempengaruhi prestasi?Apr 25, 2025 am 12:13 AM

Kesan homogenitas tatasusunan pada prestasi adalah dwi: 1) homogenitas membolehkan pengkompil untuk mengoptimumkan akses memori dan meningkatkan prestasi; 2) tetapi mengehadkan kepelbagaian jenis, yang boleh menyebabkan ketidakcekapan. Singkatnya, memilih struktur data yang betul adalah penting.

Apakah beberapa amalan terbaik untuk menulis skrip python yang boleh dilaksanakan?Apakah beberapa amalan terbaik untuk menulis skrip python yang boleh dilaksanakan?Apr 25, 2025 am 12:11 AM

ToCraftExecutablePythonscripts, ikutiTheseBestPractics: 1) addAshebangline (#!/Usr/bin/envpython3) tomakethescriptexecutable.2) setpermissionswithchmod xyour_script.py.3)

Bagaimanakah array numpy berbeza dari tatasusunan yang dibuat menggunakan modul array?Bagaimanakah array numpy berbeza dari tatasusunan yang dibuat menggunakan modul array?Apr 24, 2025 pm 03:53 PM

Numpyarraysarebetterfornumericationsoperationsandmulti-dimensialdata, whiletheArrayModuleissuitiableforbasic, ingatan-efisienArrays.1) numpyexcelsinperformanceandfunctionalityforlargedatasetsandcomplexoperations.2) thearrayModeMoremoremory-efficientModeMoremoremoremory-efficientModeMoremoremoremory-efficenceismemoremoremoremoremoremoremoremory-efficenceismemoremoremoremoremorem

Bagaimanakah penggunaan array Numpy berbanding dengan menggunakan array modul array di Python?Bagaimanakah penggunaan array Numpy berbanding dengan menggunakan array modul array di Python?Apr 24, 2025 pm 03:49 PM

NumpyarraysareBetterforheavynumericalcomputing, whilethearraymoduleismoresuitifFormemory-constrainedprojectswithsimpledatypes.1) numpyarraysofferversativilityandperformanceForlargedATAsetSandcomplexoperations.2)

Bagaimanakah modul CTYPES berkaitan dengan tatasusunan di Python?Bagaimanakah modul CTYPES berkaitan dengan tatasusunan di Python?Apr 24, 2025 pm 03:45 PM

ctypesallowscreatingandmanipulatingc-stylearraysinpython.1) usectypestointerwithclibrariesforperformance.2) createec-stylearraysfornumericalcomputations.3) Passarraystocfuntionsforficientsoperations.however, becautiousofmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmem

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa