заменить вкладки и разрыв строки R - PullRequest
0 голосов
/ 07 июня 2018

Я очищаю большой текстовый файл для чтения в R. Почти каждая строка разделена табуляцией, но в нескольких длинных цитатах также есть разрывы строк.Я использую вкладки, чтобы разделить документ на фрейм данных со столбцом динамика и столбцом комментариев, и эти разрывы строк разрушают мое форматирование, потому что R думает, что каждая строка является новым оратором, но затем говорит, что оратор NA когда не находит вкладку.Вот пример того, что у меня есть:

Interviewer: How are you?

Subject: I'm just incredibly frustrated. <br/>
*NA* Really, R is frustrating me. <br/>
*NA* But maybe someone has a solution for me?

Interviewer: Fortunately, I have an answer for you.

И вот что я хочу:

Interviewer: How are you?

Subject: I'm just incredibly frustrated. Really, R is frustrating me. But maybe someone has a solution for me?

Interviewer: Fortunately, I have an answer for you.

Я читаю документ следующим образом:

atas <- stri_read_lines("ATAS2.txt") %>% str_replace_all("\t", "TABS_TO_BE_DELETED")

(у меня есть эта случайная строка, потому что R продолжает стирать вкладки, когда я делаю текстовый документ как фрейм данных, просто для справки).

Теперь, чтобы удалить разрывы строк, я попытался:

atas2 <- gsub("\r?\n|\r", " ", atas) 

И

atas2 <- str_replace_all(atas, "\n" , " ")

Я также не могу просто удалить все специальные символы или форматирование, чтобы решить эту проблему.Если мне НЕОБХОДИМО удалить все не алфавитно-цифровые символы, мне нужно сохранить tabs (по крайней мере, достаточно долго, чтобы вставить на их место какую-то непонятную строку, которую я позже смогу разбить), ?, . , [] , () и : .

Я хочу либо иметьон игнорирует эти разрывы строк или объединяет строки.Единственное предостережение, просто сказав, чтобы он сливался с несопоставленными строками, - это то, что у меня есть несколько строк без какой-либо колонки, которые должны быть в колонке колонок без указания авторства, например (но не только):

(Laughter)

Interview 41

[Inaudible cross-talk]

Я ценю любую помощь, которую вы можете предложить!

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если выходной сигнал соответствует показанному Эндрю Густаром, вы можете сделать:

read.csv(text=gsub("\\n(?!\\w+:)","",text,perl = T),sep=":",h=F)
           V1                                                                                                     V2
1 Interviewer                                                                                           How are you?
2     Subject  I'm just incredibly frustrated. Really, R is frustrating me. But maybe someone has a solution for me?
3 Interviewer                                                                 Fortunately, I have an answer for you.
0 голосов
/ 07 июня 2018

Вы могли бы пойти немного по-другому и сделать что-то вроде этого.Обратите внимание, что обычно вам необходимо дважды экранировать специальные символы в регулярном выражении R (первый - экранирование от обратной косой черты).

#read in text as a single string
text <- "Interviewer: How are you?
Subject: I'm just incredibly frustrated. 
    Really, R is frustrating me. 
    But maybe someone has a solution for me?
Interviewer: Fortunately, I have an answer for you."

#add `#` markers to separate text before and after speaker followed by colon 
text2 <- str_replace_all(text, "(\\w+?\\:)", "#\\1#")

#split at markers, remove first blank element, and cast as a 2-column data frame
text3 <- as.data.frame(matrix(str_split(text2, "#")[[1]][-1], ncol=2, byrow=TRUE))

#remove line breaks, tabs etc
text3$V2 <- str_replace_all(text3$V2, "[\\r\\n\\t]+", " ")

#remove excessive white space
text3$V2 <- str_trim(str_replace_all(text3$V2, "\\s+", " "))

text3
            V1                                                                                                    V2
1 Interviewer:                                                                                          How are you?
2     Subject: I'm just incredibly frustrated. Really, R is frustrating me. But maybe someone has a solution for me?
3 Interviewer:                                                                Fortunately, I have an answer for you.
...