2013-06-16 19 views
8

Próbuję utworzyć podzbiór ramki danych artykułów informacyjnych, które wymieniają co najmniej jeden element zestawu słów kluczowych lub fraz.Znajdź dopasowania wektora ciągów w innym wektorze ciągów znaków

# Sample data frame of articles 
articles <- data.frame(id=c(1, 2, 3, 4), text=c("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod", "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,", "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo", "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse")) 
articles$text <- as.character(articles$text) 

# Sample vector of keywords or phrases 
keywords <- as.character(c("elit", "tempor incididunt", "reprehenderit")) 

# id                   text 
# 1 1  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
# 2 2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
# 3 3  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
# 4 4 consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 

Biorąc wektor kluczowych, podzbiór wierszy powinien zawierać 1, 2 i 4, ponieważ te rzędy zawierają jeden lub większą liczbę elementów wektora.

Ani %in ani grepl() pracy, ponieważ %in% wydaje się wymagać, aby każde słowo w ramce danych należy wektorowy (articles$text %in% keywords wyniki w czterech FALSE s), a grep() wydaje się nie być w stanie obsłużyć wektorowy wzory (grep(keywords, articles$text) daje błąd). Żadna z tych funkcji nie działa dobrze w wielu wymiarach (tzn. Łatwo byłoby wyszukać jedno słowo we wszystkich wierszach, ale nie wszystkie trzy w tym samym czasie).

Jaki jest najlepszy sposób wyszukiwania i wybierania wszystkich wierszy w ramce danych zawierających co najmniej jeden element wektora słów kluczowych?

Odpowiedz

13

Można spróbować wklejając swoje „słowo” razem i oddzielić je znakiem potoku (|), która będzie działać jak u „lub” coś takiego:

> articles[grepl(paste(keywords, collapse="|"), articles$text),] 
    id                   text 
1 1  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
2 2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
4 4 consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
+0

Co zrobić, jeśli słowa kluczowe mają znaki trzeba w nich uciec? Czy trzeba ręcznie unikać wszystkich znaków specjalnych we wszystkich słowach kluczowych? – Chill2Macht