2

下午好,

感谢您帮助我解决这个问题。

我有兴趣抓取的列表中有一组 > 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)

现在我想在这些文本中的每一个中查询“放射性”这个词。我只是想弄清楚文本中是否提到了这个术语并且一直在使用逻辑 grep 命令:

radioactive <- grepl("radioactive" , multipleText, ignore.case = TRUE)

当我计算列表中包含“放射性”一词的项目数时,它返回的计数为 0:

count(radioactive)
      x freq
1 FALSE    3

但是,粗略查看每个 URL 的网页后发现,第一个链接 ( http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=0002-1200&start=1&labeltype=all ) 在事实上包含放射性这个词。我们的“multipleText”列表甚至包括放射性这个词,尽管我们的 grepl 命令似乎没有选择它。

任何关于我做错了什么的想法将不胜感激。

非常感谢,

克里斯

4

1 回答 1

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

于 2013-06-25T23:57:46.243 回答