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

无需训练NLP模型,如何从CSV自由文本列提取医学检测值?

无需训练NLP模型的解决方案

完全可以不用训练NLP模型,你的检测记录有固定的格式规律,用正则表达式结合常规数据处理工具就能完成提取和转列操作,下面是具体实现步骤:

核心逻辑

你的每条检测记录都遵循「日期 - [可选分组标识] - 检测名称: 数值」的模式,比如:

  • 01/03/2022 - HMG - Plaques: 65000(带分组标识)
  • 01/05/2022 - Urea: 50.0(无分组标识)

用正则表达式可以精准捕获日期、检测名称和数值,再通过数据透视转成你需要的列格式。

具体实现(以Python Pandas为例)

这是处理CSV最常用的工具,代码如下:

import pandas as pd
import re

# 读取CSV文件,注意分隔符是分号,处理引号包裹的内容
df = pd.read_csv('your_medical_data.csv', sep=';', quotechar='"')

# 定义正则表达式:匹配每个检测项,捕获日期、检测名称、数值
# (?:.*? - )? 用来匹配可选的中间分组(如"HMG - "),兼容不同格式
pattern = r'(\d{2}/\d{2}/\d{4}) - (?:.*? - )?(.*?): (\d+\.?\d*)'

# 遍历每一行,提取所有检测项
extracted_records = []
for _, row in df.iterrows():
    patient_id = row['Patient']
    # 找到所有匹配的检测项
    matches = re.findall(pattern, row['Results'])
    for date, test_name, value in matches:
        extracted_records.append({
            'Patient': patient_id,
            'Date': date,
            test_name: float(value)
        })

# 转换为DataFrame
extracted_df = pd.DataFrame(extracted_records)

# 转成宽格式:每个检测名称作为单独列
# 这里保留每个患者的每一次检测日期记录
wide_format_df = extracted_df.pivot(
    index=['Patient', 'Date'],
    columns=extracted_df.columns.difference(['Patient', 'Date']),
    values=extracted_df.columns.difference(['Patient', 'Date'])
).reset_index()

# 清理列名
wide_format_df.columns = ['Patient', 'Date'] + [col for col in wide_format_df.columns if col not in ['Patient', 'Date']]

# 输出结果
print(wide_format_df)

处理重复检测项

如果同一个患者同一检测有多个日期的结果(比如示例中患者1的Plaques有两次记录),上面的代码会保留每一次检测的日期和数值;如果你需要聚合结果(比如取最新日期的数值),可以添加以下步骤:

# 按Patient分组,取最新日期的检测结果
latest_results = extracted_df.sort_values('Date').groupby(['Patient']).last().reset_index()
print(latest_results)

内容的提问来源于stack exchange,提问作者Abner Mácola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:23:20