R中的agrep字符串匹配
agrep string matching in R
我有两个产品名称列表。我的问题是 "Operating system" 与 "system"、"cooling system" 等匹配。但它必须只匹配"Operating"、"OS"。另一个例子是 "Key Board" 应该与 "key" 或 "KB" 匹配,但不能与 "Mother Board" 匹配,或者只是 "Board".
如何让第一个词比第二个词更重要?
我在 R 中使用了 agrep()
。对于第一个示例,它也匹配 "system" 和 "cooling system"。如何避免匹配?
有没有 function/method 可以匹配 "key board" 和 "KB" 以及 "operating system" 和 "OS"?
提前致谢。
我为此编写了一个函数,虽然不是最优化的方法,但可以完成任务。输入是向量而不是列表,希望这有帮助
stringMatch<-function(search.string,inputstring,pattern=" "){
stringsplit<-unlist(str_split(search.string,pattern))
firstletter<-c()
for(i in seq(1,length(stringsplit))){firstletter<-paste(firstletter,
substring(stringsplit[i],1,1),sep="")}
search.string.l<-tolower(search.string)
firstletter.l<-tolower(firstletter)
matchstring<-grep(paste("\b",search.string.l,"\b","|","\b",firstletter.l,"\b"
,sep=""),tolower(inputstring))
return(matchstring)
}
test1<-c('hello p','helbbo','hello test','HP')
search.string<-'HP'
[1] 4
我有两个产品名称列表。我的问题是 "Operating system" 与 "system"、"cooling system" 等匹配。但它必须只匹配"Operating"、"OS"。另一个例子是 "Key Board" 应该与 "key" 或 "KB" 匹配,但不能与 "Mother Board" 匹配,或者只是 "Board".
如何让第一个词比第二个词更重要?
我在 R 中使用了 agrep()
。对于第一个示例,它也匹配 "system" 和 "cooling system"。如何避免匹配?
有没有 function/method 可以匹配 "key board" 和 "KB" 以及 "operating system" 和 "OS"?
提前致谢。
我为此编写了一个函数,虽然不是最优化的方法,但可以完成任务。输入是向量而不是列表,希望这有帮助
stringMatch<-function(search.string,inputstring,pattern=" "){
stringsplit<-unlist(str_split(search.string,pattern))
firstletter<-c()
for(i in seq(1,length(stringsplit))){firstletter<-paste(firstletter,
substring(stringsplit[i],1,1),sep="")}
search.string.l<-tolower(search.string)
firstletter.l<-tolower(firstletter)
matchstring<-grep(paste("\b",search.string.l,"\b","|","\b",firstletter.l,"\b"
,sep=""),tolower(inputstring))
return(matchstring)
}
test1<-c('hello p','helbbo','hello test','HP')
search.string<-'HP'
[1] 4