unstructured bug/text-as-html-missing-content

ff29svar  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(163)

描述bug

在使用分块时,Table元素的text_as_html属性与text属性相比缺少了一些内容。

原因:

  • 表格中的文本只能来自表格的单元格。
  • 因此,如果一个Table元素有文本,它一定来自于一个或多个表格单元格。
  • 因此,text_as_html表格应该用这些相同单元格中的文本填充。
    重现方法
import unstructured_client
from unstructured_client.models import operations, shared
from unstructured_client.models.errors import SDKError
from unstructured.staging.base import elements_from_dicts

client = unstructured_client.UnstructuredClient(
    api_key_auth="...",
    server_url=" ...",
)

filename_a = r"doc.pdf"

with open(filename_a, "rb") as f:
    data = f.read()

req = operations.PartitionRequest(
    partition_parameters=shared.PartitionParameters(
        files=shared.Files(
            content=data,
            file_name=filename_a,
        ),
        strategy = "hi_res",
        coordinates=True,
        hi_res_model_name = "yolox",
        chunking_strategy="by_page",
        split_pdf_page=False,
        include_page_breaks=True,
        output_format = "application/json",
        languages=['eng'],
    ),
)

resp = client.general.partition(req)

elements = elements_from_dicts(resp.elements)
tables = [e for e in elements if e.category == "Table"]
for table in tables:
    dataframe = pd.read_html(e.metadata.text_as_html)
    print(dataframe)

预期行为

分块后的元素texttext_as_html包含相同的内容(text_as_html将该内容解析为HTML表格)。

nxowjjhe

nxowjjhe2#

@mpolomdeepsense 你能分享一份你正在测试的PDF文档吗?

6tqwzwtp

6tqwzwtp3#

我遇到了一个相同的问题,这是我创建的测试PDF。表格的第一行在 elements[0].text 中,但不在 elements[0].metadata.text_as_html 中。它使用了这个PDF test_pdf_table.pdf 和以下代码。

>>> from unstructured.partition.pdf import partition_pdf
>>> elements = partition_pdf(
...     filename="test_pdf_table.pdf",
...     url=None,
...     infer_table_structure=True,
...     strategy="hi_res",
... )
>>> elements[0].text
'Header 1 Text 1.1 Text 1.2 Header 2 Text 2.1 Text 2.2 Header 3 Text 3.1 Text 3.2'
>>> elements[0].metadata.text_as_html
'<table><tbody><tr><td>Text 1.1</td><td>Text 2.1</td><td>Text 3.1</td></tr><tr><td>Text 1.2</td><td>Text 2.2</td><td>Text 3.2</td></tr></tbody></table>'

collect_env.py 的输出

OS version:  Linux-5.15.133.1-microsoft-standard-WSL2-x86_64-with-glibc2.35
Python version:  3.11.4
unstructured version:  0.14.10
unstructured-inference version:  0.7.36
pytesseract version:  0.3.10
Torch version:  2.2.0
Detectron2 is not installed
PaddleOCR is not installed
Libmagic version: file-5.41
magic file from /etc/magic:/usr/share/misc/magic
LibreOffice version:  LibreOffice 7.3.7.2 30(Build:2)

据我所知,经过深入研究代码后,问题似乎来自于 unstructured.partition.pdf_image.ocr.supplement_element_with_table_extraction 中图像的裁剪,导致表格顶部边框被切掉。这意味着 tables_agent 无法将顶部行识别为一行,只能识别第二行及以后的行。将其更改为裁剪一个像素高似乎可以解决问题。

mf98qq94

mf98qq944#

我遇到了一个相同的问题,创建的测试PDF中。表格的第一行在 elements[0].text 内,但不在 elements[0].metadata.text_as_html 内。它使用了这个PDF test_pdf_table.pdf 和以下代码。

>>> from unstructured.partition.pdf import partition_pdf
>>> elements = partition_pdf(
...     filename="test_pdf_table.pdf",
...     url=None,
...     infer_table_structure=True,
...     strategy="hi_res",
... )
>>> elements[0].text
'Header 1 Text 1.1 Text 1.2 Header 2 Text 2.1 Text 2.2 Header 3 Text 3.1 Text 3.2'
>>> elements[0].metadata.text_as_html
'<table><tbody><tr><td>Text 1.1</td><td>Text 2.1</td><td>Text 3.1</td></tr><tr><td>Text 1.2</td><td>Text 2.2</td><td>Text 3.2</td></tr></tbody></table>'

collect_env.py 的输出

OS version:  Linux-5.15.133.1-microsoft-standard-WSL2-x86_64-with-glibc2.35
Python version:  3.11.4
unstructured version:  0.14.10
unstructured-inference version:  0.7.36
pytesseract version:  0.3.10
Torch version:  2.2.0
Detectron2 is not installed
PaddleOCR is not installed
Libmagic version: file-5.41
magic file from /etc/magic:/usr/share/misc/magic
LibreOffice version:  LibreOffice 7.3.7.2 30(Build:2)

据我所知,经过深入研究代码后,问题似乎来自于 unstructured.partition.pdf_image.ocr.supplement_element_with_table_extraction 中图像的裁剪,导致表格顶部边框被切掉。这意味着 tables_agent 无法将顶部行识别为一行,只能识别从第二行开始的行。将其更改为裁剪一个像素高似乎可以解决问题。
你好,@alastairmarchant ,你能告诉我如何解决你之前遇到的问题吗?"Changing it to crop one pixel higher seems to fix the issue" 是什么意思?如何操作?谢谢!

相关问题