知识图谱实战(一):数据采集与实体关系抽取(完整代码)
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
从文档/网页里抽"实体和关系",拼成三元组,这是知识图谱的原材料。这篇讲清楚:数据从哪来、怎么把文字变成 (头实体, 关系, 尾实体),给一套完整可运行的抽取代码,并为 《知识图谱(二)Neo4j 构建》/《知识图谱(三)GraphRAG》的图谱构建与调用打底。
前言
上一篇 RAG 系列用向量检索解决"找相似内容",但遇到"任正非和华为是什么关系"“华为的产品有哪些"这种精确关系问题,向量检索就力不从心了。知识图谱(Knowledge Graph)是另一种答案:把知识存成"实体—关系—实体"的图结构,用图查询精确回答关系型问题。
完整流程三步:采集数据 → 构建图谱(抽取三元组 + 存进图数据库)→ 调用查询。这篇做第一步:采集与抽取。
一、整体流程(先看地图)
<span leaf="">数据采集(爬虫/公开数据)</span>
知识图谱三要素:实体(Entity)——人、公司、地点等;关系(Relation)——“创始人”“总部位于"等;三元组——(华为, 创始人, 任正非) 一条知识。
二、数据采集(来源与方法)
采集方式取决于数据在哪:
| 数据源
|
方式
|
参考
网页/新闻
|
爬虫(requests + BeautifulSoup)
|
《爬虫实战》
| |
本地文档/Excel
|
直接读取(openpyxl / python-docx)
|
《办公自动化》
| |
公开 API
|
接口直接拉取
|
《爬虫实战》
|
本文为了"开箱即跑”,用一段内置的示例文本演示(真实采集请换成 《爬虫实战》的方法抓取你关心的领域)。
三、环境准备(先装依赖)
<span leaf="">pip install requests beautifulsoup4</span>
四、完整代码:规则式抽取(可运行)
保存为 kg_extract.py:
<span leaf=""><span># kg_extract.py — 从文本抽取三元组,输出 triples.csv(完整可运行)</span></span>
运行验证:python kg_extract.py,期望看到打印 5 条左右三元组(如 ['华为技术有限公司', '总部位于', '深圳']),并生成 triples.csv(三列:head/relation/tail)——采集→抽取链路即通。
五、进阶:LLM 抽取(效果更好,直接可用)
规则式覆盖不了复杂句子,换成让大模型抽——本地 Ollama 或云端 API 都行:
<span leaf=""># kg_extract_llm.py — <span>LLM</span> 抽取三元组(需本地 <span>Ollama</span> 或改 <span>API)</span></span>
运行验证:启动 Ollama(ollama run qwen2.5:7b 先拉模型),运行脚本,期望打印带关系的三元组 JSON,并生成 triples_llm.csv。没装 Ollama 就把 OLLAMA_URL 换成任何 OpenAI 兼容接口。
六、常见坑
| 坑
|
解决
抽取结果重复/实体叫法不一
|
做实体归一化:同义实体映射表(“华为”→“华为技术有限公司”)
| |
规则式漏抽
|
规则覆盖常见句式即可,复杂句子交给 LLM 方式
| |
LLM 输出不是纯 JSON
|
按示例截取 [ 到 ] 再 json.loads;或提示词里加"只输出 JSON”
| |
关系类别混乱
|
固定关系集合(创始人/总部位于/成立时间/生产/…),LLM 提示词里给出可选关系
| |
数据量大抽得慢
|
分段抽取 + 多线程;或用批量接口
|
七、总结
-
一句话:知识图谱 = 三元组集合;三元组 = 采集数据 + 实体关系抽取;
-
这篇产出
triples.csv,正是 《知识图谱(二)Neo4j 构建》 Neo4j 建图的输入——三篇连起来就是完整流程; -
接单角度:企业知识图谱(人事档案、供应链、文档体系)第一步都是"数据抽取成三元组",这套代码是通用起点。
觉得有用点个赞收藏,下一篇《知识图谱(二):Neo4j 构建与导入》见。
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/ai001/post/20260823/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E5%AE%9E%E6%88%98%E4%B8%80%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86%E4%B8%8E%E5%AE%9E%E4%BD%93%E5%85%B3%E7%B3%BB%E6%8A%BD%E5%8F%96%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com