本次文章更新内容,图片以及扫描的PDF也可以支持批量提取指定地区内容了,重要是通过截图指定地区,然后使用OCR来辨认该地区的笔墨来实现的,以是精度大概会有点不敷,但是假如是数字的话,题目不大; 以是最好还是纯电子版本的PDF文件提取结果最好。
需求1:假如我有一批数目比力多的同样格式的PDF电子文档,须要把特定多个地区的数字大概笔墨提取出来
需求2:我有一批PDF文档,但是文件的名称都是一些乱码,我须要根据PDF文件内里第一页内容的第一行的标题笔墨来批量重定名这些文件
分析:不顺应场景:假如多个PDF文件的须要提取内容的地区的位置不一样,好比我要提取的数字在第一个PDF文件在(30,30)的坐标,结果在第二个文件酿成了(35,35)这个坐标,那么软件就会无法很好的提取这个内容文本,以是这个代码的实用范围是多个PDF文档格式划一,而且须要提取的文本信息所在的PDF位置都根本一样的环境下实用。
思绪1:我们恣意选一个PDF文件作为样本,然后用代码把要提取的地区用方框标注出来,再然后把这些地区的坐标生存下来,后续批量处理处罚每个PDF的时间,就根据生存的这些地区坐标来提取对应位置的笔墨大概数字
思绪表现图:
末了的结果表现图:
这种思绪的缺陷和须要注意的点:
1 须要每个批量处理处罚的文件要提取的数据的位置都是一样的,好比第一个PDF文件须要提取的数字位于【100,100】这个坐标,那么后续每个文件须要提取的数字都要位于这个位置,如有变动,就会导致提取不到须要的数据,可以通过扩大地区的坐标范围来肯定水平上的办理这个题目
2 假如提取的笔墨不齐备,分析大概框选的方框略微小了一点,我代码内里设置了一个单独增大某个地区的功能
需求2思绪:一批PDF文档的名称都是一些乱码,我须要根据PDF文件内里第一页内容的标题来批量重定名这些文件,现实上很简单,就是分析PDF文件,然后获取第一行的内容,然后重定名该文件即可,这个代码不复杂,就没放在本页了。
代码:- from typing import Optional, Dict, List
- from solapi.magic_eden.site_api.utils.consts import MEAPIUrls
- from solapi.magic_eden.site_api.utils.data import collection_stats_cleaner, collection_info_cleaner, \
- collection_list_stats_cleaner
- from solapi.magic_eden.site_api.utils.types import MECollectionStats, MECollectionInfo, MECollectionMetrics
- from solapi.utils.api import BaseApi
- class MagicEdenCollectionApi(BaseApi):
- def get_collection_stats_dirty(self, symbol: str) -> Optional[Dict]:
- url = f'{MEAPIUrls.COLLECTION_STATS}{symbol}'
- res = self._get_request(url)
- return res.get('results') if isinstance(res, dict) else None
- def get_collection_info_dirty(self, symbol: str) -> Optional[Dict]:
- url = f'{MEAPIUrls.COLLECTION_INFO}{symbol}'
- res = self._get_request(url)
- return res if bool(res) else None
- def get_collection_stats(self, symbol: str) -> Optional[MECollectionStats]:
- data = self.get_collection_stats_dirty(symbol)
- if data:
- return collection_stats_cleaner(data)
- def get_collection_info(self, symbol: str) -> Optional[MECollectionInfo]:
- data = self.get_collection_info_dirty(symbol)
- if data:
- return collection_info_cleaner(data)
- def get_collection_list_stats_dirty(self):
- url = MEAPIUrls.COLLECTION_LIST_STATS
- res = self._get_request(url)
- return res.get('results') if isinstance(res, dict) else None
- def get_collection_list_stats(self) -> Optional[List[MECollectionMetrics]]:
- data = self.get_collection_list_stats_dirty()
- if data:
- return list(map(lambda x: collection_list_stats_cleaner(x), data))
- def get_collection_list_dirty(self):
- url = MEAPIUrls.COLLECTION_LIST
- res = self._get_request(url)
- return res.get('collections') if isinstance(res, dict) else None
- def get_collection_list(self) -> Optional[List[MECollectionInfo]]:
- data = self.get_collection_list_dirty()
- if data:
- return list(map(lambda x: collection_info_cleaner(x), data))
复制代码
|