GEOZ

LangExtract库从非结构化文本提取结构化信息2026指南

2026/2/9
LangExtract库从非结构化文本提取结构化信息2026指南

AIAI Summary (BLUF)

LangExtract 是一个Python库,借助大语言模型(LLM),依据用户指令从非结构化文本(如临床记录)中提取并定位结构化信息,支持长文档处理与交互式可视化。

引言

LangExtract 是一个 Python 库,它利用大语言模型(LLM)根据用户定义的指令,从非结构化文本文档中提取结构化信息。它能处理诸如临床记录或报告等材料,识别并组织关键细节,同时确保提取的数据与源文本相对应。

为何选择 LangExtract?

LangExtract 旨在解决从复杂文档中提取信息的核心挑战,提供一套独特的功能:

快速入门

只需几行代码即可提取结构化信息。

1. 定义您的提取任务

首先,创建一个清晰描述您要提取内容的提示。然后,提供一个高质量的示例来引导模型。

import langextract as lx
import textwrap

# 1. 定义提示和提取规则
prompt = textwrap.dedent("""\
    Extract characters, emotions, and relationships in order of appearance.
    Use exact text for extractions. Do not paraphrase or overlap entities.
    Provide meaningful attributes for each entity to add context.""")

# 2. 提供一个高质量的示例来引导模型
examples = [
    lx.data.ExampleData(
        text="ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun.",
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="ROMEO",
                attributes={"emotional_state": "wonder"}
            ),
            lx.data.Extraction(
                extraction_class="emotion",
                extraction_text="But soft!",
                attributes={"feeling": "gentle awe"}
            ),
            lx.data.Extraction(
                extraction_class="relationship",
                extraction_text="Juliet is the sun",
                attributes={"type": "metaphor"}
            ),
        ]
    )
]

2. 运行提取

将您的输入文本和提示材料提供给 lx.extract 函数。

# 要处理的输入文本
input_text = "Lady Juliet gazed longingly at the stars, her heart aching for Romeo"

# 运行提取
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash",
)

3. 可视化结果

提取结果可以保存到 .jsonl 文件(一种用于处理语言模型数据的流行格式)。然后,LangExtract 可以从该文件生成交互式 HTML 可视化,以便在上下文中审查实体。

# 将结果保存到 JSONL 文件
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")

# 从文件生成可视化
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
    if hasattr(html_content, 'data'):
        f.write(html_content.data)  # 适用于 Jupyter/Colab
    else:
        f.write(html_content)

这将创建一个动画交互式 HTML 文件。

扩展到更长文档

对于更大的文本,您可以直接从 URL 处理整个文档,并利用并行处理和增强的敏感性:

# 直接从古登堡计划处理《罗密欧与朱丽叶》
result = lx.extract(
    text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash",
    extraction_passes=3,    # 通过多轮提取提高召回率
    max_workers=20,         # 并行处理以提高速度
    max_char_buffer=1000    # 更小的上下文以获得更好的准确性
)

这种方法可以从完整的小说中提取数百个实体,同时保持高准确性。交互式可视化可以无缝处理大型结果集,便于从输出 JSONL 文件中探索数百个实体。请参阅完整的《罗密欧与朱丽叶》提取示例 → 以获取详细结果和性能分析。

安装

从 PyPI 安装

pip install langextract

推荐大多数用户使用。对于隔离环境,请考虑使用虚拟环境:

python -m venv langextract_env
source langextract_env/bin/activate  # Windows 系统: langextract_env\Scripts\activate
pip install langextract

从源码安装

LangExtract 使用现代的 Python 打包方式,通过 pyproject.toml 进行依赖管理:

git clone https://github.com/google/langextract.git
cd langextract

# 基本安装:
pip install -e .

# 开发安装(包含代码检查工具):
pip install -e ".[dev]"

# 测试安装(包含 pytest):
pip install -e ".[test]"

Docker

docker build -t langextract .
docker run --rm -e LANGEXTRACT_API_KEY="your-api-key" langextract python your_script.py

API 密钥设置(用于云端模型)

