Обмен технологиями

Пакетное извлечение содержимого указанных областей PDF в Excel и автоматическое переименование версии 1.3 на основе первой строки текста в файле PDF — с идеями и реализацией кода.

2024-07-12

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

В обновленном содержании этой статьи изображения и отсканированные PDF-файлы также могут поддерживать пакетное извлечение содержимого указанной области. В основном это достигается путем создания снимков экрана указанной области и последующего использования оптического распознавания текста для идентификации текста в этой области, поэтому точность может быть неточной. этого будет достаточно, но если он цифровой, это не большая проблема, поэтому для достижения наилучшего эффекта лучше всего извлечь чисто электронную версию PDF-файла;


Требование 1. Если у меня есть большое количество электронных документов PDF одного формата, мне нужно извлечь числа или текст в определенных областях.

Требование 2. У меня есть пакет PDF-документов, но все имена файлов искажены. Мне нужно пакетно переименовать эти файлы на основе текста заголовка в первой строке первой страницы PDF-файла.

Примечание. Не подходит для сценариев: если расположение областей, которые необходимо извлечь из нескольких файлов PDF, различаются, например, число, которое я хочу извлечь, находится в координатах (30, 30) в первом файле PDF, и результат изменится во втором файле. Если это станет координатой (35, 35), то программное обеспечение не сможет очень хорошо извлечь текст содержимого, поэтому область применения этого кода заключается в том, что несколько PDF-документов имеют тот же формат, и позиции PDF, в которых находится текстовая информация, которую необходимо извлечь, в основном применимы.

Идея 1: Мы случайным образом выбираем PDF-файл в качестве образца, а затем с помощью кода отмечаем области, которые нужно извлечь, прямоугольниками, а затем сохраняем координаты этих областей. При пакетной обработке каждого PDF-файла мы будем использовать сохраненные региональные координаты. для извлечения текста или чисел, соответствующих местоположению

Принципиальная схема идей:

Итоговая диаграмма результатов:

Недостатки этой идеи и моменты, на которые необходимо обратить внимание:

1 Местоположение данных, которые нужно извлечь из каждого файла пакетной обработки, должно быть одинаковым. Например, число, которое нужно извлечь из первого PDF-файла, расположено по координатам [100, 100], затем это число. извлекаемые из каждого последующего файла должны располагаться по координатам [100, 100]. Если эта позиция изменится, необходимые данные не будут извлечены. Эту проблему можно в определенной степени решить, расширив диапазон координат области.

2. Если извлеченный текст неполный, это означает, что выбранное поле может быть немного меньше. Я настроил в своем коде функцию для индивидуального увеличения размера определенной области.


Требование 2. Идея: все имена пакетов PDF-документов искажены. Мне нужно переименовать эти файлы в пакетах на основе названия первой страницы PDF-файла. На самом деле это очень просто. PDF-файл, затем получите первую строку содержимого PDF-файла, а затем переименуйте файл. Этот код не сложен, поэтому он не включен на эту страницу.

Код:

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

Ссылка для скачивания кода:

Ссылка: https://pan.baidu.com/s/1WQQ8kaDilaagjoK5IrYZzA

Код извлечения: 1111