Разбиение текста на части со значениями ограничивающей рамкиPython

Программы на Python
Anonymous
Разбиение текста на части со значениями ограничивающей рамки

Сообщение Anonymous »

Я использовал службу Azure OCR для извлечения текста из PDF-файлов. Для каждой страницы PDF-файла выходные данные OCR содержат список текстовых строк, а также значения ограничивающей рамки для этой строки. Мой первоначальный подход к фрагментированию текста на каждой странице заключался в том, чтобы сначала объединить строки в списке текстов с помощью «\n» и использовать RecursiveCharacterTextSplitter() из Langchain. Однако с помощью этого подхода я не могу сохранить значения ограничивающей рамки для каждого фрагмента.
Для каждого фрагмента я хочу иметь возможность сохранять значения ограничительной рамки первой и последней строки. в куске. Это сделано для того, чтобы я мог позже выделить конкретный фрагмент в PDF-файле, используя значения ограничивающего прямоугольника фрагмента.
Сейчас я использую другую стратегию фрагментирования, при которой я перебираю каждую строку в странице и отслеживаю количество символов, и как только оно достигает определенного предела символов, я добавляю текст из этого набора строк в новый фрагмент и начинаю процесс заново со следующим фрагментом. Это мой код, делающий то же самое:

Код: Выделить всё

for line in item['lines']:
character_count += len(line['text'])
cumulative_lines.append(line)
if character_count >= character_limit:
chunk_start_bbox = cumulative_lines[0]['boundingBox']
chunk_end_bbox = cumulative_lines[-1]['boundingBox']
chunk_text = "\n".join(line['text'] for line in cumulative_lines)
chunk_metadata = metadata_dict.copy()
chunk_metadata.update({'chunk_start_bbox': chunk_start_bbox, 'chunk_end_bbox': chunk_end_bbox})
chunk_docs.append(Document(page_content=chunk_text, metadata=metadata_dict))
character_count = 0
cumulative_lines = []
Однако я считаю, что это очень неэффективное решение — проходить через каждую строку на странице. Более того, я бы также не стал рассматривать перекрытие символов в фрагменте, как это делает Langchain.
Может ли кто-нибудь предложить лучший способ добиться этого? Кроме того, есть ли способ повысить производительность моего кода?

Подробнее здесь: https://stackoverflow.com/questions/785 ... box-values

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