我有一份总统辩论的文本文件。最后,我希望将文本解析成一个数据帧,其中每一行都是一条语句,其中一列包含发言者的姓名,另一列包含该语句。例如:
"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!"发布于 2020-03-21 01:06:56
我怀疑这是否能解决您的所有解析需求,但是使用strsplit来解决您最直接的问题的一种方法是使用lookaround。不过,您需要使用perl regex。
在这里,您指示strsplit在:或之前有标点符号且空格和:之间只有字母数字字符或空格的空格上拆分。\\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!" 发布于 2020-03-21 00:57:44
我们可以使用stringr包通过正则表达式来提取它们。然后,您将直接拥有您要查找的speaker和quote列。
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."https://stackoverflow.com/questions/60778339
复制相似问题