unstructured 当partition_html在找到部分正确的HTML代码时失败,

knpiaxh1  于 6个月前  发布在  其他
关注(0)|答案(5)|浏览(74)

我目前正在使用以下输入参数对docx文件进行分区处理:

{
  "filename": "document.docx",
  "response_type": "application/json",
  "coordinates": false,
  "encoding": "utf-8",
  "hi_res_model_name": null,
  "include_page_breaks": false,
  "ocr_languages": null,
  "pdf_infer_table_structure": true,
  "skip_infer_table_types": ["pdf"],
  "strategy": "auto",
  "xml_keep_tags": false,
  "languages": null,
  "extract_image_block_types": null,
  "unique_element_ids": false,
  "chunking_strategy": "by_title",
  "combine_under_n_chars": null,
  "max_characters": 500,
  "multipage_sections": true,
  "new_after_n_chars": null,
  "overlap": 0,
  "overlap_all": false,
  "starting_page_number": null,
}

这将返回一组文档,我将进一步处理这些文档,使用 partition_html 函数将找到的 html 表格提取到数据框中:

from unstructured.partition.html import partition_html

elements = partition_html(
    text=html_table,
    **self.partitioning_parameters,  # type: ignore
)

在某些情况下,非结构化数据返回的表格HTML无效,例如:

text = '                                </td></tr>\n</tbody>\n</table>'

当这种情况发生时, partition_html 方法会失败,因为该方法返回 NoneType

document_tree = etree.fromstring(html_text.encode("utf-8"), html_parser)

应该为分块抛出错误HTML和此方法失败的情况添加异常处理。

bttbmeg0

bttbmeg01#

Tibiritabara,你使用的unstructured版本是什么?在0.15.0版本中,HTML解析器有一些非常近期的更改,所以首先要检查的是这个。

e5njpo68

e5njpo682#

非常感谢您的跟进。我对最新的更改很熟悉,因为我在本地调试时也查看了代码差异。我目前正在使用v0.15.0版本。问题是,当etree返回NoneType时,没有异常处理。唯一的异常处理尝试重新执行etree HTML解析,但再次失败。

7ivaypg9

7ivaypg93#

@Tibiritabara ,我在这里没有得到事件的顺序。
你是说:

  • 你正在对包含表格的DOCX文档进行分区。
  • 产生的 Table 元素包括有时无效的 .metadata.text_as_html 字段。
  • 你重新分区这些HTML片段,但它失败了?

如果是这样的话,我们应该看看如何为 .text_as_html 生成无效的HTML,尽管可能在无法解析HTML时对 partition_html() 进行改进是可能的。
你能澄清一下吗?你能提供一个(越短越好)重现此行为的示例文档吗?

nhjlsmyf

nhjlsmyf4#

我目前正在使用未结构化的文档对docx文件进行分区,下一个输入参数为:

{
  "filename": "document.docx",
  "response_type": "application/json",
  "coordinates": false,
  "encoding": "utf-8",
  "hi_res_model_name": null,
  "include_page_breaks": false,
  "ocr_languages": null,
  "pdf_infer_table_structure": true,
  "skip_infer_table_types": ["pdf"],
  "strategy": "auto",
  "xml_keep_tags": false,
  "languages": null,
  "extract_image_block_types": null,
  "unique_element_ids": false,
  "chunking_strategy": "by_title",
  "combine_under_n_chars": null,
  "max_characters": 500,
  "multipage_sections": true,
  "new_after_n_chars": null,
  "overlap": 0,
  "overlap_all": false,
  "starting_page_number": null,
}

这将返回一组文档,我将进一步处理这些文档,使用partition_html函数将找到的html表格提取到数据框中:

from unstructured.partition.html import partition_html

elements = partition_html(
    text=html_table,
    **self.partitioning_parameters,  # type: ignore
)

在某些情况下,未结构化的表格返回无效的html,例如:

text = '                                </td></tr>\n</tbody>\n</table>'

当这种情况发生时,partition_html方法会失败,因为这个方法会返回NoneType

document_tree = etree.fromstring(html_text.encode("utf-8"), html_parser)

当分块抛出错误的HTML并且此方法失败时,应该有一个异常处理。
嗨,@Tibiritabara ,我想了解哪个函数和哪个版本具有这些参数?它属于API函数吗?谢谢

weylhg0b

weylhg0b5#

亲爱的团队,
@scanny回答你的问题:

  • 你正在对包含表格的DOCX文档进行分区。

是的,情况就是这样

  • 生成的表格元素包括.metadata.text_as_html字段,有时这些字段可能是无效的。
    确实如此
  • 你重新分区这些HTML片段,但失败了?

是的。
我的意图是从元数据中提取text_as_html字段以创建数据框。我知道text_as_html可能并不总是格式正确,或者可能包含噪声,所以我使用partition_html进行重新分区。关于这个问题,我很遗憾无法分享源文档。我会尝试创建一个没有机密数据的新文档并重现问题,然后与您共享。
@huangpan2507回答您的问题:
我正在使用非结构化API从文档中提取节点。我目前使用的API版本是v0.0.73。这是我正在拉取的Docker镜像:

docker pull quay.io/unstructured-io/unstructured-api:0.0.73

为了重新分区,我正在使用非结构化0.15.0
非常感谢大家的支持。

相关问题