2017-05-19 1 views
1

Ich versuche, Text nach Schlüsselwörtern zu suchen und dann die Schlüsselwörter zurückzuziehen, die es findet.grep und gsub, um Muster zu finden und Muster zu rufen

jetzt ich/reproduzierbaren Beispiel bin:

text <- c("Here is some text about cats and dogs", 
      "Here is some text about turtles and chickens", 
      "Here is some text about rhinos and elephants") 
pattern <- "cat|turtle" 
HasPattern <- as.vector(NULL) 
for(i in 1:length(text)){ 
if(sum(grepl(pattern, text[i], ignore.case = TRUE)>0)) 
    HasPattern <- append(HasPattern, text[i]) 
} 

Das gewünschte Ergebnis für diese Ausgabe wäre:

gsub(grepl(pattern, text), pattern, text) # or something 
[1] cat turtle NA 

Ich habe versucht -

for (i in 1:length(text)){ 
    if(grepl(pattern, text[i]) == TRUE) 
    gsub(text[i], pattern, text[i]) 
} 


sub(text, pattern, text) 

gsub(grepl(pattern, text), pattern, text) 

Im reproduzierbaren Beispiel: HasPattern gibt mir einen Vektor der Texte, die was ich will was haben ist toll. Aber ich möchte auch einen Vektor, welches Muster es in diesen Texten gefunden hat.

Antwort

2

Wir str_extract

library(stringr) 
str_extract(text, pattern) 
#[1] "cat" "turtle" NA  
+1

Ausgezeichnet danke! Ist str_extract case sensitive? –

+0

@MattW. Sie können die Änderungen im Muster vornehmen, um die Groß-/Kleinschreibung zu ignorieren – akrun

+0

Wie wird das normalerweise gemacht? "Katze | Katze" ist die einzige Weise, die ich weiß, aber ich habe eine große Liste für ein Muster. –

1

Sie auch regmatches zusammen mit gregexpr in baseR ausführen können

regmat <- regmatches(text,gregexpr(pattern,text)) 
regmat[lapply(regmat , length) == 0] <- NA 
unlist(regmat) 

Ausgabe verwenden:

> unlist(regmat) 
[1] "cat" "turtle" NA 
Verwandte Themen