我在ndjson文件中有一个大约300000个wikidata ID(例如Q1347065、Q731635等)的列表,如下所示
{"Q1347065": ""}
{"Q731635": ""}
{"Q191789": ""} ... etc
我希望得到每个id的标签,并形成键值字典,例如
{"Q1347065":"epiglottitis", "Q731635":"Mount Vernon", ...}
等
在ID列表变得如此庞大之前,我使用的是Wikidata python库(https://pypi.org/project/Wikidata/)
from wikidata.client import Client
import ndjson
client = Client()
with open("claims.ndjson") as f, open('claims_to_strings.json', 'w') as out:
claims = ndjson.load(f)
l = {}
for d in claims:
l.update(d)
for key in l:
v = client.get(key)
l[key] = str(v.label)
json.dumps(l, out)
但速度太慢(1000个ID大约需要15个小时)。有没有比我所做的更快的方法来实现这一点
在回答之前:我不知道你说的
json.dumps(r, out)
是什么意思;我假设你想要json.dump(l, out)
我的答案是使用以下SPARQL查询Wikidata Query Service:
用于同时询问多个标签
这大大加快了执行时间,因为瓶颈是连接的数量,使用这种方法id->;标签映射完全在服务器端完成
我猜您无法对所有300.000个项目进行单一查询,但您可以轻松找到受支持的最大可接受id数,并根据该数拆分原始id列表
相关问题 更多 >
编程相关推荐