描述bug
DOCX无法识别Word文档中文本框元素内的列表项
重现方法
提供一个包含两种列表项的示例Word文件。
如上图所示,只有"普通"列表项被识别,而文本框内的列表项从元素列表中丢失。
list_in_texbox_list-item-missing.docx
截图
描述bug
DOCX无法识别Word文档中文本框元素内的列表项
重现方法
提供一个包含两种列表项的示例Word文件。
如上图所示,只有"普通"列表项被识别,而文本框内的列表项从元素列表中丢失。
list_in_texbox_list-item-missing.docx
截图
7条答案
按热度按时间qhhrdooz1#
这是文件内容:
vs3odd8k2#
@scanny -对此有什么看法?
qco9c6ql3#
我们目前从内联文本框形状中提取运行文本,以及与文本框锚定的段落中的其余文本。这种行为是在这篇PR中添加的:#2510
我们可以以不同的方式进行操作,使得内联和浮动文本框分别分区,这样它们就会将其中的列表项识别为单独的元素。
背景
<span>
)。段落文本只能出现在运行中。段落文本是其每个运行文本的连接。先前PR中采用的方法是将内联文本框中的任何文本与出现它的段落的文本一起包含。
text="AaaBbbccc"
,因为这是文本框中所有运行的连接,而它出现的段落是空的。ListItem
元素,这些元素紧跟在包含段落中其他文本的元素之后(在这个特定的情况下为空)。vfhzx4xs4#
@scanny - 如果我有多个文档在这个结构中(里面有很多文本的浮动形状),有什么建议或解决方法吗?
7xllpg7q5#
@veredmm 不是凭空想出来的,不是。通用解决方案对当前的分区器结构(所以不容易进行猴子补丁或其他操作)会产生很大的干扰,并且需要深入了解DOCX格式的领域知识。
然而,如果你将以下这行代码:
https://github.com/Unstructured-IO/unstructured/blob/main/unstructured/partition/docx.py#L441
从:
改为:
(注意
wp:anchor
(浮动形状)和wp:inline
(内联形状))那么文本框内的文本至少会在输出中显示出来。
它不会很美观,因为段落文本在没有空格的情况下会被连接在一起,例如:
会显示为:
"whatever text came beforethe quick brown foxjumped over the lazy dogwhatever text came after"
所以你需要判断这样做的好处是否值得麻烦。
rt4zxlrg6#
感谢!但是我想知道为什么不在join语句中添加一个空格来防止单词连接:
text = " ".join(
e.text
for e in paragraph._p.xpath(
"w:r"
" | w:hyperlink"
" | w:r/descendant::wp:inline[ancestor::w:drawing][1]//w:r"
" | w:r/descendant::wp:anchor[ancestor::w:drawing][1]//w:r"
)
)
1tu0hz3e7#
可以做到,但这会在常规运行之间增加额外的空间,而这些常规运行已经包含了它们所需的空间。