2013-04-15 56 views
2

無關字符我有以下一句:去除句子

**I**%%AABB%&&**WANT**%%AO%**ONLY**%RA%$**THESE** 

我想僅提取被定義爲相關的那些話:I, WANT, ONLY, THESE, WORDS, NEXT, STEP。所有其他字符(數字,字母,特殊)應從句子中刪除。

在這種情況下,所產生的一句話是:

I WANT ONLY THESE. 

我有成千上萬這樣的詩句中,每個人都有自己的一套有用的單詞之間的字符。有沒有一種有效的方法來擺脫這些R?

+0

是的......我有一個相關的單詞列表...我想要刪除所有其他單詞 – Ravi

回答

9
string <- "**I**%%AABB%&&**WANT**%%AO%**ONLY**%RA%$**THESE**" 
regmatches(string, gregexpr("I|WANT|ONLY|THESE|WORDS|NEXT|STEP", 
          string)) 

[[1]] 
[1] "I"  "WANT" "ONLY" "THESE" 

編輯:如果你想,然後轉換回一句,說我店叫matches在對象比賽:

sentencify <- function(sentence){ 
    paste0(paste(sentence, collapse=" "), ".") 
} 

lapply(matched, sentencify) 

[[1]] 
[1] "I WANT ONLY THESE." 
+2

一般來說,你可以用'paste(。,sep =「|」) 。 – Arun

+0

非常好。我不熟悉'regmatches'。 +1 – A5C1D2H2I1M1N2O1R2T1

+0

這裏是否需要'perl = TRUE'?換句話說,這裏有什麼用處? – Arun

2

這是一種方法,假設你有一個清單來檢查反對:

> mystring2 <- "**I**%%AABB%&&**WANT**%%AO%**ONLY**%RA%$**THESE**" 
> mystring2 
[1] "**I**%%AABB%&&**WANT**%%AO%**ONLY**%RA%$**THESE**" 
> temp <- strsplit(mystring2, "[^a-zA-Z]")[[1]] 
> myWords <- c("I", "WANT", "ONLY", "THESE", "WORDS", "NEXT", "STEP") 
> temp[temp %in% myWords] 
[1] "I"  "WANT" "ONLY" "THESE" 
2

如果沒有相關的單詞的列表,讓hunspell自動做到這一點:)

> system(paste('echo "', gsub('\\W', ' ', '**I**%%AABB%&&**WANT**%%AO%**ONLY**%RA%$**THESE**'), '" | hunspell -G -d en_US')) 
I 
WANT 
ONLY 
RA 
THESE