我有许多具有以下基本组成的大型文本文件:
text<-"this is a speech text. FIRST PERSON: hi all, thank you for coming. SECOND PERSON: thank you for inviting us"
如您所见,它由以下部分组成:1) 随机文本,2) 大写人物,3) 语音。
我已经设法在一个列表中分离出所有的单词:
textw<-unlist(strsplit(text," "))
然后我找到所有大写单词的位置:
grep(pattern = "^[[:upper:]]*$",x = textw)
我已经把人名分成了一个向量;
upperv<-textw[grep(pattern = "^[[:upper:]]*$",x = textw)]
期望的结果是这样的数据框或表格:
Result<-data.frame(person=c(" ","FIRST PERSON","SECOND PERSON"),
message=c("this is a speech test.","hi all, thank you for coming.","thank you for inviting us"))
Result
person message
1 this is a speech test.
2 FIRST PERSON hi all, thank you for coming.
3 SECOND PERSON thank you for inviting us
我无法将每条消息“链接”到其作者。
另请注意:有些不是作者的大写单词,例如“I”。如何仅在 2 个或多个大写单词彼此相邻的情况下指定分隔符?
换句话说,如果位置 2 和 3 是大写字母,则将位置 4 直到下一次出现双大写字母的所有内容都作为消息放置。
任何帮助表示赞赏。
最佳答案
这是使用 stringi 包的一种方法:
text <- "this is a speech text. FIRST PERSON: hi all, thank you for coming. SECOND PERSON: thank you for inviting us"
library(stringi)
txt <- unlist(stri_split_regex(text, "(?<![A-Z]{2,1000})\\s+(?=[A-Z]{2,1000})"))
data.frame(
person = stri_extract_first_regex(txt, "[A-Z ]+(?=(:\\s))"),
message = stri_replace_first_regex(txt, "[A-Z ]+:\\s+", "")
)
## person message
## 1 <NA> this is a speech text.
## 2 FIRST PERSON hi all, thank you for coming.
## 3 SECOND PERSON thank you for inviting us
关于r - 在R中按大写解析文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358823/