我在R中有一个HTML文档,我想从该文档中提取一个唯一标记列表,并列出它们的出现频率。
我可以按如下方式循环遍历每个可能的标记,但希望找到一个不需要预定义标记列表的解决方案:
library('XML')
url <- 'http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array'
doc <- htmlParse(url)
all_tags <- c('//p', '//a', '//b', '//u', '//i')
counts <- sapply(all_tags, function(x) length(xpathSApply(doc, x)))
free(doc)
答案 0 :(得分:3)
经典XML包版本可能如下所示:
tab <- table(xpathSApply(doc, "//*", xmlName))
tab[c('p', 'a', 'b', 'u', 'i')]
答案 1 :(得分:2)
Hadleyverse版本(但必要时可以恢复到基础):
library(xml2)
library(dplyr)
url <- 'http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array'
doc <- read_html(url)
tags <- xml_name(xml_find_all(doc, "//*"))
# base version
sort(table(tags))
## tags
## body form h1 head html title sub h3 i noscript
## 1 1 1 1 1 1 2 3 3 3
## h4 h2 th link hr ol ul em input b
## 4 5 5 7 8 10 11 12 12 14
## script meta img br pre strong tbody table code li
## 16 17 26 27 41 43 55 79 104 115
## tr p td div a span
## 127 150 268 358 371 423
# hadleyverse
arrange(count(data_frame(tag=tags), tag), desc(n))
## Source: local data frame [36 x 2]
##
## tag n
## 1 span 423
## 2 a 371
## 3 div 358
## 4 td 268
## 5 p 150
## 6 tr 127
## 7 li 115
## 8 code 104
## 9 table 79
## 10 tbody 55
## .. ... ...