如何在R中将图片识别后的文本转换为data frame?
将Tesseract识别文本转为标准Data Frame
步骤1:拆分识别文本为行向量
识别出的text1是单个长字符,先按换行符拆分成独立行并过滤空行:
library(stringr) # 拆分文本为行 text_lines <- str_split(text1, "\\n")[[1]] # 移除空行 text_lines <- text_lines[text_lines != ""]
步骤2:清洗表头并定义列名
识别出的表头带有干扰符号,需清理并修正识别错误的列名(根据原始表格实际列名调整):
# 提取原始表头行并清理干扰符号 header_raw <- text_lines[1] clean_header <- str_replace_all(header_raw, "[*~_x>]", "") %>% str_squish() %>% str_split(" ") %>% unlist() # 手动修正识别偏差的列名(示例) clean_header <- c("teamID", "yearID", "NumSP", "TGS", "playerID", "G", "GS", "W", "L", "ERA")
步骤3:清洗数据行并转换为矩阵
处理数据行,移除序号、修正识别错误字符,再拆分列:
# 提取数据行(跳过表头行) data_lines <- text_lines[-1] # 清理每行:移除开头序号、替换识别错误字符(示例将ca/ae替换为0,需根据实际调整)、压缩多余空格 clean_data_lines <- str_replace_all(data_lines, "^\\d+ ", "") %>% str_replace_all("ca|ae", "0") %>% str_squish() # 拆分每行成列并转为矩阵 data_matrix <- do.call(rbind, str_split(clean_data_lines, " "))
步骤4:组合为Data Frame并修正数据类型
# 转换为data frame df <- as.data.frame(data_matrix, stringsAsFactors = FALSE) # 设置列名 colnames(df) <- clean_header # 将数值型列转换为对应类型(根据实际列调整) num_cols <- c("yearID", "NumSP", "G", "GS", "W", "L", "ERA") df[num_cols] <- lapply(df[num_cols], as.numeric)
关键提示
- 识别错误的字符(如示例中的
ca、ae)必须对照原始图片确认真实值,这是保证数据准确的核心步骤。 - 若表头识别偏差过大,建议直接手动定义列名,避免清洗误差。
内容的提问来源于stack exchange,提问作者Miguel Angel Acosta Chinchilla
相关产品推荐
相关产品推荐

