选择单词在句子中出现的行

Selecting rows where a word occurs in the sentence

我想从我从项目 Gutenberg r 包中获得的数据集中过滤掉特定的行。为此,我只想 select 包含给定单词的行,但问题是我的所有行都有多个单词,因此使用 filter() 将不起作用。

例如:

句子是:"The Little Vanities of Mrs. Whittaker: A Novel"。我想过滤掉所有包含“小说”一词的行,但我不知道如何过滤。

gutenberg_full_data <- left_join(gutenberg_works(language == "en"), gutenberg_metadata, by = "gutenberg_id")

gutenberg_full_data <- left_join(gutenberg_full_data, gutenberg_subjects)

gutenberg_full_data <- subset(gutenberg_full_data, select = -c(rights.x,has_text.x,language.y,gutenberg_bookshelf.x, gutenberg_bookshelf.y,rights.y, has_text.y,gutenberg_bookshelf.y, gutenberg_author_id.y, title.y, author.y))

gutenberg_full_data <- gutenberg_full_data[-which(is.na(gutenberg_full_data$author.x)),]
novels <- gutenberg_full_data %>% filter(subject == "Drama")

original_books <- gutenberg_download((novels), meta_fields = "title")

original_books

tidy_books <- original_books %>%
  unnest_tokens(word, text)

这是我使用“gutenbergr”包获取数据框的代码。

为此,您可以使用基础 R 中的 grepl()grepl() returns True 如果单词存在,False 否则。

text = "The Little Vanities of Mrs. Whittaker: A Novel"
word = "Novel"

> grepl(word, text)

[1] TRUE

您的 original_books 文件需要大量下载,因此我将向您展示在 novels 数据框的 title.x 中搜索“Plays”的示例。

> novels %>% 
     mutate(contains_play = grepl("Plays", title.x))

# A tibble: 54 × 8
   gutenberg_id title.x          author.x      gutenberg_autho… language.x subject_type subject contains_play
          <int> <chr>            <chr>                    <int> <chr>      <chr>        <chr>   <lgl>        
 1         1308 A Florentine Tr… Wilde, Oscar               111 en         lcsh         Drama   FALSE        
 2         2270 Shakespeare's F… Shakespeare,…               65 en         lcsh         Drama   FALSE        
 3         2587 Life Is a Dream  Calderón de …              970 en         lcsh         Drama   FALSE        
 4         4970 There Are Crime… Strindberg, …             1609 en         lcsh         Drama   FALSE        
 5         5053 Plays by August… Strindberg, …             1609 en         lcsh         Drama   TRUE         
 6         5618 Six Plays        Darwin, Flor…             1814 en         lcsh         Drama   TRUE         
 7         6587 King Arthur's S… Dell, Floyd               2100 en         lcsh         Drama   TRUE         
 8         6782 The Robbers      Schiller, Fr…              289 en         lcsh         Drama   FALSE        
 9         6790 Demetrius: A Pl… Schiller, Fr…              289 en         lcsh         Drama   FALSE        
10         6793 The Bride of Me… Schiller, Fr…              289 en         lcsh         Drama   FALSE        
# … with 44 more rows

请注意 grepl() 允许第二个参数是向量。因此,没有必要使用 rowwise()。如果它只允许在字符串中搜索,我们将不得不使用 rowwise().

您可能正在寻找如下内容。它将查找包含您输入的关键字的 any 字符串。

stringr::str_detect(variable, "keyword")

仅对特定字符串进行子集化的示例

library(stringr)


df <- df %>% filter(str_detect(column_that_contains_the_word, "the word"))

在你的情况下(我假设)过滤掉特定的字符串并保留所有其他的

library(stringr)


original_books <- original_books %>% filter(!str_detect(title, c("novel", "Novel", "NOVEL")))

让我们知道它是否有效。