Использование регулярных выражений для извлечения определенной информации через PyPDF2

Любая информация о конкретном регулярном выражении для попадания в следующие слова в документе?

Nama Perseroan :PELABUHAN PATIMBAN INTERNASIONAL
Nama Singkatan :
Nomor SP Data
Perseroan:AHU-AH.01.09-0073201
Tanggal SP Data
Perseroan:07 November 2022
Jenis Perseroan :SWASTA NASIONAL
NPWP Perseroan :413909557014000DATA PERSEROANRESMI DARI DITJEN AHU
Jangka Waktu Perseroan :TIDAK TERBATAS
Status Perseroan :TERTUTUP
Nomor Telepon :0217917553
Jenis Transaksi :PERUBAHAN

Полный текст документа выглядит примерно так, как показано ниже.

PROFIL PERUSAHAAN PT PELABUHAN PATIMBAN INTERNASIONAL 
Nama :JONATHAN LOH
Email :[email protected]
Nomor HP :90018240982109381209821093
Tanggal Permohonan :16 November 2022 pukul 16:48:33 
Tanggal Pembayaran:22 November 2022 pukul 08:44:38
Tujuan Permohonan:lkasjfasdflksdjflkas jflasjflkasjfalsjflaksjDIMOHONKAN OLEH 
Waktu Unduh PDF :16 Desember 2022 pukul 13:36:19
Telah diunduh :1 kali INFORMASI BERKAS PDF
VERIFIKASI BERKAS PDF
7. Pemberitahuan Perubahan Data Perseroan Jenis Perubahan :1. Pemberitahuan Perubahan Data Perseroan
- Direksi dan KomisarisJENIS PERUBAHAN 
Nama Perseroan :PELABUHAN PATIMBAN INTERNASIONAL
Nama Singkatan :
Nomor SP Data
Perseroan:AHU-AH.01.09-0073201 Tanggal SP Data Perseroan:07 November 2022 
Jenis Perseroan :SWASTA NASIONAL
NPWP Perseroan:413909557014000DATA PERSEROANRESMI DARI DITJEN AHU
Jangka Waktu Perseroan :TIDAK TERBATAS
Status Perseroan :TERTUTUP
Nomor Telepon:0217917553
Jenis Transaksi :PERUBAHAN
Nama Notaris :DEDY SYAMRI, S.H.
Kedudukan Notaris :JAKARTA SELATAN 
Nomor Akta :5
Tanggal Akta :07 November 2022DATA NOTARIS 
Alamat :Menara Bank Mega, Lantai 24, Jl.Kapten P Tendean
Kav. 12-14A
RT :002
RW :002
Kode Pos :12790
Kelurahan:MAMPANG PRAPATAN
Kecamatan :MAMPANG PRAPATAN
Kabupaten :JAKARTA SELATAN
Provinsi :DKI JAKARTAKEDUDUKAN PERSEROAN
Data KBLI Tahun :2017
NoKode
KBLIJudul KBLI Uraian KBLI
152221 AKTIVITAS
PELAYANAN
KEPELABUHANAN 
LAUTKelompok ini mencakup kegiatan usaha pelayanan
kepelabuhan laut, yang berhubungan dengan angkutan perairan untuk
penumpang, hewan atau barang, seperti pengoperasian fasilitas terminal
misalnya pelabuhan dan dermaga, operasi penguncian jalur air dan
lain-lain, navigasi, pelayaran dan kegiatan berlabuh, jasa penambatan
dan jasa pemanduanMAKSUD DAN TUJUAN Klasifikasi SahamHarga Per
LembarJumlah Lembar SahamTotal
- Rp. 1000 40.000.000 Rp. 40.000.000.000MODAL DASAR Klasifikasi SahamHarga Per LembarJumlah Lembar SahamTotal
- Rp. 1000 10.000.000 Rp. 10.000.000.000MODAL DITEMPATKANRESMI DARI DITJEN AHU Rp 10.000.000.000 Dalam bentuk uang.MODAL DISETOR Nama
Jabatan AlamatKlasifikasi 
SahamJumlah
Lembar
SahamTotal
ALIF SASETYO,
NIK: 3171060201830005 
NPWP: 246383541071000
TTL: Jakarta, 02 Januari 1983DIREKTUR Jalan
Maluku
Nomor 19- - -
ARIEF HERMAWAN,
NIK: 1271121011700003
NPWP: 070970173112000
TTL: Bogor, 10 November 1970KOMISARIS BNR
Cluster
Cendana
C 5/19- - -
ARLAN SEPTIA ANANDA
RASAM,
NIK: 3174051209620003
NPWP: 080878200013000
TTL: Jakarta, 12 September
1962KOMISARIS Jalan
Bendi
IX/125- - -
CHAIRAL TANJUNG,
NIK: 3171011605660004
NPWP: 070141650093000
TTL: Jakarta, 16 Mei 1966WAKIL
KOMISARIS 
UTAMAJalan
Besuki Nomor 9- - -
FUAD RIZAL,
NIK: 3174010201780008
NPWP: 488337379015000
TTL: Jakarta, 02 Januari 1978DIREKTUR
UTAMATebet
Barat
Dalam- - -
Ir. R AGUS HARYOTO
PURNOMO,
NIK: 3578032408610001 
NPWP: 097468813615000
TTL: SLEMAN, 24 Agustus 1961KOMISARIS
UTAMARUNGKUT
ASRI
TIMUR
14/35- - -
PT CTCORP INFRASTRUKTUR
INDONESIA,
Nomor SK :-- Menara
Bank
Mega,
Lantai 24,
Jalan 
Kapten
Pierre
Tendean
Kavling
12-14A- 3.200.000 Rp.3.200.000.000
PT INTERPORT PATIMBAN
AGUNG,
Nomor SK :-- Graha
Mitra
Lantai 7,
Jalan
Jenderal
Gatot
Subroto
Kavling 21- 2.900.000 Rp.2.900.000.000
PT PATIMBAN MAJU BERSAMA,
Nomor SK :AHU-
0061318.AH.01.01.TAHUN 2021 
Tanggal SK :30 September 2021- Menara
MTH
Lantai 11,
jalan MT
Haryono,
kavling 23- 2.900.000 Rp. 2.900.000.000
PT TERMINAL PETIKEMAS 
SURABAYA,
Nomor SK :-- Jalan
Tanjung
Mutiara
Nomor 1- 1.000.000 Rp. 1.000.000.000PENGURUS DAN PEMEGANG SAHAM 
RESMI DARI DITJEN AHU
Nama Jabatan AlamatKlasifikasi
SahamJumlah
Lembar
SahamTotal 
YUKKI NUGRAHAWAN HANAFI,
NIK: 3174060211670004
NPWP: 093240992016000
TTL: Jakarta, 02 November 1967KOMISARIS Jalan
Cibulan II
nomor 15- - -
RESMI DARI DITJEN AHU

