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

标签 r text text-mining uppercase

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

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/

相关文章:

c# - 使用 C# 或任何开源文本挖掘 API 从文本文件中分离出有意义的词

regex - 如何在 R 中将文本文件读取为一行

machine-learning - 用于潜在语义分析 (LSA) 的奇异值分解 (SVD) 生成的矩阵的含义/含义

r - 如何在 RCpp 中向数据框添加新列?

r - 如何在 R 中以原始单位绘制转换后的时间序列 ETS 预测?

r - 如何将单词转换为日期?

css - 如何在不定义高度和宽度的情况下定位这些 CSS 元素

r - 在列表中用空格替换句点时出错

html - CSS 弄乱了我的代码

opengl - 从 4.1 版开始,OpenGL 中文本渲染的最新技术是什么?