如何从句子提取Wikidata已存在的三元组?求Python工具/API
解决方案
Wikidata官方并没有提供直接从自然语言文本中提取已存在三元组的工具,但可以通过组合Wikidata官方API和Python工具库实现你的需求,核心分为实体链接和三元组验证/查询两个步骤:
1. 实体链接:映射文本实体到Wikidata QID
首先需要将文本中的实体(如示例中的"NYU"、"New York")映射到Wikidata对应的唯一标识符(QID),可使用以下官方支持的Python工具:
- pywikibot:Wikidata官方维护的Python库,支持实体搜索与链接。示例代码:
import pywikibot site = pywikibot.Site("wikidata", "wikidata") repo = site.data_repository() # 搜索NYU对应的实体 nyu_item = pywikibot.ItemPage.fromTitle(repo, "New York University") nyu_qid = nyu_item.id # 得到Q15888 # 搜索New York对应的实体 ny_item = pywikibot.ItemPage.fromTitle(repo, "New York City") ny_qid = ny_item.id # 得到Q60 - Wikidata Search API:直接通过HTTP请求调用,返回匹配的实体QID,适合轻量场景。
2. 查询实体间已存在的Wikidata三元组
得到实体QID后,使用Wikidata Query Service (WDQS) 的SPARQL查询接口,验证并提取两个实体间已存在的三元组:
示例SPARQL查询(用于验证NYU和New York之间的关系):
SELECT ?property ?propertyLabel WHERE { wd:Q15888 ?property wd:Q60 . SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } }
通过Python的requests库调用WDQS接口执行查询,即可得到对应的属性(如P159,标签为"headquarters location"),对应文本中的"located at"关系,最终组成符合要求的三元组。
补充说明
- 若需要自动匹配文本中的关系词与Wikidata属性,可先提取文本中的关系短语,再通过Wikidata属性搜索API匹配对应的PID,进一步自动化流程。
- 所有步骤均基于Wikidata官方工具/API完成,无需依赖第三方NLP库。
内容的提问来源于stack exchange,提问作者Daniel Yao
相关产品推荐
相关产品推荐

