我正在尝试在python 3.7.3上使用“ pdfminer.six”将pdf文件转换为文本。我想获得诸如
的行date-place of birth: 03.01.1976 antalya
marital status: single
military service: completed
尽可能准确。
我试图更改属于pdfminer.layouts的LAParams()中的变量。示例代码可以在下面看到
def get_text_from_pdf(path):
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
# default_laparams = LAParams(line_overlap=0.5, char_margin=2.0, line_margin=0.5, # word_margin=0.1, boxes_flow=0.5,
# detect_vertical=False, all_texts=False)
laparams = LAParams(line_overlap=.6, char_margin=1.5, line_margin=1.1, word_margin=0.3, boxes_flow=.6,
detect_vertical=False, all_texts=False)
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching,
check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
string = retstr.getvalue()
# string = re.sub(u'\x00', 'i', string)
retstr.close()
return string.lower()
我最终得到一个结果,如下所示。
date-place of birth:
marital status:
military service:
health:
03.01.1976 antalya
single
completed
我最终要得到这样的结果:
date-place of birth: 03.01.1976 antalya
marital status: single
military service: completed
如果有人在解决类似问题或知道解决方案,我将不胜感激。我正在尝试并行更改参数,如果找到解决方案,则会更新问题。
答案 0 :(得分:0)
看起来您的字符间隔很宽。您可以尝试更改代码中的LAParams,LAParams()
的word_margin默认设置为1.0,因为文档中的单词间隔较大,这些单词被认为是较大的单词,这可能是造成问题的原因。
尝试将LAParams()
替换为LAParams(char_margin = 20)
。
回复此主题以了解是否有帮助。