python - 如何在 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 元素中有它。
有没有一种解决方案可以在元素中的字符串末尾添加一个空格?
解决方案
推荐阅读
- jquery - 根据长度显示或隐藏文本jQuery
- html - 在同一页面的背景中播放音频
- c++ - 如何更改 Amazon kinesis_video_gstreamer_sample_app.cpp 中的视频源?
- css - 在 Opencart 的“最新产品”模块中隐藏产品
- windows - 生成wordnet db文件时出错
- symfony - 如何使用 symfony 4 在 twig 中显示数据库表?
- c# - 从 WPF 共享设置到 Windows 服务
- php - 作曲家自动加载出错了,这是怎么回事?
- html - html 和 css 中的徽标大小似乎缩小了
- python - 使用 Tensorflow 的 LSTM 网络中的 Shape ValueError