Используя некоторые пакеты tidyverse, вы можете попасть туда. Сначала прочитайте текст с помощью readr::read_file
, затем разделите его на пустую строку, используйте readr::read_delim
, чтобы прочитать это в data.frames. Поскольку данные теперь находятся в списке, использование bind_rows
сведет все это в один data.frame. bind_rows
соответствует именам столбцов, поэтому весь текст говорящего находится в правильном столбце. В зависимости от того, какой результат вы хотите, первое или второе решение.
Я оставляю объединение нескольких текстовых файлов на ваше усмотрение.
library(readr)
library(tidyr)
library(dplyr)
# read file into a character vector
text <- readr::read_file("conversation.txt")
# split the text on the empty line
split_text <- strsplit(text, split = "\r\n\r\n")
# read the data in again with read_delim. This will generate a list of data.frames
list_text <- lapply(unlist(split_text), function(x) readr::read_delim(x, col_names = TRUE, delim = "\t"))
# use bind_rows from dplyr to combine everything into 1 tibble. bind_rows matches on the column names.
list_text %>%
bind_rows
# A tibble: 5 x 3
`speaker one` `speaker two` `speaker three`
<chr> <chr> <chr>
1 what speaker one says is in this paragraph. NA NA
2 It might be in multiple lines, but not seperated by an empty line. NA NA
3 NA what speaker two says NA
4 what speaker one replies NA NA
5 NA
Свертывание всего текста в одну строку:
Для этого нужно немного больше поработать, сначала собрав данные в длинном формате, сложив текст, а затем снова расширив его. Запускайте операторы кусками, если вы хотите видеть, что происходит на каждом шаге.
list_text %>%
bind_rows %>%
pivot_longer(everything(),
names_to = "speakers",
values_to = "text",
values_drop_na = TRUE) %>%
group_by(speakers) %>%
summarise(text = paste0(text, collapse = " ")) %>%
pivot_wider(names_from = speakers, values_from = text)
# A tibble: 1 x 3
`speaker one` `speaker three` `speaker two`
<chr> <chr> <chr>
1 what speaker one says is in this paragraph. It might be in multiple lines, but not seperated b~ what speaker three s~ what speaker two ~
текст, используемый в текстовом файле разговор.txt
speaker one
what speaker one says is in this paragraph.
It might be in multiple lines, but not seperated by an empty line.
speaker two
what speaker two says
speaker one
what speaker one replies
speaker three
what speaker three says.