Berbagi teknologi

Ekstrak batch konten area tertentu PDF ke Excel, dan secara otomatis mengganti nama v1.3 berdasarkan baris teks pertama dalam file PDF - dengan ide dan implementasi kode

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Dalam konten yang diperbarui dari artikel ini, gambar dan PDF yang dipindai juga dapat mendukung ekstraksi batch konten area tertentu. Hal ini terutama dicapai dengan mengambil tangkapan layar dari area tertentu dan kemudian menggunakan OCR untuk mengidentifikasi teks di area tersebut, sehingga keakuratannya mungkin tidak akurat. sudah cukup, tetapi jika itu digital, itu bukan masalah besar; jadi yang terbaik adalah mengekstrak file PDF versi elektronik murni untuk efek terbaik.


Persyaratan 1: Jika saya memiliki banyak dokumen elektronik PDF dengan format yang sama, saya perlu mengekstrak angka atau teks di area tertentu.

Persyaratan 2: Saya memiliki sekumpulan dokumen PDF, tetapi nama file semuanya kacau. Saya perlu mengganti nama file ini secara batch berdasarkan teks judul baris pertama halaman pertama file PDF.

Catatan: Tidak cocok untuk skenario: Jika lokasi area yang perlu diekstraksi dari beberapa file PDF berbeda, misalnya nomor yang ingin saya ekstrak ada pada koordinat (30, 30) pada file PDF pertama, dan hasilnya berubah pada file kedua. Jika menjadi koordinat (35, 35), maka perangkat lunak tidak akan dapat mengekstrak teks konten dengan baik, jadi cakupan penerapan kode ini adalah memiliki banyak dokumen PDF. format yang sama, dan posisi PDF tempat informasi teks yang perlu diekstraksi pada dasarnya sama.

Ide 1: Kami secara acak memilih file PDF sebagai sampel, dan kemudian menggunakan kode untuk menandai area yang akan diekstraksi dengan kotak, dan kemudian menyimpan koordinat area tersebut. Saat memproses setiap PDF dalam batch, kami akan menggunakan koordinat Regional yang disimpan untuk mengekstrak teks atau angka yang sesuai dengan lokasi

Diagram skematis ide:

Diagram hasil akhir:

Kekurangan ide ini dan poin-poin yang perlu diperhatikan:

1 Lokasi data yang akan diekstraksi dari setiap file yang diproses secara batch harus sama, misalnya nomor yang akan diekstraksi dari file PDF pertama terletak pada koordinat [100, 100], lalu nomor yang akan diekstraksi. diekstraksi dari setiap file berikutnya harus ditempatkan pada koordinat [100, 100]. Jika posisi ini berubah, data yang diperlukan tidak akan terekstraksi sampai batas tertentu dengan memperluas jangkauan koordinat area.

2. Jika teks yang diekstraksi tidak lengkap, berarti kotak yang dipilih mungkin sedikit lebih kecil. Saya telah menyiapkan fungsi dalam kode saya untuk memperbesar ukuran area tertentu satu per satu.


Persyaratan 2 Ide: Nama kumpulan dokumen PDF semuanya kacau. Saya perlu mengganti nama file ini secara batch berdasarkan judul halaman pertama file PDF File PDF lalu dapatkan baris pertama konten file PDF, lalu ganti nama file tersebut. Kode ini tidak rumit, jadi tidak disertakan di halaman ini.

Kode:

  1. from typing import Optional, Dict, List
  2. from solapi.magic_eden.site_api.utils.consts import MEAPIUrls
  3. from solapi.magic_eden.site_api.utils.data import collection_stats_cleaner, collection_info_cleaner,
  4. collection_list_stats_cleaner
  5. from solapi.magic_eden.site_api.utils.types import MECollectionStats, MECollectionInfo, MECollectionMetrics
  6. from solapi.utils.api import BaseApi
  7. class MagicEdenCollectionApi(BaseApi):
  8. def get_collection_stats_dirty(self, symbol: str) -> Optional[Dict]:
  9. url = f'{MEAPIUrls.COLLECTION_STATS}{symbol}'
  10. res = self._get_request(url)
  11. return res.get('results') if isinstance(res, dict) else None
  12. def get_collection_info_dirty(self, symbol: str) -> Optional[Dict]:
  13. url = f'{MEAPIUrls.COLLECTION_INFO}{symbol}'
  14. res = self._get_request(url)
  15. return res if bool(res) else None
  16. def get_collection_stats(self, symbol: str) -> Optional[MECollectionStats]:
  17. data = self.get_collection_stats_dirty(symbol)
  18. if data:
  19. return collection_stats_cleaner(data)
  20. def get_collection_info(self, symbol: str) -> Optional[MECollectionInfo]:
  21. data = self.get_collection_info_dirty(symbol)
  22. if data:
  23. return collection_info_cleaner(data)
  24. def get_collection_list_stats_dirty(self):
  25. url = MEAPIUrls.COLLECTION_LIST_STATS
  26. res = self._get_request(url)
  27. return res.get('results') if isinstance(res, dict) else None
  28. def get_collection_list_stats(self) -> Optional[List[MECollectionMetrics]]:
  29. data = self.get_collection_list_stats_dirty()
  30. if data:
  31. return list(map(lambda x: collection_list_stats_cleaner(x), data))
  32. def get_collection_list_dirty(self):
  33. url = MEAPIUrls.COLLECTION_LIST
  34. res = self._get_request(url)
  35. return res.get('collections') if isinstance(res, dict) else None
  36. def get_collection_list(self) -> Optional[List[MECollectionInfo]]:
  37. data = self.get_collection_list_dirty()
  38. if data:
  39. return list(map(lambda x: collection_info_cleaner(x), data))

Tautan unduhan kode:

Tautan: https://pan.baidu.com/s/1WQQ8kaDilaagjoK5IrYZzA

Kode ekstraksi: 1111