GEOZ

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

2026/2/9
LangExtract库从非结构化文本提取结构化信息2026指南
LangExtract is a Python library that leverages Large Language Models (LLMs) to extract structured information from unstructured text documents through user-defined instructions and few-shot examples. It features precise source grounding, reliable structured outputs, optimized long document processing, interactive visualization, and flexible LLM support across cloud and local models. LangExtract adapts to various domains without requiring model fine-tuning, making it suitable for applications ranging from literary analysis to clinical data extraction. LangExtract是一个基于大型语言模型(LLM)的Python库,通过用户定义的指令和少量示例从非结构化文本中提取结构化信息。它具有精确的源文本定位、可靠的结构化输出、优化的长文档处理、交互式可视化以及灵活的LLM支持(涵盖云端和本地模型)。LangExtract无需模型微调即可适应不同领域,适用于从文学分析到临床数据提取等多种应用场景。

引言

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 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。

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