【问题标题】:R - checking HTML for formatting tags (bold, italics etc.)R - 检查 HTML 格式标签(粗体、斜体等)
【发布时间】: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


【解决方案1】:

我认为您正在寻找的只是一个特定的字符串是否包含 html 标记,该标记指示该字符串中的某些内容应该是粗体和/或斜体。

S <- '<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>'
grepl("<b>|<font-weight\\s*=\\s*bold", S, ignore.case = TRUE)
# [1] TRUE
grepl("<i>|<font-style\\s*=\\s*italic", S, ignore.case = TRUE)
# [1] TRUE

【讨论】:

  • 接近了吗,@ks123321?
  • 嗨。非常感谢您的回答。我倾向于像你的答案 - mutate(is_bold = if_else(grepl("&lt;b&gt;|&lt;strong&gt;|weight: bold|weight:bold",raw,ignore.case = TRUE), 'bold', '')) %&gt;% mutate(is_italic = if_else(grepl("&lt;i&gt;|&lt;em&gt;|style: italic|style:italic",raw,ignore.case = TRUE), 'italic', '')) 。但是,由于我计划将其应用于数千个异类格式的文件,我是否可以扩展到不仅仅是粗体和斜体 - 用于提取格式标签的实际 HTML 解析器可能比仅考虑粗体和斜体更强大。
  • 我担心某些文件可能使用不同的格式技术,而不仅仅是粗体和斜体,我的算法会错过这些技术。另外,您知道在 HTML 中可以表示粗体或斜体的任何其他方式吗?到目前为止,对于粗体,我有 和 weight:bold。对于斜体,我有 , 和样式:斜体。再次感谢您的想法。
  • 这很好,但祝你好运:正则表达式解析 HTML 充满了许多问题。您真的应该使用特定于 html 的解析器。不幸的是,我目前对此没有任何建议。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2016-08-10
  • 1970-01-01
相关资源
最近更新 更多