我有一个思路,总结出城乡居民、城镇职工、机关事业单位等三类养老保险涉及的所有指标名称,然后批量匹配指标数值,不过这么干只能僵硬地匹配指标名称,如下面的栗子,涉及上下文的都没法提取出来。
data <- data.frame(
result = c(
"养老保险参保人数12345人,其中:城乡居民养老保险参保人数97587人。",
"为1043名企业退休人员发放城镇基本养老待遇3685.60万元;为2322名机关事业退休人员发放养老金27632万元(其中统筹内基金支出18485万元,统筹外支出9147万元)",
"城乡居民养老保险参保人数9.05万人,其中领取待遇人员6.17万人",
"2023年陵水县企业基本养老保险费征缴52986.03万元,同比增长22.12%,发放养老待遇47824.21万元,同比增长6.67%;机关养老保险费征缴19591.03万元,同比增长16.07%,发放养老待遇31774.21万元,同比增长14.42%;",
"2023年牡丹区企业职工基本养老保险基金收入181724万元,支出182819万元。城乡居民基本养老保险基金收入39249万元,支出35593万元,机关事业单位养老保险基金收入84901万元,支出84799万元。"
)
)
patterns <-
c(
"养老保险参保人数(\\d+\\.?\\d*)(人|万人|万元|亿元)[,;.]{0,1}",
"城乡居民养老保险参保人数(\\d+\\.?\\d*)(人|万人|万元|亿元)[,;.]{0,1}"
)
# 提取指标的函数
extract_indicators <- function(text, patterns) {
sapply(patterns, function(pattern) {
match <- regexpr(pattern, text)
regmatches(text, match)[1]
})
}
# 提取各行的指标
indicators <-
lapply(data$result, extract_indicators, patterns = patterns)
# 将嵌套列表转换为数据框
indicators_df <- do.call(rbind, lapply(indicators, function(row) {
data.frame(matrix(unlist(row), nrow = 1, byrow = TRUE))
}))
# 合并原始数据框和提取的指标数据框
data <- cbind(data, indicators_df)
print(data)