我一直在研究一些 R 代码。目的是收集一个 50 页的网站部分中的平均字长和其他有关单词的统计信息。收集统计数据是没有问题的,这是一个简单的部分。然而,让我的代码收集超过 50 页的统计数据是困难的部分,它似乎只从第一页输出信息。请参阅下面的代码并忽略糟糕的缩进。
install.packages(c('tidytext', 'tidyverse'))
library(tidyverse)
library(tidytext)
library(rvest)
library(stringr)
websitePage <- read_html('http://books.toscrape.com/catalogue/page-1.html')
textSort <- websitePage %>%
html_nodes('.product_pod a') %>%
html_text()
for (page_result in seq(from = 1, to = 50, by = 1)) {
link = paste0('http://books.toscrape.com/catalogue/page-',page_result,'.html')
page = read_html(link)
# Creates a tibble
textSort.tbl <- tibble(text = textSort)
textSort.tidy <- textSort.tbl %>%
funnest_tokens(word, text)
}
# Finds the average word length
textSort.tidy %>%
map(nchar) %>%
map(mean)
# Finds the most common words
textSort.tidy %>%
count(word, sort = TRUE)
# Removes the stop words and then finds most common words
textSort.tidy %>%
anti_join(stop_words) %>%
count(word, sort = TRUE)
# Counts the number of times the word "Girl" is in the text
textSort.tidy %>%
count(word) %>%
filter(word == "Girl")
答案 0 :(得分:1)
您可以使用 lapply
/map
从多个链接中提取 tetx。
library(rvest)
link <- paste0('http://books.toscrape.com/catalogue/page-',1:50,'.html')
result <- lapply(link, function(x) x %>%
read_html %>%
html_nodes('.product_pod a') %>%
html_text)
如果您想将其他功能应用于文本,您可以继续使用 lapply
。
答案 1 :(得分:-1)
我有两点要说明。首先,您在代码中使用了 funnest_tokens 函数,但该函数不存在。你是说 unnest_tokens 吗?
其次,您可以尝试包 purrr 中的 map* 函数,而不是循环。首先,创建一个返回 tibble 的函数。它应该包含您需要的统计信息 - 例如最常用的词。并创建一个网页列表,您要从中抓取数据。然后使用地图功能。可能这应该有效。