Как мне повторить эту функцию поиска в R? - PullRequest
1 голос
/ 04 июня 2019

У меня есть несколько файлов RTF, и я хотел бы найти, если определенные слова появляются в файлах. Если оно появится, я бы хотел извлечь все предложение с этим словом в нем.

Это часть кода, которую я хотел бы повторить. Я пробовал это на документе «a1», но у меня есть документы от a1 до a10 в той же папке, в которой я хотел бы искать.

library(striprtf)

files <- list.files(path="/Users/Jane/R/Test", pattern="*.rtf", full.names=TRUE, recursive=FALSE)

rtf <- read_rtf("a1.rtf", verbose = FALSE, row_start = "*| ", row_end = "",
         cell_end = " | ", ignore_tables = FALSE, check_file = TRUE)

text <- unlist(strsplit(rtf, "\\."))


toMatch <- c("passive","fund act")
matches <- unique(grep(paste(toMatch,collapse="|"), 
                        text, value=TRUE))
matches <- data.frame(matches)

Окончательный результат должен представлять собой один фрейм данных со столбцом для имени файла (т.е. a1), предложение, содержащее слова «пассивный и« действие фонда ».

1 Ответ

1 голос
/ 04 июня 2019

Вы можете использовать lapply() и определить функцию, чтобы делать то, что вы хотите. results будет список со всеми вашими фреймами данных

library(striprtf)

files <- list.files(path="/Users/Jane/R/Test", pattern="*.rtf", full.names=TRUE, recursive=FALSE)
# files <-paste0(paste0("a",1:10),".rtf")

results = lapply(files, function(x) {
  rtf <- read_rtf(x, verbose = FALSE, row_start = "*| ", row_end = "",
                  cell_end = " | ", ignore_tables = FALSE, check_file = TRUE)

  text <- unlist(strsplit(rtf, "\\."))


  toMatch <- c("passive","fund act")
  matches <- unique(grep(paste(toMatch,collapse="|"), 
                         text, value=TRUE))
  matches <- data.frame(matches)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...