2015-06-23 170 views
2

我有一些產品名稱的兩個列表。我的問題是「操作系統」與「系統」,「冷卻系統」等匹配。但它只能與「操作」,「操作系統」相匹配。另一個例子是「Key Board」應該與「key」或「KB」匹配,但不能與「Mother Board」或「Board」匹配。agrep字符串匹配R

如何重視第一個詞而不是第二個詞?

我在R中使用了agrep()它也與第一個例子中的「系統」和「冷卻系統」相匹配。如何避免這種匹配?

是否有任何功能/方法匹配「鍵盤」與「KB」和「操作系統」與「操作系統」?

在此先感謝。

+0

你想對比賽做什麼?替換它們?刪除它們?選擇他們?請包括您的產品列表的一些示例數據,並提供一個可重複的示例:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – grrgrrbla

+0

你看過同義詞功能在qdap包中? – lawyeR

+0

@lawyeR是的,我看着同義詞功能。但我認爲這與我的問題沒有任何關係。因爲我的數據可能有拼寫錯誤,可能是簡單的形式,或只是一半的部分。我想,沒有必要尋找類似的詞。 – Kavipriya

回答

1

我已經爲此寫了一個函數,而不是最優化的方法來完成它,但是這會完成任務。輸入是向量不列表,希望這有助於

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 
+0

在你的例子中,我想要的結果是'1 4',而不僅僅是4。有什麼辦法嗎? – Kavipriya

+0

讓我明白了,如果在上面的例子中search.string是'hello p',那麼輸出結果是什麼,根據我的理解,它將是1 4.因此,如果給定任何輸入字符串,則要比較直接匹配的字符串和也使用 – ghub24

+0

是的!這工作正常輸入'你好p'。這非常有幫助。另外,有什麼辦法讓倒退也是可能的? ('hp'與'hello p'匹配) – Kavipriya