r - 如何用大写字母模式分割文本/字符串?
问题描述
我正在寻找根据每个对话者拆分文本。
原文有这种形式:
这是一个语音文本。第一人称:大家好,谢谢您的光临。第二人:谢谢你邀请我们。TERCER PERSONA QUE SE LLAMA PEDRO:酱油。CUARTA PERSONA(约翰):嗨。你好吗
我正在寻找这样的最终结果:
第一栏:第一人称 |第二人称 | TERCER PERSONA QUE SE LLAMA PEDRO | CUARTA PERSONA(约翰)
第二栏:大家好,谢谢光临 | 感谢您邀请我们 | 黄豆酱| 高分辨率照片| CLIPARTO 你好。你好吗
最终结果也可以是其他格式或重塑。
要拆分的模式是一个或多个大写单词和一个“:”,但一个困难是大写字母的模式可以有可选字符,如:():,;
事实上,我正在寻找拆分的原文是这个: https ://lopezobrador.org.mx/2021/01/14/version-estenografica-de-la-conferencia-de-prensa-matutina-del-presidente -andres-manuel-lopez-obrador-458/
我使用 stringr rebus 和 qdap 尝试了不同的东西。首先尝试这种模式:
pattern_mayusc <- UPPER %R% one_or_more(UPPER) %R% optional(") ") %R% ":"
接下来我尝试使用每个对话者的名称提取一个向量,以将它们用作接下来的模式:
mayuscula<-sapply(str_extract_all(text, ".([A-Z]+:)"), paste, collapse= ' ')
我接近获得我想要的东西,但无法实现它。有人帮我吗?非常感谢提前
解决方案
您可以使用strsplit
匹配:
前面带有任何大写字母\p{Lu}
、空格 ( \s
) 和括号(如果需要,还可以添加更多)的单词序列或 ( |
) 空格,后跟相同序列的模式。我们想要el
结果列表中的第一个元素并用trimws
. 结果是说话者和文本的交替模式,我们可以轻松地将其转换为逐行的两列matrix
。
pat <- r"{(?>\p{Lu}+?\s?)+\(?\p{Lu}+\)?\K(:)|(?<!\w)(\s)(?=\p{Lu}{2,})}"
# pat <- "(?>\\p{Lu}+?\\s?)+\\(?\\p{Lu}+\\)?\\K(:)|(?<!\\w)(\\s)(?=\\p{Lu}{2,})" ## for R < 4.0.0
tmp <- trimws(el(strsplit(x, pat, perl=TRUE)))[-1]
res <- matrix(tmp, ncol=2, byrow=TRUE)
res
# [,1] [,2]
# [1,] "FIRST PERSON" "hi all, thank you for coming."
# [2,] "SECOND PERSON" "thank you for inviting us."
# [3,] "TERCER PERSONA QUE SE LLAMA ANDRÉS" "soy de acuerdo."
# [4,] "CUARTA PERSONA (JOHN)" "Hi. How are you?"
# [5,] "ANDRÉS" "Hola buenos días!"
查看正则表达式演示
数据:
x <- "this is a speech text. FIRST PERSON: hi all, thank you for coming. SECOND PERSON: thank you for inviting us. TERCER PERSONA QUE SE LLAMA ANDRÉS: soy de: acuerdo. CUARTA PERSONA (JOHN): Hi. How are you? ANDRÉS: Hola buenos días!"
推荐阅读
- javascript - 悬停时可水平滚动的视频库
- javascript - 如何在 Shopify 的 Liquid 中隐藏或显示样本的单个单选按钮?
- python-3.x - 在python中创建netCDF文件时如何在循环中写入变量
- amazon-web-services - user_data 未在 EC2 中执行,在 cloud-init thru terraform 中出现错误
- python - 在 Python 中删除不完整/损坏的文件
- c# - 在表适配器查询 c# 中无法识别 OFFSET 命令
- java - Java BigDecimal除法并获得N位数字
- git - 我想制作多个别名命令的别名?
- github - 视图函数未返回的智能合约数据的安全性
- python - Python异步函数中的异步并发