gpt4 book ai didi

r - 刮掉标题下的所有子段落(最好是 rvest)

转载 作者:行者123 更新时间:2023-12-05 01:47:17 26 4
gpt4 key购买 nike

我的目标是使用 library(tm)一个相当大的 word 文档上的工具包。 word 文档有合理的排版,所以我们有 h1对于主要部分,一些 h2h3副标题。我想比较每个部分并对其进行文本挖掘(每个 h1 下方的文本 - 副标题并不重要 - 因此可以包含或排除它们。)

我的策略是将 worddocument 导出到 html,然后使用 rvest pacakge 提取段落。

library(rvest)
# the file has latin-1 chars
#Sys.setlocale(category="LC_ALL", locale="da_DK.UTF-8")
# small example html file
file <- rvest::html("https://83ae1009d5b31624828197160f04b932625a6af5.googledrive.com/host/0B9YtZi1ZH4VlaVVCTGlwV3ZqcWM/tidy.html", encoding = 'utf-8')

nodes <- file %>%
rvest::html_nodes("h1>p") %>%
rvest::html_text()

我可以提取所有 <p>html_nodes("p") ,但这只是一大汤。我需要分析每个 h1分别地。

最好的可能是一个列表,向量为 p每个 h1 的标签标题。也许是一个类似 for (i in 1:length(html_nodes(fil, "h1"))) (html_children(html_nodes(fil, "h1")[i])) 的循环(这是行不通的)。

如果有一种方法可以从 rvest 中整理单词 html,则奖励

最佳答案

请注意 > is the child combinator ;您当前拥有的选择器查找 p 元素,这些元素是 h1 的子元素 ,这在 HTML 中没有意义,因此不返回任何内容.

如果您检查生成的标记,至少在您提供的示例文档中,您会注意到每个 h1 元素(以及目录的标题,被标记为 p 而不是)具有关联的父级 div:

<body lang="EN-US">
<div class="WordSection1">
<p class="MsoTocHeading"><span lang="DA" class='c1'>Indholdsfortegnelse</span></p>
...
</div><span lang="DA" class='c5'><br clear="all" class='c4'></span>

<div class="WordSection2">
<h1><a name="_Toc285441761"><span lang="DA">Interview med Jakob skoleleder på
a_skolen</span></a></h1>
...
</div><span lang="DA" class='c5'><br clear="all" class='c4'></span>

<div class="WordSection3">
<h1><a name="_Toc285441762"><span lang="DA">Interviewet med Andreas skoleleder på
b_skolen</span></a></h1>
...
</div>
</body>

每个部分中由 h1 表示的所有 p 元素都可以在其各自的父级 div 中找到。考虑到这一点,您可以简单地选择作为每个 h1 sibling 的 p 元素。但是,由于 rvest 目前没有办法从上下文节点中选择 sibling (html_nodes() 仅支持查看节点的子树,即它的后代),您需要以另一种方式执行此操作.

假设 HTML Tidy 创建了一个结构,其中每个 h1 都在一个直接位于 body 内的 div 中,您可以获取每个 div 使用以下选择器的目录除外:

sections <- html_nodes(file, "body > div ~ div")

在您的示例文档中,这应该导致 div.WordSection2div.WordSection3。目录由 div.WordSection1 表示,它被排除在选择之外。

然后从每个div中提取段落:

for (section in sections) {
paras <- html_nodes(section, "p")
# Do stuff with paragraphs in each section...

print(length(paras))
}
# [1] 9
# [1] 8

可以看到,length(paras)对应于每个divp元素的个数。请注意,其中一些只包含   ,根据您的需要,这可能会很麻烦。我将把处理这些异常值作为练习留给读者。

不幸的是,我没有加分,因为 rvest 不提供自己的 HTML Tidy 功能。您将需要单独处理您的 Word 文档。

关于r - 刮掉标题下的所有子段落(最好是 rvest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28517870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com