AI大模型文本结构化,轻松搞定

August 04, 2025

LangExtract:使用大型语言模型(LLMs)精简文本结构化

LangExtract 是一款尖端的开源 Python 库,可帮助用户以前所未有的准确性和便捷性,从非结构化文本中提取结构化信息。该工具利用大型语言模型(LLMs)的强大功能,能够处理各种文本格式,从临床记录和报告到文学作品,并将关键细节组织成一致、可用的模式。

为何选择 LangExtract?

LangExtract 因其独特的功能集而脱颖而出:

  • 精准的来源溯源:提取的每一条信息都经过精心映射,可追溯到其在原始文本中的确切位置。这使得在源文档中方便地进行验证和可视化高亮显示,确保了可追溯性。
  • 可靠的结构化输出:通过使用少样本(few-shot)示例和受控生成(supported models like Google Gemini),LangExtract 强制执行一致的输出模式,从而获得稳健且可预测的结构化结果。
  • 针对长文档优化:该库通过一种包含文本分块、并行处理和多次提取的有效策略,解决了从大型文本中提取信息的挑战,显著提高了召回率。
  • 交互式可视化:LangExtract 生成自包含的交互式 HTML 文件,可以轻松地可视化和审查数千个已提取的实体及其原始文本上下文。
  • 灵活的 LLM 支持:无论您是偏爱 Gemini 等基于云的 LLMs,还是通过 Ollama 的本地开源模型,LangExtract 都提供了广泛的兼容性,并且可以扩展以支持其他第三方 API。
  • 适应任何领域:只需几个示例即可定义任何领域的提取任务,无需微调模型。

入门指南

安装非常简单,通过 pip 即可完成:

pip install langextract

对于基于云的模型,通常需要设置 API 密钥。LangExtract 支持通过环境变量或 .env 文件来设置 API 密钥,以进行安全管理。选项包括通过 AI Studio 或 Vertex AI 的 Gemini 模型,以及 OpenAI 模型。

基本用法包括使用提示和提供示例来定义您的提取任务:

import langextract as lx
import textwrap

# 定义提取任务
prompt = textwrap.dedent("""
按照出现的顺序提取角色、情感和关系。
使用原文进行提取,请勿释义或重叠实体。
为每个实体提供有意义的属性以增加上下文。"""
)

# 提供指导性示例
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"})
        ]
    )
]

# 输入文本
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",
)

# 保存结果并可视化
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl")
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f: f.write(html_content)

此过程将生成一个交互式 HTML 文件,方便查看和分析提取的实体。

高级功能

LangExtract 在处理长文档方面表现出色,支持直接从 URL(例如 Project Gutenberg)进行处理,并提供 extraction_passesmax_workers 等参数来优化性能和召回率。该库还展示了诸如药物提取RadExtract 等专业应用,后者是可在 Hugging Face Spaces 上使用的、用于放射学报告结构化的演示。

通过其 GitHub 存储库为该项目做出贡献,并探索详细的示例,以了解更高级的用法及其在自然语言处理和数据结构化任务方面的强大功能。

原创文章: 查看原文

分享本文