You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何从格式混乱的手写样本标签中提取日期及参数?

批量提取非标准化手写样本标签数据的工具方案

针对你在Google Sheets中存储的、跨50余年多团队制作的非标准化南美古生态样本标签数据,R、Python、Wolfram都能高效实现自动化提取,替代Google Sheets内置函数的局限性,以下是各工具的具体实现方案:

Python 实现

Python的dateutil、re库能灵活处理非标准日期和文本模式,配合gspread可直接读写Google Sheets:

import gspread
from dateutil.parser import parse
import re
from oauth2client.service_account import ServiceAccountCredentials

# 1. 连接Google Sheets(需提前创建服务账号密钥)
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("your_service_key.json", scope)
client = gspread.authorize(creds)

# 2. 读取目标工作表数据
sheet = client.open("样本标签记录表").sheet1
raw_data = sheet.get_all_records()

# 3. 定义标签处理逻辑
def process_label(label_text):
    # 提取日期:自动识别绝大多数非标准格式
    try:
        extracted_date = parse(label_text, fuzzy=True).date()
    except:
        extracted_date = None
    # 提取样本编号(可根据实际标签模式调整正则)
    sample_id_match = re.search(r"Sample[-\s#]*(\d+)", label_text, re.IGNORECASE)
    sample_id = sample_id_match.group(1) if sample_id_match else None
    # 提取研究团队(示例:匹配"Lab XXX"或"Team XXX"模式)
    team_match = re.search(r"(Lab|Team)[-\s]*(\w+)", label_text, re.IGNORECASE)
    team = team_match.group(2) if team_match else None
    return {"提取日期": extracted_date, "样本编号": sample_id, "研究团队": team}

# 4. 批量处理数据
processed_data = []
for row in raw_data:
    processed_row = {**row, **process_label(row["标签列名称"])}
    processed_data.append(processed_row)

# 5. 将处理结果写入新工作表
output_sheet = client.open("样本标签记录表").add_worksheet(title="自动化提取结果", rows=len(processed_data), cols=len(processed_data[0]))
output_sheet.append_rows([list(row.values()) for row in processed_data])

R 实现

R的lubridate包对非标准日期的解析兼容性极强,googlesheets4可无缝对接Google Sheets:

library(googlesheets4)
library(lubridate)
library(stringr)

# 1. 授权连接Google Sheets
gs4_auth()

# 2. 读取数据(替换为你的工作表ID或URL)
raw_data <- read_sheet("https://docs.google.com/spreadsheets/d/your_sheet_id/edit")

# 3. 定义标签处理函数
process_label <- function(label) {
    # 提取日期:支持多格式模糊匹配
    extracted_date <- parse_date_time(label, orders = c("ymd", "dmy", "mdy", "Y", "my"), fuzzy = TRUE)
    extracted_date <- as.Date(extracted_date)
    # 提取样本编号
    sample_id <- str_extract(label, regex("sample[\\s#-]*\\d+", ignore_case = TRUE))
    sample_id <- str_remove_all(sample_id, regex("sample[\\s#-]*", ignore_case = TRUE))
    # 提取研究团队
    team <- str_extract(label, regex("(lab|team)[\\s-]*\\w+", ignore_case = TRUE))
    team <- str_remove_all(team, regex("(lab|team)[\\s-]*", ignore_case = TRUE))
    return(tibble(提取日期 = extracted_date, 样本编号 = sample_id, 研究团队 = team))
}

# 4. 批量处理并合并结果
processed_data <- raw_data %>%
    bind_cols(pmap_dfr(list(raw_data$标签列名称), process_label))

# 5. 写入结果到新工作表
sheet_write(processed_data, ss = "样本标签记录表", sheet = "自动化提取结果")

Wolfram 实现

Wolfram语言的DateParse能自动识别超100种日期格式,且内置Google Sheets交互能力:

(* 1. 连接目标Google Sheets *)
sheet = CloudObject["https://docs.google.com/spreadsheets/d/your_sheet_id/edit"];
rawData = Import[sheet, "Data"];

(* 2. 定义标签处理函数 *)
ProcessLabel[label_String] := Module[{date, sampleId, team},
    (* 提取日期:忽略大小写,兼容非标准格式 *)
    date = DateParse[label, IgnoreCase -> True, Missing -> None];
    date = If[DateObjectQ[date], DateObject[date, "Date"], None];
    (* 提取样本编号 *)
    sampleId = First@StringCases[label, "Sample" ~~ Whitespace ~~ NumberString];
    sampleId = StringReplace[sampleId, "Sample" ~~ Whitespace -> ""];
    (* 提取研究团队 *)
    team = First@StringCases[label, ("Lab" | "Team") ~~ Whitespace ~~ WordCharacter..];
    team = StringReplace[team, ("Lab" | "Team") ~~ Whitespace -> ""];
    {date, sampleId, team}
]

(* 3. 批量处理数据 *)
header = First[rawData] ~Join~ {"提取日期", "样本编号", "研究团队"};
processedRows = Map[Join[#, ProcessLabel[#[[2]]]] &, Rest[rawData]];
processedData = Prepend[processedRows, header];

(* 4. 写入结果到新工作表 *)
Export[sheet, processedData, "Data", Sheet -> "自动化提取结果"]

核心优势

  • 适配性强:可灵活调整正则或解析规则,覆盖50年来的各种非标准标签格式
  • 效率高:一次运行即可完成数千条数据的批量处理
  • 可复用:处理逻辑固化后,新增数据只需重新运行脚本即可
  • 风险低:全程自动化避免手动操作对样本数据的误修改

内容的提问来源于stack exchange,提问作者Emma Nasipova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:35:35