当使用 LangExtract 与云端托管模型(如 Gemini 或 OpenAI)时,您需要设置 API 密钥。设备端模型不需要 API 密钥。对于使用本地 LLM 的开发者,LangExtract 提供了对 Ollama 的内置支持,并且可以通过更新推理端点扩展到其他第三方 API。

API 密钥来源

从以下位置获取 API 密钥:

  • AI Studio:用于 Gemini 模型
  • Vertex AI:用于企业用途
  • OpenAI Platform:用于 OpenAI 模型

在环境中设置 API 密钥

选项 1:环境变量

export LANGEXTRACT_API_KEY="your-api-key-here"

选项 2:.env 文件(推荐)

将您的 API 密钥添加到 .env 文件:

# 将 API 密钥添加到 .env 文件
cat >> .env << 'EOF'
LANGEXTRACT_API_KEY=your-api-key-here
EOF

# 确保 API 密钥安全
echo '.env' >> .gitignore

在您的 Python 代码中:

import langextract as lx

result = lx.extract(
    text_or_documents=input_text,
    prompt_description="Extract information...",
    examples=[...],
    model_id="gemini-2.5-flash"
)

选项 3:直接提供 API 密钥(不推荐用于生产环境)

您也可以在代码中直接提供 API 密钥,但这不推荐用于生产环境:

result = lx.extract(
    text_or_documents=input_text,
    prompt_description="Extract information...",
    examples=[...],
    model_id="gemini-2.5-flash",
    api_key="your-api-key-here"  # 仅用于测试/开发
)

选项 4:Vertex AI(服务账号)

使用 Vertex AI 通过服务账号进行身份验证:

result = lx.extract(
    text_or_documents=input_text,
    prompt_description="Extract information...",
    examples=[...],
    model_id="gemini-2.5-flash",
    language_model_params={
        "vertexai": True,
        "project": "your-project-id",
        "location": "global"  # 或区域端点
    }
)

添加自定义模型提供商

LangExtract 通过轻量级插件系统支持自定义 LLM 提供商。您可以在不更改核心代码的情况下添加对新模型的支持。

  • 独立于核心库添加新模型支持
  • 将您的提供商作为独立的 Python 包分发
  • 保持自定义依赖隔离
  • 通过基于优先级的解析覆盖或扩展内置提供商

请参阅 提供商系统文档 中的详细指南,了解如何:

  • 使用 @registry.register(...) 注册提供商
  • 发布一个用于发现的入口点
  • 可选地通过 get_schema_class() 提供模式以支持结构化输出
  • 通过 create_model(...) 与工厂集成

使用 OpenAI 模型

LangExtract 支持 OpenAI 模型(需要可选依赖:pip install langextract[openai]):

import langextract as lx

result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gpt-4o",  # 自动选择 OpenAI 提供商
    api_key=os.environ.get('OPENAI_API_KEY'),
    fence_output=True,
    use_schema_constraints=False
)

使用本地 LLM(通过 Ollama)

LangExtract 支持使用 Ollama 进行本地推理,允许您在没有 API 密钥的情况下运行模型:

import langextract as lx

result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemma2:2b",  # 自动选择 Ollama 提供商
    model_url="http://localhost:11434",
    fence_output=False,
    use_schema_constraints=False
)

更多示例

LangExtract 的实际应用示例:

《罗密欧与朱丽叶》全文提取

LangExtract 可以直接从 URL 处理完整的文档。此示例演示了从古登堡计划的《罗密欧与朱丽叶》全文(147,843 字符)中提取信息,展示了并行处理、顺序提取轮次以及针对长文档处理的性能优化。

药物信息提取

LangExtract 擅长从临床文本中提取结构化医疗信息。这些示例演示了基本的实体识别(药物名称、剂量、给药途径)和关系提取(将药物与其属性关联),展示了 LangExtract 在医疗保健应用中的有效性。

放射学报告结构化:RadExtract

探索 RadExtract,这是一个在 HuggingFace Spaces 上的实时交互式演示,展示了 LangExtract 如何自动构建放射

Roger深圳
本文由 Roger 审核,最后更新于 2026年7月2日
联系编辑 →
← 返回文章列表
分享到:微博

版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。

文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。

若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。