Я пытаюсь прочитать PDF-файл, который является образцом счета-фактуры, и я пытаюсь получить некоторые подробности образца из PDF-файла, такие как название компании, номер счета-фактуры, номер GST, количество материалов и т. Д. c. Для этого я в первую очередь использую PyPDF2 для получения данных в текстовом формате, а затем я использовал инструментарий NLTK для маркировки текста и удаления специальных символов. Проблема в том, что я не могу напечатать «Счет-фактуру» и следующую строку, содержащую номер счета-фактуры. Вот код ниже. Любая помощь будет принята с благодарностью.
import json
import PyPDF2
pdf_file = open(path, 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
page_content
Ниже приведен вывод, который я получаю после извлечения текста из pdf-файла
"Bank Details :\nBank Name\n: Hdfc bank\nAccount No\n: 50200004915008\nAccount Name\n: GNG Electronics Pvt Ltd\nIFSC\n: \nSr. \nNo.\nItem No.\nHSN Code\nArticle Code \nDescription\nColor\nTax %\nQuantity\nUnit Rate\nAmount\n1\nQCNBAG0035\n9\n84715000\nRefurbished DELL LATITUDE \nE7470 (CORE I7 6TH \nGEN/8GB/512GB \nSSD/WEBCAM/14'' TOUCH/WIN-\n10 HOME)\n18\n1\n28,813.56\n28,813.56\nOrder # \nQty Sum\n1\nTotal\n28,813.56\nDiscount Amount\n0\nCGST\n9%\n2593.22\nSGST\n9%\n2593.22\nNet Total\n34,000.00\nAmount in Words: ********* THIRTY FOUR THOUSAND RUPEES AND ZERO PAISA ONLY \nBill To :\nShip To \nInvoice No.\n: PSIGHT1920000164\nEB Ghatkopar Store\nGMONEY PRIVATE LIMITED\nInvoice Date\n: 21/02/2020\nShop no.7, Raj Hans Helix 3, Shreyas \nCinema,\n1019, C WING, 215 ATRIUM\nPortal Order Id\n: \nLBS Road, Ghatkopar West\nNEXT TO COURTYARD MARRIOT, A.K.ROAD\nCust SA Code\n: \nMumbai\nANDHERI EAST, MUMBAI-400093\nCust Order No.\n: GMONEY PRIVATE \nLIMITED\nPlace of Supply: Maharashtra 400086\nMumbai - 400093\nShipment Mode\n: \nState Code : 27\nState Code : \nStock Room\n: GHT-STR\nG.S.T. No. : 27AADCG6133E1ZV\nG.S.T. No. : 27AAICG0467G1Z\nPayment Term\n: \nAWB\nPayment Due\n: 2/21/2020\nPartner Name\nShip to Contact\n: Yash\nTerms & Conditions :\n\nPayment by way of cheque/draft shall be in the name of company only. NEFT/RTGS favouring above bank details.Interest @24%per annum shall be \nlevied for delayed payment.\n\nBank charges of Rs.500/- plus GST per cheque shall be charged in case of dishonour of the cheque.\n\nThe courts at Mumbai only shall have the jurisdiction to entertain any dispute between the parties.\n\nWhether Tax is payable on Reverse Charge basis : No\nPage 1 of 1\nRegd Off. : Unit No. 415, Hubtown Solaris,N. S. Phadke Marg, Andheri East, Mumbai-400069\nTel No.: 022-61445600 TO 615 Fax No.: \nGNG Electronics Pvt Ltd\nAuthorised Signatory\nTAX INVOICE\nGNG Electronics Pvt Ltd\nRAJHANS, HELIX-3, L.B.S ROAD\nGHATKOPAR WEST, MUMBAI\nMumbai Maharashtra - 400086\nG.S.T. No. : 27AADCG6133E1ZV\nState Code : 27\n"
После использования NLTK текст очищается, ниже выводится :
import nltk
tokens = nltk.word_tokenize(page_content)
import string
table = str.maketrans('', '', string.punctuation)
stripped = [w.translate(table) for w in tokens]
print(stripped)
['Bank', 'Details', '', 'Bank', 'Name', '', 'Hdfc', 'bank', 'Account', 'No', '', '50200004915008', 'Account', 'Name', '', 'GNG', 'Electronics', 'Pvt', 'Ltd', 'IFSC', '', 'Sr', 'No', '', 'Item', 'No', '', 'HSN', 'Code', 'Article', 'Code', 'Description', 'Color', 'Tax', '', 'Quantity', 'Unit', 'Rate', 'Amount', '1', 'QCNBAG0035', '9', '84715000', 'Refurbished', 'DELL', 'LATITUDE', 'E7470', '', 'CORE', 'I7', '6TH', 'GEN8GB512GB', 'SSDWEBCAM14', '', 'TOUCHWIN', '10', 'HOME', '', '18', '1', '2881356', '2881356', 'Order', '', 'Qty', 'Sum', '1', 'Total', '2881356', 'Discount', 'Amount', '0', 'CGST', '9', '', '259322', 'SGST', '9', '', '259322', 'Net', 'Total', '3400000', 'Amount', 'in', 'Words', '', '', 'THIRTY', 'FOUR', 'THOUSAND', 'RUPEES', 'AND', 'ZERO', 'PAISA', 'ONLY', 'Bill', 'To', '', 'Ship', 'To', 'Invoice', 'No', '', '', 'PSIGHT1920000164', 'EB', 'Ghatkopar', 'Store', 'GMONEY', 'PRIVATE', 'LIMITED', 'Invoice', 'Date', '', '21022020', 'Shop', 'no7', '', 'Raj', 'Hans', 'Helix', '3', '', 'Shreyas', 'Cinema', '', '1019', '', 'C', 'WING', '', '215', 'ATRIUM', 'Portal', 'Order', 'Id', '', 'LBS', 'Road', '', 'Ghatkopar', 'West', 'NEXT', 'TO', 'COURTYARD', 'MARRIOT', '', 'AKROAD', 'Cust', 'SA', 'Code', '', 'Mumbai', 'ANDHERI', 'EAST', '', 'MUMBAI400093', 'Cust', 'Order', 'No', '', '', 'GMONEY', 'PRIVATE', 'LIMITED', 'Place', 'of', 'Supply', '', 'Maharashtra', '400086', 'Mumbai', '', '400093', 'Shipment', 'Mode', '', 'State', 'Code', '', '27', 'State', 'Code', '', 'Stock', 'Room', '', 'GHTSTR', 'GST', '', 'No', '', '', '27AADCG6133E1ZV', 'GST', '', 'No', '', '', '27AAICG0467G1Z', 'Payment', 'Term', '', 'AWB', 'Payment', 'Due', '', '2212020', 'Partner', 'Name', 'Ship', 'to', 'Contact', '', 'Yash', 'Terms', '', 'Conditions', '', 'Payment', 'by', 'way', 'of', 'chequedraft', 'shall', 'be', 'in', 'the', 'name', 'of', 'company', 'only', '', 'NEFTRTGS', 'favouring', 'above', 'bank', 'detailsInterest', '', '24', '', 'per', 'annum', 'shall', 'be', 'levied', 'for', 'delayed', 'payment', '', 'Bank', 'charges', 'of', 'Rs500', 'plus', 'GST', 'per', 'cheque', 'shall', 'be', 'charged', 'in', 'case', 'of', 'dishonour', 'of', 'the', 'cheque', '', 'The', 'courts', 'at', 'Mumbai', 'only', 'shall', 'have', 'the', 'jurisdiction', 'to', 'entertain', 'any', 'dispute', 'between', 'the', 'parties', '', 'Whether', 'Tax', 'is', 'payable', 'on', 'Reverse', 'Charge', 'basis', '', 'No', 'Page', '1', 'of', '1', 'Regd', 'Off', '', '', 'Unit', 'No', '', '415', '', 'Hubtown', 'Solaris', '', 'N', '', 'S', 'Phadke', 'Marg', '', 'Andheri', 'East', '', 'Mumbai400069', 'Tel', 'No', '', '', '02261445600', 'TO', '615', 'Fax', 'No', '', '', 'GNG', 'Electronics', 'Pvt', 'Ltd', 'Authorised', 'Signatory', 'TAX', 'INVOICE', 'GNG', 'Electronics', 'Pvt', 'Ltd', 'RAJHANS', '', 'HELIX3', '', 'LBS', 'ROAD', 'GHATKOPAR', 'WEST', '', 'MUMBAI', 'Mumbai', 'Maharashtra', '', '400086', 'GST', '', 'No', '', '', '27AADCG6133E1ZV', 'State', 'Code', '', '27']
Я использую приведенный ниже код для поиска строки, начинающейся с I, как в Invoice, и G, как в GST.
patterns = ['Invoice No', 'GST No']
z = re.findall("[IG]\w+", element)
print(z)
Любая помощь будет высоко оценена