Я конвертировал 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
Преобразование PDF в DOCX в Python с использованием тегов, но во время процесса надстрочные индексы (FN) ошибочно распоз ⇐ Python
Программы на Python
1763113976
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79819868/convert-pdf-to-docx-in-python-with-tagging-but-superscripts-fn-are-misrecogni[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия