Last active
June 25, 2022 15:57
-
-
Save LouisdeBruijn/964ef7c801c1f4253473f68f7f312c6c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def headers_para(doc, size_tag): | |
| """Scrapes headers & paragraphs from PDF and return texts with element tags. | |
| :param doc: PDF document to iterate through | |
| :type doc: <class 'fitz.fitz.Document'> | |
| :param size_tag: textual element tags for each size | |
| :type size_tag: dict | |
| :rtype: list | |
| :return: texts with pre-prended element tags | |
| """ | |
| header_para = [] # list with headers and paragraphs | |
| first = True # boolean operator for first header | |
| previous_s = {} # previous span | |
| for page in doc: | |
| blocks = page.getText("dict")["blocks"] | |
| for b in blocks: # iterate through the text blocks | |
| if b['type'] == 0: # this block contains text | |
| # REMEMBER: multiple fonts and sizes are possible IN one block | |
| block_string = "" # text found in block | |
| for l in b["lines"]: # iterate through the text lines | |
| for s in l["spans"]: # iterate through the text spans | |
| if s['text'].strip(): # removing whitespaces: | |
| if first: | |
| previous_s = s | |
| first = False | |
| block_string = size_tag[s['size']] + s['text'] | |
| else: | |
| if s['size'] == previous_s['size']: | |
| if block_string and all((c == "|") for c in block_string): | |
| # block_string only contains pipes | |
| block_string = size_tag[s['size']] + s['text'] | |
| if block_string == "": | |
| # new block has started, so append size tag | |
| block_string = size_tag[s['size']] + s['text'] | |
| else: # in the same block, so concatenate strings | |
| block_string += " " + s['text'] | |
| else: | |
| header_para.append(block_string) | |
| block_string = size_tag[s['size']] + s['text'] | |
| previous_s = s | |
| # new block started, indicating with a pipe | |
| block_string += "|" | |
| header_para.append(block_string) | |
| return header_para |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment