gpt4 book ai didi

r - 在R中按大写解析文本

转载 作者:行者123 更新时间:2023-12-01 08:27:56 25 4
gpt4 key购买 nike

我有许多具有以下基本组成的大型文本文件:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com