Пытался найти ответ в другом месте, но безуспешно, поэтому вот так:
У меня есть каталог, полный .txt
файлов, содержащих естественный язык (законодательство). Я хочу прочитать в каталоге, выполнить некоторые операции со строками для каждого файла, используя новую функцию, и сохранить файл в том же каталоге с новым именем файла.
Пример данных (обратите внимание на строку «Информация о начале») в конце):
example <- "(7) A person who is not a UK national commits an offence under this section if
— (a) any part of the arranging or facilitating takes place in the United
Kingdom, or (b) the travel consists of arrival in or entry into, departure
from, or travel within, the United Kingdom. Commencement Information I2 S. 2
in force at 31.7.2015 by S.I. 2015/1476, reg. 2(a) (with regs. 6-8)"
Я разобрался с чтением в каталоге (с помощью этот ответ), который отлично работает:
files <- list.files(path="../txt_copies/", pattern="*.txt", all.files=T, full.names = T) #filenames
filelist <- lapply(files, read.delim) #read in files from the filenames list
names(filelist) <- paste0(basename(file_path_sans_ext(files))) #name list elements by filenames
list2env(filelist, envir=.GlobalEnv) #move the list elements into the global env as objects
Проблема моя функция:
page_cleaner <- function(x) {
txt <- x
# clean text and print confirmation
txt <- str_replace_all(txt, "(F)(\\d).+?(\\n)", "")
txt <- gsub("Textual Amendments", "", txt)
print("Text cleaned of Textual Amendments")
txt <- str_replace_all(txt, "(Commencement Information).+?(\\d)\\)", "")
txt <- str_replace_all(txt, "(Commencement Information).+?(\\w)\\)", "")
print("Text cleaned of Commencement Information")
x <- txt
}
lapply(names(filelist), page_cleaner)
Должно возвращаться:
[1] "(7) A person who is not a UK national commits an offence under this section if
— (a) any part of the arranging or facilitating takes place in the United Kingdom,
or (b) the travel consists of arrival in or entry into, departure from, or travel
within, the United Kingdom.
Кажется, что это нормально работает на примере, когда я вызываю функцию самостоятельно, например page_cleaner(example)
но не в списке файлов.
Я был совершенно уверен, что это сработает, и я не могу понять, где я ошибся. Эти манипуляции со строками прекрасно работают вне функции. В данных примера они должны удалить все, начиная с «Начальной информации» и заканчивая концом строки.
У меня уже есть метод для сохранения объектов в каталоге, когда все это сделано, в этом не требуется помощь .
Спасибо!