R: Как преобразовать образец ответа на разговорный вопрос во фрейм данных?

Я прочитал следующий текстовый файл и столкнулся со следующей проблемой:


Имя файла: QnA.txt


Вопрос: Как тебя зовут?

Ответ: ХХХХ

Вопрос: Скажите, пожалуйста, ваш адрес?

Ответ: ХХХ, хххх-сссс, 00000

Вопрос: Сообщите мне другие подробности

Ответ: конечно, ................


txt <- "directory path"
QuesAnsFiles <- Corpus(DirSource(txt, encoding = "UTF-8"),readerControl = list(language = "lat"))

Я прочитал этот текстовый файл в корпусе, и теперь мне нужно выполнить некоторый анализ текста в этом файле, для чего я должен создать каждый файл корпуса в фрейме данных, например:

df <- data.frame(Question='',Answer='')

Как я мог прочитать каждый корпус и преобразовать его во фрейм данных по своему желанию...?

Дополнительное описание для понимания:

df$Question покажет весь вопрос и, соответственно, df$Answer покажет ответ на соответствующий вопрос

Пожалуйста, предложите подходящий способ решить эту проблему, позже я также сосредоточусь на скорости...


person user_az    schedule 20.06.2013    source источник


Ответы (2)


Считайте файл в вектор символов с помощью readLines, затем используйте регулярные выражения, чтобы извлечь части, которые вам нужны.

library(stringr)
lines <- readlines("your file")
questions <- str_match(lines, "Question: (.*)")[, 2]
answers <- str_match(lines, "Answer: (.*)")[, 2]
data.frame(
  Question = questions[!is.na(questions)],
  Answer   = answers[!is.na(answers)]
)
person Richie Cotton    schedule 20.06.2013

Я думаю, вы можете использовать qdap версии 1.1. .0, чтобы легко выполнить эту задачу. Первый qdap имеет функцию read.transcript, которая считывает имеющиеся у вас данные расшифровки. Затем с помощью переупорядочения и sentCombine мы можем объединить по лицам:

dat <- read.transcript(text="Question: What is your name?
Answer: XXXX
Question: Please tell me your address?
Answer: XXX, xxxx-ssss, 00000
Question: Tell me other details
Answer: sure, ................", col.names =qcv(person, text))


with(dat[order(dat$person), ], sentCombine(text, person))

##     person                                                   text.var
## 1   Answer                     XXXX XXX, xxxx-ssss, 00000 sure, .....
## 2 Question What is your name? Please tell me your address? Tell me...

Также обратите внимание, что qdap версии 1.1.0 добавлен ряд функций для интеграции с пакетом tm. Подробнее см. ?tdm.

Также я читаю данные прямо здесь. На самом деле вы бы хотели использовать read.transcript("directory path"). Это работает с файлами txt, csv, xlsx и docx.

person Tyler Rinker    schedule 28.02.2014