Преобразование PDF в DOCX в Python с использованием тегов, но во время процесса надстрочные индексы (FN) ошибочно распозPython

Программы на Python
Ответить
Anonymous
 Преобразование PDF в DOCX в Python с использованием тегов, но во время процесса надстрочные индексы (FN) ошибочно распоз

Сообщение Anonymous »

Я конвертировал pdf в docx с помощью Python вместе с пометкой абзацев (например, [P20], [B44] вот так), акцентом (которые являются , ... вот так нужно пометить), но я не могу захватить верхние индексы (сноски) и пометить их, верхние индексы автоматически преобразуются в нижние индексы во время преобразования, поэтому их невозможно распознать, а также они должны быть помечены как ... .
1>Поскольку описания сносок обычно находятся в конце страницы с соответствующим номером, я попытался захватить это первое число, найти соответствующий номер на той же странице и сравнить их, если они одинаковы, тогда мы можем пометить, но оно пометило каждое число на этой странице. так что это неудачно.
def tag_emphasis(span, text):
font = span.get("font", "").lower()
flags = span.get("flags", 0)
is_bold = "bold" in font
is_italic = "italic" in font or "oblique" in font
is_underlined = bool(flags & 4)

if is_bold and is_underlined:
return f"{text}"
elif is_bold and is_italic:
return f"{text}"
elif is_bold:
return f"{text}"
elif is_italic:
return f"{text}"
elif is_italic:
return f"{text}"
return text

def determine_indent_from_bbox(span):
left = span["bbox"][0]
return int(left // 10) * 10

def count_leading_indent_chars(text):
text = text.replace("\t", " ")
return len(text) - len(text.lstrip(" "))

def is_superscript(span, line_y0):
return span["size"] < 9 and span["bbox"][1] < line_y0 - 2

def tag_entire_pdf(pdf_path):
doc = fitz.open(pdf_path)
tagged_lines = []
is_first_page_header_tagged = False
previous_indent = None
previous_blank = True

for page_index, page in enumerate(doc):
blocks = page.get_text("dict")["blocks"]

for block in blocks:
if block["type"] != 0:
continue

for line in block["lines"]:
raw_line_text = ""
tagged_line_text = ""
line_indent = None
line_y0 = line["bbox"][1]

for span in line["spans"]:
raw = span["text"]
if not raw.strip():
continue

raw_line_text += raw
clean = span["text"].strip()

if is_superscript(span, line_y0) and clean.isdigit():
tagged = f"{clean}"
else:
tagged = tag_emphasis(span, clean)

if line_indent is None:
line_indent = determine_indent_from_bbox(span)

tagged_line_text += tagged + " "

if not tagged_line_text.strip():
tagged_lines.append("")
previous_blank = True
previous_indent = None
continue

if not is_first_page_header_tagged and page_index == 0:
space_count = count_leading_indent_chars(raw_line_text)
tagged_lines.append(f"{tagged_line_text.strip()}")
is_first_page_header_tagged = True
previous_blank = False
previous_indent = line_indent
continue

if previous_blank or (previous_indent is not None and line_indent != previous_indent):
tagged_lines.append(f"{tagged_line_text.strip()}")
else:
tagged_lines.append(tagged_line_text.strip())

previous_blank = False
previous_indent = line_indent

return tagged_lines


Подробнее здесь: https://stackoverflow.com/questions/798 ... misrecogni
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»