使用LangExtract进行医疗数据提取

介绍

医疗数据中,存在很多自然语言的数据,例如出入院记录、手术记录、疾病既往史等信息,大多数是由医生书写,想要利用上这部分用于后续的科研存在很大的困难,需要我们对文本进行NLP结构化处理。 LangExtract是由谷歌开源的python库,根据自定义指令将大量非结构化文本处理为结构化信息,兼顾灵活性与可追溯性。

示例

下面我们使用一个例子来快速的了解LangExtract的使用

  1. 安装langextract

    pip install langextract

  2. 编写简单的脚本

ini 复制代码
import langextract as lx
import textwrap
import json
import os
 
# 1. 定义简洁的提示语
prompt = textwrap.dedent("""
根据提供的既往史文本,提取疾病名称、病程信息。
疾病名称:提取文本中的疾病名称
病程:提取文本中关于药物或治疗的信息
提取时需使用原文中的确切文字,不得改写,且实体之间不得重叠。
为每个实体提供有意义的属性,以增加上下文信息。
""")
 
# 2. 提供高质量的示例来指导模型
examples = [
    lx.data.ExampleData(
        text=(
            """既往有"高血压"病史10余年,口服"苯磺酸左氨氯地平片1#qd",血压控制尚可。既往有"糖尿病"病史10余年,口服"二甲双胍缓释片1#qd"。既往有"抑郁症"病史10余年,口服"舍曲林1#qd"。"""
        ),
        extractions=[
            lx.data.Extraction(
                extraction_class="既往史",
                extraction_text="既往有"高血压"病史10余年,口服"苯磺酸左氨氯地平片1#qd",血压控制尚可。",
                attributes={
                    "疾病名称": "高血压", 
                    "病程":"口服"苯磺酸左氨氯地平片1#qd""
                },
            ),
            lx.data.Extraction(
                extraction_class="既往史",
                extraction_text="既往有"糖尿病"病史10余年,口服"二甲双胍缓释片1#qd"。",
                attributes={
                    "疾病名称": "糖尿病", 
                    "病程":"口服"二甲双胍缓释片1#qd"""
                },
            ),
            lx.data.Extraction(
                extraction_class="既往史",
                extraction_text="既往有"抑郁症"病史10余年,口服"舍曲林1#qd"。",
                attributes={
                    "疾病名称": "抑郁症", 
                    "病程":"口服"舍曲林1#qd""
                },
            ),
        ],
    )
]
 
# 3. 在输入文本上运行提取
input_text = (
    "糖尿病病史10余年,门冬胰岛素针早10u晚10u皮下注射;高血压病史8年,口服"北京零号"1片1/日,自诉血压控制可;"类风湿性关节炎"病史8年,口服强的松片1片1/日,自诉病情平稳。"
)
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="", # ollama中的模型名称
    model_url="http://127.0.0.1:11434", # ollama接口地址
)
print('--> 结果', result.extractions)

# 4. 保存提取后的信息
output_json = os.path.abspath("extraction_results.json")
manual_data = {
    "extractions": [
        {
            "extraction_class": ext.extraction_class,
            "extraction_text": ext.extraction_text,
            "attributes": ext.attributes
        }
        for ext in result.extractions
    ]
}
with open(output_json, "w", encoding="utf-8") as f:
    json.dump(manual_data, f, ensure_ascii=False)
    f.write("\n")
print(f"✅ 提取完成!结果已保存至: {output_json}")
  1. 查看提取结果
json 复制代码
{
    "extractions": [{
        "extraction_class": "既往史",
        "extraction_text": "糖尿病病史10余年,门冬胰岛素针早10u晚10u皮下注射;",
        "attributes": {
            "疾病名称": "糖尿病",
            "病程": "门冬胰岛素针早10u晚10u皮下注射"
        }
    }, {
        "extraction_class": "既往史",
        "extraction_text": "高血压病史8年,口服"北京零号"1片1/日,自诉血压控制可;",
        "attributes": {
            "疾病名称": "高血压",
            "病程": "口服"北京零号"1片1/日"
        }
    }, {
        "extraction_class": "既往史",
        "extraction_text": ""类风湿性关节炎"病史8年,口服强的松片1片1/日,自诉病情平稳。",
        "attributes": {
            "疾病名称": "类风湿性关节炎",
            "病程": "口服强的松片1片1/日"
        }
    }]
}
  1. 使用qwen的api作为llm进行提取

上面的脚本使用的ollama作为llm接口,如果要使用qwen的api接口,可以选择下面的配置方式

ini 复制代码
from langextract.providers.openai import OpenAILanguageModel
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    fence_output=True,
    use_schema_constraints=False,
    model = OpenAILanguageModel(
        model_id='qwen-plus', # 模型名称
        base_url='https://dashscope.aliyuncs.com/compatible-mode/v1', # 接口地址
        api_key='' # 模型密钥
    )
)

总结

langextract的配置非常简单,包含prompt、examples、text_or_documents以及llm的配置即可,能够很方便的指导llm按照指定的要求来提取文本数据,形成标准的结构化数据。

相关推荐
Georgeviewer4 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue4 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006345 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技5 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics6 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1236 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术6 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat6 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC6 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow
触底反弹7 小时前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试