下午好,
感谢您帮我解决这个问题。
我在列表中有一组> 5000个URL,我有兴趣抓取。我使用lapply和readLines来使用下面的示例代码提取这些网页的文本:
multipleURL <- c("http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=0002-1200&start=1&labeltype=all", "http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=0002-1407&start=1&labeltype=all", "http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=0002-1975&start=1&labeltype=all")
multipleText <- lapply(multipleURL, readLines)
现在,我想查询这些文本中的每一个单词&#34; radioactive&#34;。我只是想知道文本中是否提到了这个术语并使用了逻辑grep命令:
radioactive <- grepl("radioactive" , multipleText, ignore.case = TRUE)
当我计算列表中包含单词&#34;放射性&#34;的项目数时它返回0:
count(radioactive)
x freq
1 FALSE 3
但是,对这些网址中的每个网页进行粗略审查后发现,第一个链接(http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=0002-1200&start=1&labeltype=all)实际上包含放射性一词。我们的&#34; multipleText&#34; list甚至包括放射性这个词,虽然我们的grepl命令似乎没有把它拿起来。
对我所做错的任何想法都将不胜感激。
非常感谢,
克里斯
答案 0 :(得分:4)
我认为您应该使用html parser
解析文档。我在这里使用XML
包。我将您的文档转换为R列表,然后我可以在其上应用grep
。
library(XML)
multipleText <- lapply(multipleURL,function(x) {
y <- xmlToList(htmlParse(x))
y.flat <- unlist(y,recursive=TRUE)
length(grep('radioactive',c(y.flat,names(y.flat))))
})
multipleText
[[1]]
[1] 8
[[2]]
[1] 0
[[3]]
[1] 0
编辑以搜索多重搜索:
## define your words here
WORDS <- c('CLINICAL ','solution','Action','radioactive','Effects')
library(XML)
multipleText <- lapply(multipleURL,
function(x) {
y <- xmlToList(htmlParse(x))
y.flat <- unlist(y,recursive=TRUE)
sapply(WORDS,function(y)
length(grep(y,c(y.flat,names(y.flat)))))
})
do.call(rbind,multipleText)
CLINICAL solution Action radioactive Effects
[1,] 6 10 2 8 2
[2,] 1 3 1 0 3
[3,] 6 22 2 0 6
PS:也许您应该使用ignore.case = TRUE
作为grep
命令。