Python3 - Bounding Box - Рассчитать положение линии на странице - PullRequest
0 голосов
/ 27 июня 2019

У меня есть XML-файл, который содержит некоторую информацию о ограничительной рамке из PDF-файла:

<page bbox="0.000,0.000,612.000,792.000" rotate="0">
    <textbox bbox="21.600,733.350,65.644,751.641">
        <textline bbox="21.600,733.350,65.644,751.641">
            <text bbox="21.600,733.350,30.258,751.641">L</text>
            <text bbox="30.258,733.350,37.486,751.641">i</text>
            <text bbox="37.486,733.350,44.714,751.641">n</text>
            <text bbox="44.714,733.350,48.315,751.641">e</text>
            <text bbox="48.315,733.350,55.543,751.641">#</text>
            <text bbox="55.543,733.350,62.043,751.641">1</text>
        </textline>
    </textbox>

    <textbox bbox="21.600,714.720,140.775,729.494">
        <textline bbox="21.600,714.720,140.775,729.494">
            <text bbox="27.438,714.720,29.769,729.494"ncolour="1"size="14.774">L</text>
            <text bbox="21.600,714.720,27.438,729.494"ncolour="1"size="14.774">i</text>
            <text bbox="29.769,714.720,35.019,729.494"ncolour="1"size="14.774">n</text>
            <text bbox="35.019,714.720,40.857,729.494"ncolour="1"size="14.774">e</text>
            <text bbox="40.857,714.720,43.188,729.494"ncolour="1"size="14.774">#</text>
            <text bbox="43.188,714.720,49.026,729.494"ncolour="1"size="14.774">2</text>
        </textline>
    </textbox>

    <textbox bbox="223.560,717.899,457.560,754.481">
        <textline bbox="223.560,717.899,457.560,754.481">
        <text font="EAAAAA+ArialUnicodeMS" bbox="223.560,717.899,242.332,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">L</text>
        <text font="EAAAAA+ArialUnicodeMS" bbox="242.332,717.899,248.104,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">i</text>
        <text font="EAAAAA+ArialUnicodeMS" bbox="248.104,717.899,261.104,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">n</text>
        <text font="EAAAAA+ArialUnicodeMS" bbox="261.104,717.899,275.560,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">e</text>
        <text font="EAAAAA+ArialUnicodeMS" bbox="275.560,717.899,281.332,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">#</text>
        <text font="EAAAAA+ArialUnicodeMS" bbox="281.332,717.899,295.788,754.481" colourspace="DeviceGray" ncolour="0.098" size="36.582">1</text>
        </textline>
    </textbox>
</page>

Выше просто разобрать

Line #1
Line #2
Line #1

Я пытаюсь разобрать файл PDF в текст и сохранить форматирование. Для этого, я думаю, мне нужно использовать информацию bbox, чтобы каким-то образом вычислить позицию на странице (на какой строке # находится тег textline).

У меня есть ширина и высота страницы. В данном случае это 612.000,792.000

Может кто-нибудь направить меня в направлении, как разобрать это. До сих пор я мог только анализировать каждую строку и добавлять каждый символ для написания каждого слова, но тогда каждый <textbox> рассматривается как отдельная строка:

tree = ET.parse(path_to_xml_file)
root = tree.getroot()
lines = {}
textboxes = root.findall('./page/textbox')
for textbox in textboxes:
    for line in words:
        for char in line.text:
            [...]

Как мне проанализировать информацию bbox и вычислить номер строки, на которой находится тег <textline>?

...