引言

Beginner’s Guide to Data Extraction with LangExtract and LLMs

你知道吗?大部分有价值的信息仍存在于非结构化文本中。例如研究论文、临床病历、财务报告等。从这些文本中提取可靠的结构化信息一直是一项挑战。LangExtract 是谷歌推出的开源 Python 库,它利用大语言模型(LLMs)解决了这一问题。你只需通过简单提示词和几个示例定义要提取的内容,它就会借助大语言模型(如谷歌 Gemini、OpenAI 模型或本地模型)从任意长度的文档中提取目标信息。它的另一大优势是支持超长文档(通过分块和多轮处理)以及结果的交互式可视化。让我们更详细地探索这个库。

1. 安装与环境配置

要在本地安装 LangExtract,首先需确保已安装 Python 3.10 及以上版本。该库已发布至 PyPI,在终端或虚拟环境中运行以下命令即可安装:

plaintext

pip install langextract

若需隔离环境,可先创建并激活虚拟环境:

plaintext

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

此外还有从源码安装和使用 Docker 的方式,你可点击此处查看详情。

2. 配置 API 密钥(适用于云模型)

LangExtract 本身是免费开源的,但如果使用云托管大语言模型(如谷歌 Gemini 或 OpenAI GPT 模型),则必须提供 API 密钥。你可以设置 LANGEXTRACT_API_KEY 环境变量,或在工作目录的 .env 文件中存储该密钥。例如:

plaintext

export LANGEXTRACT_API_KEY="你的 API 密钥"

或在 .env 文件中添加:

plaintext

cat >> .env << 'EOF'
LANGEXTRACT_API_KEY=你的 API 密钥
EOF
echo '.env' >> .gitignore

通过 Ollama 或其他本地后端运行的设备端大语言模型无需 API 密钥。若要启用 OpenAI 模型,需运行 pip install langextract[openai],设置 OPENAI_API_KEY 并指定 OpenAI 的 model_id。面向企业用户的 Vertex AI 支持服务账号认证。

3. 定义提取任务

LangExtract 的使用逻辑是由你明确提取目标。你需要编写清晰的提示词描述,并提供一个或多个 ExampleData 标注,展示在示例文本上的正确提取结果。例如,要从文学语句中提取人物、情感和关系,可编写如下代码:

plaintext

import langextract as lx

prompt = """
  按出现顺序提取人物、情感和关系。
  提取内容使用原文,不得释义或出现实体重叠。
  为每个实体添加有意义的属性以补充上下文。"""
examples = [
    lx.data.ExampleData(
        text="罗密欧:轻声!那边窗子里亮起来的是什么光?……",
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="罗密欧",
                attributes={"emotional_state": "好奇"}
            ),
            lx.data.Extraction(
                extraction_class="emotion",
                extraction_text="轻声!",
                attributes={"feeling": "柔和的惊叹"}
            )
        ]
    )
]

这些示例(源自 LangExtract 的官方文档)会明确告知模型期望的结构化输出格式。你可以为特定领域创建类似示例。

4. 执行提取操作

定义好提示词和示例后,只需调用 lx.extract() 函数即可。核心参数如下:

  • text_or_documents:输入文本、文本列表,甚至是 URL 字符串(LangExtract 可从古腾堡计划等 URL 中获取并处理文本)。
  • prompt_description:提取指令(字符串格式)。
  • examples:展示目标输出的 ExampleData 列表。
  • model_id:使用的大语言模型标识符(例如谷歌 Gemini Flash 为 "gemini-2.5-flash",Ollama 模型如 "gemma2:2b",OpenAI 模型如 "gpt-4o")。

其他可选参数包括 extraction_passes(为超长文本提高召回率而重复提取)、max_workers(分块并行处理)、fence_outputuse_schema_constraints 等。

示例代码如下:

plaintext

input_text = '''朱丽叶:哦,罗密欧,罗密欧!你为什么偏偏是罗密欧呢?
否认你的父亲,抛弃你的姓名吧;
要是你不愿意,只要你宣誓做我的爱人,
我就不再姓凯普莱特了。
罗密欧:我还要听下去吗?还是现在就对她说话?
朱丽叶:只有你的姓名才是我的仇敌;
你即使不姓蒙太古,仍然是你自己。
姓名算什么?我们所称的玫瑰,
换个名字也同样芬芳。'''

result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash"
)

该函数会将提示词、示例和文本发送至选定的大语言模型,并返回一个 Result 对象。LangExtract 会自动将超长文本分词为块、批量并行调用模型,并合并输出结果。

5. 输出处理与可视化

lx.extract() 的输出是一个包含提取实体及属性的 Python 对象(通常命名为 result)。你可以通过编程方式查看该对象,或保存供后续使用。LangExtract 还提供了结果保存辅助函数:例如将结果写入 JSONL(JSON 行)文件(每行一个文档),并生成交互式 HTML 报告。示例代码如下:

plaintext

lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")
html = lx.visualize("extraction_results.jsonl")
with open("viz.html", "w") as f:
    f.write(html if isinstance(html, str) else html.data)

上述代码会生成 extraction_results.jsonl 文件和交互式 viz.html 文件。JSONL 格式便于处理大型数据集和后续加工,HTML 文件则会在上下文中高亮显示每个提取片段(按类别彩色编码),方便人工检查,效果如下:

Output and Visualization: Langextract

6. 支持的输入格式

LangExtract 对输入格式兼容性强,可接收以下类型:

  • 纯文本字符串:任何加载到 Python 中的文本(如来自文件或数据库)均可处理。
  • URL:如前文所示,可直接传入 URL(例如古腾堡计划链接),格式为 text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",LangExtract 会下载并提取该文档内容。
  • 文本列表:传入 Python 字符串列表,可一次性处理多个文档。
  • 富文本或 Markdown:由于 LangExtract 基于文本层面工作,若输入 Markdown 或 HTML,需先将其预处理为纯文本(LangExtract 本身不解析 PDF 或图片,需提前提取文本)。

7. 结语

LangExtract 简化了非结构化文本到结构化数据的转换过程。它具备高准确率、清晰的来源映射和简洁的自定义方式,在基于规则的方法难以奏效时表现出色。该工具特别适用于复杂或特定领域的数据提取场景。尽管仍有改进空间,但在 2025 年,LangExtract 已成为提取有依据信息的强大工具。

原文链接:https://www.kdnuggets.com/beginners-guide-to-data-extraction-with-langextract-and-llms

网站页脚示例