从R中的文本文件中提取元素
我试图进入R中的文本分析。我有一个具有以下结构的文本文件从R中的文本文件中提取元素,r,tidyr,tidyverse,stringr,tidytext,R,Tidyr,Tidyverse,Stringr,Tidytext,我试图进入R中的文本分析。我有一个具有以下结构的文本文件 HD A YEAR Oxxxx WC 244 words PD 28 February 2018 SN XYZ SC hydt LA English CY Copyright 2018 LP Rio de Janeiro, Feb 28 TD With recreational cannabis only months away from legalization in Canada, companies
HD A YEAR Oxxxx
WC 244 words
PD 28 February 2018
SN XYZ
SC hydt
LA English
CY Copyright 2018
LP Rio de Janeiro, Feb 28
TD
With recreational cannabis only months away from legalization in Canada, companies are racing to
prepare for the new market. For many, this means partnerships, supply agreements,
我想提取R中的以下元素(PD和TD),并保存到表中
我已经试过了,但是我不能把它弄对
提取PD
library(stringr)
library(tidyverse)
pd <- unlist(str_extract_all(txt, "\\bPD\\b\t[0-9]+?\\s[A-Za-z]+?\\s[0-9]+\\s"))
pd <- str_replace_all(pd, "\\bPD\\b\t", "")
if (length(pd) == 0) {
pd <- as.character(NA)
}
pd <- str_trim(pd)
pd <- as.Date(strptime(pd, format = "%d %B %Y"))
td <- unlist(str_extract_all(txt, "\\bTD\\b[\\t\\s]*?.+?\\bCO\\b"))
td <- str_replace_all(td, "\\bTD\\b[\\t\\s]+?", "")
td <- str_replace_all(td, "\\bCO\\b", "")
td <- str_replace_all(td, "\\s+", " ")
if (length(td) == 0) {
td <- as.character(NA)
任何帮助都将不胜感激。谢谢你[我不得不在你的数据集末尾添加几个字符,我从你的正则表达式推断出:
txt <- "HD A YEAR Oxxxx
WC 244 words
PD 28 February 2018
SN XYZ
SC hydt
LA English
CY Copyright 2018
LP Rio de Janeiro, Feb 28
TD
With recreational cannabis only months away from legalization in Canada, companies are racing to
prepare for the new market. For many, this means partnerships, supply agreements,
CO ...further stuff"
也许更短的正则表达式更好?
但是,我建议您只捕获所需的细粒度输入格式的特征。例如,我不会通过正则表达式检查日期格式。只需搜索“^PD.*”
,然后让R尝试解析结果。如果不匹配,它仍会抱怨
要筛选以多个空格开头的文本块,如TD标记后的文本块,可以使用多行=
选项使用^
匹配每一行开头(不仅仅是第一行)。例如
str_extract_all(txt, regex("^TD\\s+(^\\s{3}.*\\n)+", multiline = TRUE))
(请注意,正则表达式类\s
包含\n
,因此在匹配TD
行后,我不需要显式指定该类)
如果字段丢失,请小心
最后,如果输入中有一个TD或PD字段丢失,您当前的方法可能会为文本指定错误的日期!使用
for
循环与readLines
组合,而不是正则表达式匹配,可能会有助于此:[我不得不在从正则表达式推断出的数据集末尾添加几个字符:
txt <- "HD A YEAR Oxxxx
WC 244 words
PD 28 February 2018
SN XYZ
SC hydt
LA English
CY Copyright 2018
LP Rio de Janeiro, Feb 28
TD
With recreational cannabis only months away from legalization in Canada, companies are racing to
prepare for the new market. For many, this means partnerships, supply agreements,
CO ...further stuff"
也许更短的正则表达式更好?
但是,我建议您只捕获所需的细粒度输入格式的特征。例如,我不会通过正则表达式检查日期格式。只需搜索“^PD.*”
,然后让R尝试解析结果。如果不匹配,它仍会抱怨
要筛选以多个空格开头的文本块,如TD标记后的文本块,可以使用多行=
选项使用^
匹配每一行开头(不仅仅是第一行)。例如
str_extract_all(txt, regex("^TD\\s+(^\\s{3}.*\\n)+", multiline = TRUE))
(请注意,正则表达式类\s
包含\n
,因此在匹配TD
行后,我不需要显式指定该类)
如果字段丢失,请小心
最后,如果输入中有一个TD或PD字段丢失,您当前的方法可能会为文本指定错误的日期!使用
for
循环与readLines
相结合,而不是正则表达式匹配,可能会有助于实现此目的:Hi@akraf-谢谢您的帮助。但是,我无法获得所需的结果。是不是e有一种方法可以将我的工作R脚本发送给您查看。谢谢您hi@akraf-谢谢您的帮助。但是,我无法获得所需的结果。有没有方法可以将我的工作R脚本发送给您查看。谢谢