有没有办法解决pdfminer中的行对齐问题?

时间:2019-05-21 10:25:52

标签: python pdfminer

我正在尝试在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

如果有人在解决类似问题或知道解决方案,我将不胜感激。我正在尝试并行更改参数,如果找到解决方案,则会更新问题。

1 个答案:

答案 0 :(得分:0)

看起来您的字符间隔很宽。您可以尝试更改代码中的LAParams,LAParams()的word_margin默认设置为1.0,因为文档中的单词间隔较大,这些单词被认为是较大的单词,这可能是造成问题的原因。

尝试将LAParams()替换为LAParams(char_margin = 20)

回复此主题以了解是否有帮助。