【发布时间】:2021-01-31 16:05:04
【问题描述】:
我正在使用 edgarWebR 解析 10K (SEC EDGAR) 文件。我正在尝试编写一个算法来通过检查文档的格式来推断每个 HTML 元素是普通文本、副标题还是标题(例如,一些 10K 可能所有标题都以粗斜体显示,而副标题仅以斜体显示)
edgarWebR 返回一个数据框,每个元素对应一行,包含文本和 html。一些html的例子:
<p style="margin-top:18px;margin-bottom:0px"><font style="font-family:ARIAL" size="2"><b><i>Our quarterly operating results have fluctuated in the past and might continue to fluctuate, causing the value of our common stock to decline substantially. </i></b></font></p>
我们可以看到,上面的内容应该被标记为粗体和斜体。然而,这在不同的文件中表现不同。例如,此文件使用<b> 表示粗体,而有些人则使用 font-weight = bold。
解决这个问题的最佳方法是什么?是否有一个 R 包可以解析 HTML 并告诉我它是粗体和斜体,或者返回一个标签列表,这些标签是专门格式化标签(不是 span、p 等)。
或者,我如何根据手动编译的粗体和斜体指标列表检查每一行(“粗体”,<b>,强)并让它返回列表中与每一行匹配的任何元素?
最后,我计划将值制成表格以确定标题级别。例如。如果我计算 100 个既不是粗体也不是斜体的元素,20 个只有 <b> 的元素,以及 10 个包含 <b> 和“斜体”的元素,我可以推断粗体和斜体代表这个特定文件的标题,而单独的粗体表示子标题.
【问题讨论】:
-
一般来说,正则表达式可以用来检测这样的东西。而且,一般来说,使用正则表达式来解析更复杂的 HTML 是一种负担。如果您需要做的就是确定一个句子是否包含几个粗体标签之一,那么这应该是可控的。使用上面的示例句子,您只是在寻找真/假回报吗? (斜体相同)。它可能就像
grepl("<b>|font-weight\\s*=\\s*bold", x, ignore.case=TRUE)一样简单(斜体也类似)。
标签: html r web-scraping edgar sec