0

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

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

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

请注意,当我只运行没有 mapply 的第 15 行时,我得到了正确的结果。如果有更有效的方法可以将 regmatches 的结果放入一个新列而不是 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 个元素的向量,其中每个元素都是餐厅名称(如果没有从字符串中提取任何内容,则为空白,因为我将使用其他正则表达式语句解决其他评论格式)。我们希望在第 15 个指数中看到“Good to Go”。

4

1 回答 1

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)
于 2015-11-13T00:37:57.523 回答