使用regmatches作为参数调用mapply时子字符串参数出错

时间:2015-10-04 02:09:31

标签: regex r text-mining mapply

[![在此处输入图像说明] [1]] [1]以下代码编译企业评论的数据框,旨在从每一行提取企业名称。前14行中没有与正则表达式的匹配,我注意到了,那里没有问题。只要我将第一行包含匹​​配(在本例中为15),我就会收到以下错误。

Error in substring(x[ind], so, eo) : invalid substring arguments

似乎问题在于regexpr将结果发送到index.list,并且regmatches无法使用index.list作为正确的参数。

请注意,当我在没有mapply的情况下仅运行第15行时,我会获得正确的结果。如果有一种更有效的方法可以将重新匹配的结果转换为新列而不是mapply,请告诉我。我不能使用stringr或其他包(学校作业)。

require("tm")
reviews <- VCorpus(DirSource("C:/...../reviews"))

all.reviews <-   data.frame(text=unlist(sapply(reviews,'[',"content")),stringsAsFactors=F)

data <- all.reviews[10:15,]

index.list <- mapply(regexpr, "(?<=Review of )(\\w+ )+(?=-\\s*   [A-Z])", data, perl=T))
rest.names <- mapply(regmatches, data, index.list)

我无法附加图片,所以这里是all.reviews data.frame的第15行的样本(它有昏暗的90 X 1):

通过S。对Yelp的Good To Go -Bronx(4/5)的回顾。 Good To Go 22条评论评分详情类别:餐厅美国(传统)餐馆意大利美国(传统);意大利[编辑] 1894 Eastchester Rd Bronx; NY 10461(718)829-2222 http://www.good2gorestaurant.com探索菜单添加照片时间:周一至周四;太阳上午10点 - 晚上10点周五至周六上午10点至晚上11点适合儿童:是接受信用卡:是停车:代客;车库;街道;私人地段服装:休闲适合团体:是价格范围:$需要预订:是

该函数的预期输出是一个包含90个元素的向量,其中每个元素都是餐馆名称(如果没有从字符串中提取任何内容,则为空白,因为还有其他评论格式,我将使用其他regexpr语句进行处理) 。我们希望看到&#34; Good to Go&#34;在第15个指数。

1 个答案:

答案 0 :(得分:0)

我的同学想出了答案。事实证明,mapply的最后一个参数应该是一个列表,而不是一个数据帧,所以lapply可以做到这一点:

data.mult <- all.reviews[1:15,]    

index.list <- lapply(data.mult,function(x) {
regexpr("(?<=Review of )([A-z-'\\s*]+)+\\w+(?=\\s*-\\s*[A-Z])",x,perl=T)})

rest.names <- mapply(regmatches, data.mult, index.list)