2017-02-07 1 views
-2

У меня есть вопрос относительно извлечения строки.Извлечение терминов, которые находятся в списке, из текстового поля в R

У меня есть в таблице ниже:

Text 
Monday is windy and raining 
Tuesday is sunny 
Wednesday is snowing and cold 

И у меня есть список содержит слова:

windy 
raining 
sunny 
snowing 
cold 

Я хочу, чтобы извлечь члены в списке из таблицы один: Так что результат будет как:

Text        Terms1  Terms2  Terms3 
Monday is windy and raining  windy  raining 
Tuesday is sunny     sunny 
Wednesday is snowing and cold  snowing  cold 

Есть ли способ в RI может это сделать?

Спасибо

+0

вы можете создать цикл 'for' и использовать' if term% in% table', чтобы выбрать условия для добавления. Но вам нужно решить, как будет храниться вывод, как список включенных терминов с текстом или список, вставленный в ячейку таблицы. Как правило, вам не нужны строки различной длины в таблице, которую имеет приведенный выше пример. Вставка всех слов в один список в ячейке происходит вокруг этого – sconfluentus

+0

'term% in% table' не будет работать для поиска строки в тексте, если вы не разделите текст на вектор отдельных слов ... – Spacedman

ответ

0

Учитывая вектор слов:

> words 
[1] "windy" "raining" "sunny" "snowing" "cold" 

и фрейм данных с text колонки:

> data 
          text 
1 Monday is windy and raining 
2    Tuesday is sunny 
3 Wednesday is snowing and cold 

Вы можете легко создать матрицу истинных/ложных значений для присутствия каждого слова в тексте:

> sapply(words, function(w){grepl(w,data$text)}) 
    windy raining sunny snowing cold 
[1,] TRUE TRUE FALSE FALSE FALSE 
[2,] FALSE FALSE TRUE FALSE FALSE 
[3,] FALSE FALSE FALSE TRUE TRUE 

Вы можете добавить это на свой кадр данных, если вы хотите:

> cbind(data, sapply(words, function(w){grepl(w,data$text)})) 
          text windy raining sunny snowing cold 
1 Monday is windy and raining TRUE TRUE FALSE FALSE FALSE 
2    Tuesday is sunny FALSE FALSE TRUE FALSE FALSE 
3 Wednesday is snowing and cold FALSE FALSE FALSE TRUE TRUE 

Что вы дали в качестве вывода вы хотите выглядит очень рваная структура данных, которая может быть правильной, чтобы сделать в виде списка, но если вы не можете уточнить, что код, который я дал, должен быть достаточным для того, чтобы вы могли работать в любой форме, какой бы вы ни хотели с базовым R-кодом. Посмотрите на помощь для grep и друзей, чтобы узнать, как искать строки в тексте.

0
library(stringr) 
library(stringi) 

Text <- c("Monday is windy and raining","Tuesday is sunny","Wednesday is snowing and cold") 

terms <- c("windy","raining","sunny","snowing","cold") 
terms_regex <- paste(terms,collapse="|") 

stri_list2matrix(sapply(Text,function(x,terms_regex) str_extract_all(x,terms_regex),terms_regex),byrow=TRUE) 
Смежные вопросы