R语言如何删除语料库中Disclosure前及Conclusion后的所有文本
R语料库指定关键词区间截取实现方案
你可以通过tm包的自定义内容转换功能,配合正则匹配完成区间截取,操作如下:
1. 编写自定义文本处理函数
我们先写一个函数,实现单个文本的截取逻辑:如果文本同时存在Disclosure和Conclusion两个关键词,就保留两个关键词之间的内容,否则保留原文避免报错。
# 需先加载stringr包处理正则,没有安装的话先运行 install.packages("stringr") library(stringr) trim_text_by_keywords <- function(text) { # 正则匹配Disclosure和Conclusion之间的所有内容,(?s)是让.可以匹配换行符 matched <- str_extract(text, "(?s)(?<=Disclosure).*?(?=Conclusion)") # 如果匹配不到内容就返回原文,避免空值 ifelse(is.na(matched), text, matched) }
2. 将函数应用到整个语料库
用tm_map结合content_transformer把自定义函数应用到每一条语料:
corp <- tm_map(corp, content_transformer(trim_text_by_keywords))
补充说明
- 如果你的文档里关键词存在大小写变体(比如小写
disclosure、全大写CONCLUSION),可以在str_extract里添加regex(, ignore_case = TRUE)参数,调整后的匹配语句为:matched <- str_extract(text, regex("(?s)(?<=Disclosure).*?(?=Conclusion)", ignore_case = TRUE)) - 如果你需要保留
Disclosure和Conclusion两个关键词本身,只需要调整正则的位置匹配规则即可,修改匹配语句为:matched <- str_extract(text, "(?s)Disclosure.*?Conclusion")
内容的提问来源于stack exchange,提问作者Fredyonge
相关产品推荐
相关产品推荐

