在R中如何识别字符串中混杂的数字并修正OCR生成的错误数值格式
R处理OCR识别数值格式问题的实现方案
核心思路
先通过正则规则统一两种输入的格式,消除原有千分位点和小数分隔点的歧义,再拆分重组得到符合要求的数值串。
实现代码
library(stringr) process_ocr_num <- function(x) { # 将千分位位置的点替换为空格,统一千分位分隔符格式 x <- str_replace_all(x, "\\.(?=\\d+,)", " ") # 将小数位位置的点替换为逗号,统一小数分隔符格式 x <- str_replace_all(x, "\\.(?=\\d{2}( |$))", ",") # 按空格拆分得到所有独立片段 parts <- str_split(x, " +")[[1]] # 两两片段拼接,中间插入千分位点 result <- str_c(parts[c(TRUE, FALSE)], ".", parts[c(FALSE, TRUE)]) return(result) }
测试验证
测试用例1
输入:x1 <- c("9 243,51 233 286,08 18 386.21")
运行:process_ocr_num(x1)
输出:"9.243,51" "233.286,08" "18.386,21"
测试用例2
输入:x2 <- c("9.243,51 233 286,08 18 386.21")
运行:process_ocr_num(x2)
输出:"9.243,51" "233.286,08" "18.386,21"
补充说明
如果你的OCR识别结果存在超过两级的千分位拆分(比如1 234 567,89这类格式),调整后续的分组拼接逻辑即可适配,当前代码完全匹配给出的示例场景。
内容的提问来源于stack exchange,提问作者mic
相关产品推荐
相关产品推荐

