解决pdfplumber解析出来日期出错问题
使用pdfplumber库解析pdf文档时会出现日期的错乱,即年月日在一行,但具体数字在下一行。错误类型如下:
原文:发行日期位2023年4月5日
pdfplumber库解析出来效果如下:
发行日期位 年 月 日
2023 4 5
解决办法如下,把解析出来的文本传入这个函数中,解析请按行解析,并保留换行符。
python
def pdf(text):
lines = text.split("\n")
result_text = []
for i in range(0, len(lines)-1):
characters1 = [char for char in lines[i]]
characters2 = lines[i+1].split()
# 遍历列表中的每个元素
for item in characters2:
# 判断元素是否只包含字母和数字
if not item.isalnum():
break
else:
# 创建一个空列表来存储空格元素的索引
space_indexes = []
if characters1[0] == '年':
characters1.insert(0, ' ')
# 使用enumerate()函数遍历列表,并获取空格元素的索引
for index, item in enumerate(characters1):
if item == ' ':
space_indexes.append(index)
for k, j in zip(space_indexes, characters2):
characters1[k] = j
result = ''.join(characters1)
result_text.append(result)
wenben = ''.join(result_text)
return wenben
def paqu(url):
header={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"}
res = requests.get(url=url, headers=header)
result = res.content
# 使用pdfplumber提取文字
if result == b'':
text = "*"
else:
with pdfplumber.open(io.BytesIO(result), strict_metadata=False) as pdf:
text = ""
for page in pdf.pages:
for line in page.extract_text().split('\n'):
if line.strip(): # 去除空行
text += line + '\n'
return text