我正在做一个项目,我需要将 10-K 分解成它们的组成段落。对于一些 10-K,我可以做一些简单的事情,比如 soup.find_all('p')
,但我也看到其他 10-K 将所有内容都使用 <div>
而不是<p>
标签。以下是我看到公司声明段落分隔符的三种不同方式:
使用空div 标签在段落之间创建空间的情况:
<div></div><div>Text of a paragraph</div><div></div>
在顶部或底部使用边距/填充以创建空间的情况:
<div style="padding-top: 10pt">Text of a paragraph</div>`, `<div style="margin-bottom: 10pt"></div>
公司使用<br>
标签的情况:
<div><br><div><div>Text of paragraph</div><div><br></div>
我不得不为这三种情况中的每一种编写新的代码,我担心可能还有其他方法来标记我还没有遇到的段落。
问题:我可以使用某种包或方法来标准化所有这些声明段落分隔符的不同方式,或者我应该继续为我遇到的每个新案例编写代码?
我认为这里没有通用的方法。但是,作为一种启发式方法,您可能可以将带有文本内容的<div>
视为一个段落,而不考虑是否包含其他标签(例如其他<div>
(。
您甚至可以尝试编写一个 XPath 查询来捕获此条件并使用 XML 分析器枚举节点。或者将可能的文本封闭标签列表传递给soup.find_all()
,例如:
soup.find_all(['div', 'p'])
并浏览仅包含文本内容的非空发现,以将它们视为段落。