Я намерен использовать PyPDF2 для извлечения и использую библиотеку re из python для извлечения текста соответствия, как предполагалось. Ниже приведен код, который я пытался реализовать.

import PyPDF2
import re
import pprint
import camelot

pdf_file = 'PDF/File.pdf'

with open(pdf_file, 'rb') as pdf_file:

    pdf_reader = PyPDF2.PdfFileReader(pdf_file)
    page_nums = pdf_reader.numPages
    for page_num in range(page_nums):   
        page = pdf_reader.getPage(page_num)
        text = page.extractText()
        string = text
        found = re.search('[A-Z]+[A-Z]+$', string)
    if found:
        print(found.group())
    else:
        print('Not found')

Непонятно, как выглядят ваши реальные данные (пожалуйста, отформатируйте код). Например. если это многострочный ввод, попробуйте что-то вроде ^>? *([^:\n]+)\b *:? *(.*) но если это одна строка становится сложнее, может быть как эта демонстрация.

bobble bubble 10.01.2023 03:46

Привет, спасибо за понимание! Я просто отредактировал и вставил весь текст в документ, чтобы сделать его более понятным. Извините за путаницу.

htrgotoh 10.01.2023 03:52

Но как он форматируется? Вы можете добавить блок кода между двумя ~~~ или указать 4 пробела: meta.stackoverflow.com/questions/251361/…

bobble bubble 10.01.2023 03:54

Извините за медленный ответ, и спасибо за понимание! Я только что обновил, чтобы вы могли увидеть исходное форматирование, которое я получил на своем терминале.

htrgotoh 10.01.2023 04:51

Извините, что спрашиваю в разделе комментариев, но можете ли вы поделиться информацией о том, как регулярное выражение захватывает только имена в одном и том же текстовом файле?

htrgotoh 10.01.2023 07:22

Извиняться не надо :) но боюсь, тут я уже ничем помочь не могу, мне непонятно. Возможно, идея удалить вопрос и задать его снова.

bobble bubble 10.01.2023 09:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
import PyPDF2
import re

class Company: # Filters and extract only company profile within the PDF file

    pdf_file = 'PDF/File.pdf'

    with open(pdf_file, 'rb') as pdf_file:

        pdf_reader = PyPDF2.PdfFileReader(pdf_file)
        page_nums = pdf_reader.numPages
        for page_num in range(page_nums):   
            page = pdf_reader.getPage(page_num)
            text = page.extractText()
            found = re.findall(r'((?:[A-Z][a-z]+\s*)+)\b\s*:\s*(.*?)\s*(?=(?:[A-Z][a-z]+\s*)+:|$)', text)
            if found:
                print(found)
            else:
                print('Not found')

Позволяет нам отфильтровать конкретную информацию, указанную в столбце вопроса.

Другие вопросы по теме

Похожие вопросы

Как разделить память словаря в другом процессе?
Почему производительность обучающих данных резко ухудшается?
Как я могу улучшить свой набор данных для увеличения mAP в структуре обнаружения объектов yolov4
Python — линейный график — есть ли простой способ построить график в среднем, если одна дата имеет несколько точек данных?
Не удалось запустить пакет Python Telegram Bot — ошибка
Bitbake сталкивается с ошибкой после запуска Toaster
Добавление столбцов для ближайшей широты/долготы в справочном списке к существующей широте/долготе
Повторно используйте ту же функцию, пока бросок кубиков не станет выше
Выберите случайные числа из нескольких списков, и он должен содержать хотя бы одно число из каждого списка
Установите регулярное выражение с множественным выбором, чтобы попытки сопоставления всегда выполнялись слева направо, независимо от того, пытается ли другое предыдущее регулярное выражение захватить больше символов?