🎯 LangExtract:Google 出品 36k Stars,用 LLM 从非结构化文本中提取结构化数据,精确到字符位置
项目地址:https://github.com/google/langextract | ⭐ 36,478 Stars | 🛠 Python | 📜 Apache-2.0
老实说,搞 NLP 的谁没被「从文本里抽结构化数据」这事恶心过?正则写到怀疑人生,规则引擎改到想吐,Fine-tune 一个 BERT 模型花了三天结果换个领域又废了。Google 刚开源的 LangExtract 直接告诉你:别折腾了,让 LLM 来干。
这玩意儿解决了什么问题?
一句话:你把非结构化文本扔进去,给几个例子,它给你吐出精确到字符位置的 JSON 结构化数据。
核心能力:
- Source Grounding — 每个提取结果都映射到原文的精确字符位置,不是瞎编的。你点一下就能看到原文上下文,方便验证
- Few-shot 驱动 — 不用训练模型,给 2-3 个高质量例子它就懂了
- 长文档优化 — 自动分块 + 并行处理 + 多轮提取,完整处理一本《罗密欧与朱丽叶》不在话下
- 可视化一把梭 — 一行代码生成交互式 HTML 报告,提取结果在原文中高亮显示
- 多模型支持 — Gemini、GPT、本地 Ollama(gemma2:2b 都能用)
上手:5 行代码跑起来
pip install langextract
设置 API key(用 Gemini 的话去 AI Studio 搞一个免费的):
export LANGEXTRACT_API_KEY="your-api-key-here"
然后写 5 行代码:
import langextract as lx
result = lx.extract(
text_or_documents="Lady Juliet gazed longingly at the stars, her heart aching for Romeo",
prompt_description="Extract characters and emotions from the text",
examples=[lx.data.ExampleData(
text="ROMEO. But soft! What light through yonder window breaks?",
extractions=[
lx.data.Extraction(extraction_class="character", extraction_text="ROMEO"),
lx.data.Extraction(extraction_class="emotion", extraction_text="But soft!"),
]
)],
model_id="gemini-2.5-flash",
)
看结果:
for e in result.extractions:
print(f" {e.extraction_class}: '{e.extraction_text}' @ {e.char_interval}")
# character: 'Lady Juliet' @ [0:12]
# emotion: 'longingly' @ [18:27]
每个结果都带着 char_interval,精确定位到原文的哪个字符区间。想只看有原文定位的结果?一行过滤:
grounded = [e for e in result.extractions if e.char_interval]
骚操作:整本小说提取 + 可视化
不用分块写脚本,LangExtract 内置了长文档并行处理:
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, # 并行处理
)
然后一键生成交互式 HTML 可视化,所有提取的实体在原文中高亮显示,鼠标移上去就看属性——说实话我第一次看到这效果还是有点惊艳的。
本地也能跑:Ollama 加持
不想用云端 API?Ollama 用户直接用:
result = lx.extract(
text_or_documents=input_text,
prompt_description="Extract information...",
examples=[...],
model_id="gemma2:2b", # 自动识别为 Ollama provider
model_url="http://localhost:11434",
)
先装好 Ollama、拉模型、跑 ollama serve,齐活。
跟传统方案比怎么样?
- 正则表达式 — 维护成本高,改一次崩一片,换领域要重写
- 训练 NER 模型 — 标注 + 训练成本高,换领域得重新标注
- LangExtract — 维护成本低,换领域换 prompt 再加 2 个例子就搞定
最骚的是,它的 Source Grounding 机制让你敢用——不像裸调 LLM 那样一脸懵逼地信它。每个提取值都能追溯回原文,错了你知道是哪错。
要点总结:
pip install langextract就能用,支持 Gemini/GPT/Ollama- Few-shot 示例驱动,换领域只换例子不换代码
- Source Grounding 精确到字符级别,结果可追溯可验证
- 内置长文档并行处理 + 交互式可视化
- 医疗/法律/金融等结构化提取场景直接抄作业