Partage de technologie

Extrayez par lots le contenu des zones spécifiées du PDF vers Excel et renommez automatiquement la version 1.3 en fonction de la première ligne de texte du fichier PDF - avec des idées et une implémentation de code

2024-07-12

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

Dans le contenu mis à jour de cet article, les images et les PDF numérisés peuvent également prendre en charge l'extraction par lots du contenu d'une zone spécifiée. Ceci est principalement réalisé en prenant des captures d'écran de la zone spécifiée, puis en utilisant l'OCR pour identifier le texte dans la zone, de sorte que la précision peut ne pas être assurée. cela suffit, mais s'il est numérique, ce n'est pas un gros problème ; il est donc préférable d'extraire la version purement électronique du fichier PDF pour le meilleur effet.


Condition 1 : Si je dispose d'un grand nombre de documents électroniques PDF du même format, je dois extraire des chiffres ou du texte dans des zones spécifiques.

Condition 2 : J'ai un lot de documents PDF, mais les noms des fichiers sont tous tronqués. Je dois renommer ces fichiers par lots en fonction du texte du titre de la première ligne de la première page du fichier PDF.

Remarque : Ne convient pas aux scénarios : Si les emplacements des zones qui doivent être extraites de plusieurs fichiers PDF sont différents, par exemple, le numéro que je souhaite extraire est aux coordonnées de (30, 30) dans le premier fichier PDF, et le résultat change dans le deuxième fichier. S'il devient la coordonnée de (35, 35), alors le logiciel ne pourra pas très bien extraire le texte du contenu, donc le champ d'application de ce code est que plusieurs documents PDF ont le même format et les positions PDF où se trouvent les informations textuelles qui doivent être extraites sont fondamentalement les mêmes.

Idée 1 : Nous sélectionnons au hasard un fichier PDF comme échantillon, puis utilisons du code pour marquer les zones à extraire avec des cases, puis enregistrons les coordonnées de ces zones. Lors du traitement de chaque PDF par lots, nous utiliserons les coordonnées régionales enregistrées. pour extraire du texte ou des chiffres correspondant à l'emplacement

Diagramme schématique des idées :

Le diagramme du résultat final :

Les défauts de cette idée et les points qui nécessitent une attention particulière :

1 L'emplacement des données à extraire de chaque fichier traité par lots doit être le même. Par exemple, le numéro à extraire du premier fichier PDF est situé aux coordonnées [100, 100], puis le numéro à extraire. extraites de chaque fichier suivant doivent être situées aux coordonnées [100, 100]. Si cette position change, les données requises ne seront pas extraites. Ce problème peut être résolu dans une certaine mesure en élargissant la plage de coordonnées de la zone.

2. Si le texte extrait est incomplet, cela signifie que la case sélectionnée peut être légèrement plus petite. J'ai mis en place une fonction dans mon code pour augmenter la taille d'une certaine zone individuellement.


Exigence 2 Idée : Les noms d'un lot de documents PDF sont tous tronqués. Je dois renommer ces fichiers par lots en fonction du titre de la première page du fichier PDF. En fait, c'est très simple. Fichier PDF puis obtenez la première ligne du contenu du fichier PDF, puis renommez le fichier. Ce code n'est pas compliqué, il n'est donc pas inclus sur cette page.

Code:

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

Lien de téléchargement des codes :

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

Code d'extraction : 1111