unstructured bug/docx无法解析标题编号

dly7yett  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(49)

描述bug

partition_docx中,标题编号没有被解析。

重现方法

test_heading_number.docx

from unstructured.partition.docx import partition_docx
elements = partition_docx(filename="/path/to/test_heading_number.docx")
for e in elements:
    print(e)

实际输出:

Introduction
Motivation
Problem Statement

预期行为

预期输出:

1. Introduction
1.1 Motivation
1.2 Problem Statement

截图

测试单词文档的截图

环境信息

操作系统版本:macOS-14.1-arm64-arm-64bit
Python版本:3.11.6
unstructured版本:0.10.30

pjngdqdw

pjngdqdw1#

@bernhardschaefer 事实证明,这些数字实际上并不存在于.docx文件的文本中,而是由渲染器(在这种情况下是MS Word)在显示时计算得出。
以下是这些标题的实际XML,其中一些噪声(rsids、样板语言指定符等)已被移除。

<w:body>
  <w:p>
    <w:pPr> <w:pStyle w:val="Heading1"/> </w:pPr>
    <w:r> <w:t>Introduction</w:t> </w:r>
  </w:p>
  <w:p>
    <w:pPr> <w:pStyle w:val="Heading2"/> </w:pPr>
    <w:r> <w:t>Motivation</w:t> </w:r>
  </w:p>
  <w:p>
    <w:pPr> <w:pStyle w:val="Heading2"/> </w:pPr>
    <w:r> <w:t>Problem Statement</w:t> </w:r>
  </w:p>
</w:body>

您可以看到,每个段落的编号由段落样式设置( w:p/w:pPr/w:pStyle/@w:val )指示。该样式Map到一个编号定义,并根据该定义以及 start-atrestart 元素/属性的存在或缺失,以适当的级别(点状分段数)按顺序进行编号。
可靠地计算这些数字,使它们与Word产生的结果相匹配是可能的,但非易事,也不是底层 python-docx 库今天能够做到的事情。
因此,我认为这可能是一个可能的增强功能,而不是一个错误。
您能多说一些关于这些数字如何适应您的用例吗?这样我们就可以大致了解这个库的整体能力范围?

sz81bmfz

sz81bmfz2#

感谢@scanny的澄清。我需要标题编号的两个相关原因:

  1. 在RAG中引用来源:我正在处理一个RAG用例,我希望LLM始终引用它编译响应的章节和节,这只有在我有标题编号时才有意义。
  2. chunk_by_heading:我试图按标题对文档进行分块。不幸的是,我在解析的文档中的标题已经被创建为Normal文本与多级列表的组合,因此将其解析为类型ListItem而不是Title。因此,我想使用基于标题编号的正则表达式来识别和转换标题。

相关问题