Разбор текста интервью - PullRequest
0 голосов
/ 20 марта 2020

У меня есть текстовый файл президентских дебатов. В конце концов, я хочу проанализировать текст в фрейме данных, где каждая строка является оператором, с одним столбцом с именем докладчика и другим столбцом с оператором. Например:

"Bob Smith: Hi Steve. How are you doing? Steve Brown: Hi Bob. I'm doing well!"

станет:

   name          text
1   Bob Smith    Hi Steve. How are you doing?
2 Steve Brown    Hi Bob. I'm doing well!

Вопрос: Как мне отделить утверждения от имен? Я попытался разделить на двоеточие:

data <- strsplit(data, split=":")

Но потом я получил это:

"Bob Smith" "Hi Steve. How are you doing? Steve Brown" "Hi Bob. I'm doing well!"

Когда то, что я хочу, это:

"Bob Smith" "Hi Steve. How are you doing?" "Steve Brown" "Hi Bob. I'm doing well!"

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Я сомневаюсь, что это исправит все ваши потребности в разборе, но подход, использующий strsplit для решения вашего самого неотложного вопроса, использует lookaround. Вам нужно будет использовать perl regex.

Здесь вы указываете strsplit разделить либо на :, либо на пробел, где непосредственно перед символом есть знак пунктуации, и ничего кроме alphanumeri c символов или пробелов. между пробелом и :. \\pP соответствует знакам препинания, а \\w соответствует знакам слова.

data <- "Bob Smith: Hi Steve. How are you doing? Steve Brown: Hi Bob. I'm doing well!"
strsplit(data,split="(: |(?<=\\pP) (?=[\\w ]+:))",perl=TRUE)
[[1]]
[1] "Bob Smith"                    "Hi Steve. How are you doing?" "Steve Brown"                 
[4] "Hi Bob. I'm doing well!"  
0 голосов
/ 20 марта 2020

Мы можем извлечь их с помощью регулярного выражения, используя пакет stringr. Затем у вас есть колонки говорящего и цитата, которую вы ищете.

a <- "Bob: Hi Steve. Steve: Hi Bob."

library(stringr)

str_match_all(a, "([A-Za-z]*?): (.*?\\.)")
#> [[1]]
#>      [,1]             [,2]    [,3]       
#> [1,] "Bob: Hi Steve." "Bob"   "Hi Steve."
#> [2,] "Steve: Hi Bob." "Steve" "Hi Bob."
...