Чтение текстовых файлов в аккуратный текст и добавление метаданных

У меня есть несколько тысяч файлов .txt в каталоге, и я хотел бы прочитать их все в tidytext, где я бы затем добавил столбцы метаданных. Сами имена файлов содержат все метаданные, и мне удалось использовать substr для анализа местоположения, времени, даты и т. Д. Различных частей одного файла, но я не могу найти пример того, как я мог бы сделать это для всех файлов в каталоге.

Например, у меня есть файлы .txt:

FFTJan141138

FFTJan151136

FFTJan161151

FFTJan171144

Мне удалось прочитать файлы из моего wd в тиббл, используя:

tbl <- list.files(pattern = "*.txt") %>% 
map_chr(~ read_file(.)) %>% 
data_frame(text = .)

Мне нужна помощь, так это вставка столбцов данных, которые соответствуют метаданным в именах файлов.

Например, для первого файла с именем: FFTJan141138 у меня теперь есть тиббл, в строке которого для этого файла есть один столбец с содержимым FFTJan141138. Я хотел бы добавить в эту строку четыре дополнительных столбца, которые включают FFT, JAN, 14 и 1138. Я могу анализировать текст в именах файлов с помощью substr, но не знаю, как это сделать, поскольку данные читаются в tidytext . Любая помощь будет оценена.

Спасибо.


person AlanS    schedule 01.03.2019    source источник


Ответы (1)


Я бы немного скорректировал ваш рабочий процесс, чтобы получить ту информацию, которая вам нужна. Чтобы найти все текстовые файлы в рабочем каталоге, вы можете использовать list.files с аргументом:

all_txts <- list.files(pattern = ".txt$")

Тогда объект all_txts будет вектором символов, содержащим все ваши имена файлов.

Затем вы можете настроить канал для чтения всех текстовых файлов и использовать mutate() внутри map() для аннотации каждой строки с именем файла, если хотите.

library(tidyverse)

map_df(all_txts, ~ data_frame(txt = read_file(.x)) %>%
        mutate(filename = basename(.x)))
person Julia Silge    schedule 02.03.2019
comment
Это прекрасно сработало - Спасибо. В приведенный выше код я добавил несколько дополнительных операторов mutate, чтобы проанализировать строку имени файла, извлечь метаданные и затем включить ее во фрейм данных. Используя свой первоначальный подход, я нашел менее элегантное, более управляемое поршнем решение, сначала прочитав текстовые файлы, затем прочитав и проанализировав имена файлов, а затем, наконец, заархивировав текст и метаданные с помощью add_column. Ваше решение, приведенное выше, более оптимизировано. P. S. Мне нравится ваша книга, и я собираюсь использовать аккуратный текст для многих крупных проектов. - person AlanS; 03.03.2019
comment
Еще кое-что .... Как только я реализовал решение, у меня возникли проблемы с попыткой unnest_tokens (слово, текст). Возникает следующая ошибка: Ошибка в check_input (x): ввод должен быть вектором символов любой длины или списком векторов символов, каждый из которых имеет длину 1. .... Мысли? - person AlanS; 03.03.2019
comment
Ах, если вы тоже хотите использовать unnest_tokens (), ознакомьтесь с ответом на этот вопрос: stackoverflow.com/questions/54850258/ - person Julia Silge; 04.03.2019