遇到麻烦求和文本字符串的近似匹配,以及从被匹配的字符串中提取信息 第一及时。从R中一个文本串的第一近似匹配拉信息(和求和匹配的总数)
我看起来像这样的数据:
text<-c("THEN it goes West","AT it falls East","it goes West", "it falls East", "AT it goes West")
date<-c(2008,2009,2003,2006,2011)
ID<-c(1,2,3,4,5)
data<-cbind(text,date,ID)
data<-as.data.frame(data)
注意最新的文本字符串都大写的“THEN”和“AT”添加到先前的文本字符串。
我想一个表,看起来像这样:
ID Sum Originaltext Originaldate
[1,] "4" "3" "it goes West" "2003"
[2,] "2" "2" "it falls East" "2006"
这包括:
与最早的日期文本相应的ID号(“原始”文字,其他人源自)。 总计所有大致匹配的每个。 文本与最早的日期对应。 和日期与最早的日期相对应的文本。
我有几千万的情况下,所以我有麻烦自动化过程。
我运行Windows 7,并有机会获得快速计算服务器。
IDEAS
#order them backwards in time
data<-data[order(data$date, decreasing = TRUE),]
#find the strings with the latest date
pattern<-"AT|THEN"
k <- vector("list", length(data$text))
for (j in 1:length(data$text)){
k[[j]]<- grep(pattern,data$text[[j]], ignore.case=FALSE)
}
k<-subset(data$text, k==1)
k<-unique(k)
#this is a problem, because case nos. 1 and 5 are still in the dataset, but they derive from the same tweet.
从这里,我可以用 “AGREP”,但我不知道在什么情况下。任何帮助将不胜感激!
注意:当三个答案下面就回答我的问题,我原来问的方式,我没有提到,我的文字的情况确实有所不同,即使没有的话“AT”和“THEN”。事实上,他们中的大多数并不完全匹配。我应该把它放在原来的问题中。但是,我仍然喜欢答案。
谢谢!
不错,我尽量避免stringr,但有时无法帮助它。 – Maiasaura
'stringr'很好,它会强化字符的因子,这里转换为字符和使用基本功能似乎更容易。 (虽然也许在这个因素的水平上工作会更快) – mnel
@mnel,你的意思是像'%like%'? – GSee