Condivisione della tecnologia

Estrai in batch il contenuto di aree specifiche del PDF in Excel e rinomina automaticamente v1.3 in base alla prima riga di testo nel file PDF, con idee e implementazione del codice

2024-07-12

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

Nel contenuto aggiornato di questo articolo, le immagini e i PDF scansionati possono anche supportare l'estrazione batch del contenuto dell'area specificata. Ciò si ottiene principalmente acquisendo screenshot dell'area specificata e quindi utilizzando l'OCR per identificare il testo nell'area, quindi la precisione potrebbe non essere corretta. essere sufficiente, ma se è digitale non è un grosso problema quindi è meglio estrarre la versione puramente elettronica del file PDF per ottenere l'effetto migliore;


Requisito 1: Se ho un gran numero di documenti elettronici PDF dello stesso formato, devo estrarre numeri o testo in aree specifiche.

Requisito 2: ho un batch di documenti PDF, ma i nomi dei file sono tutti confusi. Devo rinominare in batch questi file in base al testo del titolo della prima riga della prima pagina del file PDF.

Nota: non adatto per scenari: se le posizioni delle aree che devono essere estratte da più file PDF sono diverse, ad esempio, il numero che voglio estrarre è alle coordinate di (30, 30) nel primo file PDF, e il risultato cambia nel secondo file Se diventa la coordinata di (35, 35), il software non sarà in grado di estrarre molto bene il testo del contenuto, quindi l'ambito di applicazione di questo codice è che più documenti PDF abbiano. lo stesso formato e le posizioni PDF in cui si trovano le informazioni di testo da estrarre sono sostanzialmente le stesse.

Idea 1: selezioniamo casualmente un file PDF come campione, quindi utilizziamo il codice per contrassegnare le aree da estrarre con riquadri, quindi salviamo le coordinate di queste aree Durante l'elaborazione di ciascun PDF in batch, utilizzeremo le coordinate regionali salvate per estrarre testo o numeri corrispondenti alla posizione

Diagramma schematico delle idee:

Il diagramma del risultato finale:

I difetti di questa idea e i punti che richiedono attenzione:

1 La posizione dei dati da estrarre da ciascun file elaborato in batch deve essere la stessa. Ad esempio, il numero da estrarre dal primo file PDF si trova alle coordinate [100, 100], quindi il numero da estrarre. estratto da ogni file successivo deve essere posizionato alle coordinate [100, 100]. Se questa posizione cambia, i dati richiesti non verranno estratti. Questo problema può essere risolto in una certa misura espandendo l'intervallo di coordinate dell'area.

2. Se il testo estratto è incompleto, significa che la casella selezionata potrebbe essere leggermente più piccola. Ho impostato una funzione nel mio codice per aumentare individualmente la dimensione di una determinata area.


Requisito 2 Idea: i nomi di un batch di documenti PDF sono tutti confusi. Devo rinominare questi file in batch in base al titolo della prima pagina del file PDF. In effetti, è molto semplice PDF e quindi ottenere la prima riga del contenuto del file PDF, quindi rinominare il file. Questo codice non è complicato, quindi non è incluso in questa pagina.

Codice:

  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))

Link per scaricare il codice:

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

Codice di estrazione: 1111