首页 > 解决方案 > 如何在 Python3 中更改 lxml etree.Element 的文本内容的结尾?

问题描述

我目前正在使用 Python 进行自然语言处理项目。我们有科学文章的 html 文本,我们用 Pythons lxml.etree 解析,并存储为 Elements 和 ElementTrees。我们的一些 html 文本实际上是使用 pdf2htmlEX ( https://github.com/coolwanglu/pdf2htmlEX ) 转换的 pfs。这个转换器将文章的每一行都变成了一个 div,以一种从尾行中去除空格的方式。

所以这个html:

<div>This is a</div>
<div>sample text.</div>

...被解析如下:

这是一个示例文本。

注意 'a' 和 'sample' 之间没有空白。

我需要它看起来像这样:

这是一个示例文本。

我必须以某种方式手动将空格添加到行尾。Etree 确实有一个 Element.text 属性,并且 Element.text 可以像任何其他字符串一样进行更改。Element.text += ' ' 结果是在 .text 的末尾添加空格。但是, .text 只会持续到第一个子标签。考虑以下代码:

html = '<div>This is a <strong>sample</strong> text.</div>'
el = etree.fromstring(html)
print(el.text)

打印的结果是:

'这是一个 '

遗憾的是,Element 没有到达文本末尾的属性。如果要使用元素的整个文本内容,则需要使用 ''.join(el.itertext())。可悲的是,出于几个原因,我需要直接更改元素的文本内容。存储 itertext 的结果并在其余代码中使用它目前不是我的选择。

为了增加一些进一步的挑战,同一个问题有不同的变化:

html_1 = <div>This is a <strong>sample</strong> text.</div>
html_2 = <div>This is a sample <strong>text.</strong></div>

这些是不同的情况:html_1 在 div 元素中有 endline,而 html2 在 strong 元素中有它。

有没有一种解决方案可以在元素中的字符串末尾添加一个空格?

标签: pythonhtmlnlplxmlelementtree

解决方案


推荐阅读