gpt4 book ai didi

sparql - 如何使用 geonames ID 丰富地点

转载 作者:行者123 更新时间:2023-12-02 05:58:50 27 4
gpt4 key购买 nike

我有一个地点列表,我可以用地名中的 ID 来丰富这些地点。由于 geonames 默认情况下嵌入到 WikiData 中,因此我选择使用 WikiData 端点直接通过 SPARQL。

我的工作流程:

  • 我已将 Excel 文件导入 OpenRefine 并创建了一个新项目
  • 在 OpenRefine 中,我创建了图表,然后将其下载为 RDF/XML。这是快照:

      <rdf:Description rdf:about="http://localhost:3333/0">
    <rdfs:label>Aïre</rdfs:label>
    <crm:P1_is_identified_by>5A1CE163-105F-4BAF 8BF9</crm:P1_is_identified_by>
    </rdf:Description>
  • 我已将 RDF 文件导入到本地 graphDB 中,并运行了联合查询:

PREFIX wd: <http://www.wikidata.org/entity/> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
WHERE {?place <http://purl.org/NET/cidoc-crm/core#P1_is_identified_by> ?value;
rdfs:label ?label_geo.
SERVICE <https://query.wikidata.org/sparql> {
?value wdt:P31/wdt:P279* wd:Q515;
rdfs:label ?label;
wdt:P1566 ?id_value.
}
}

limit 10

没有结果。

输出应该是这样的:


|-----------------------|------------------|---------------|
| Oggetto | Place | GeonamesID |
|-----------------------|------------------|---------------|
|5A1CE163-105F-4BAF 8BF9| Aïre |11048419 |
|-----------------------|------------------|---------------|

建议?

非常感谢。

最佳答案

我直接通过客户端解决了问题

这是我的管道:

  1. 我创建了一个包含地名列表的 Excel 工作表
  2. 我构建了一个 Python 脚本,该脚本使用 Excel 工作表中的值作为查询参数,并将输出保存在 .txt 文件中。例如。艾尔,https://www.geonames.org/11048419
import pandas as pd 
import requests
import json
import csv


url = 'http://api.geonames.org/searchJSON?'

#Change df parameters according to excel sheet specification.

df = pd.read_excel('grp.xlsx', sheet_name='Foglio14', usecols="A")

for item in df.place_name:

df.place_name.head()

#Change username params with geonames API username

params ={ 'username': "XXXXXXXX",

'name_equals': item,

'maxRows': "1"}

e = requests.get(url, params=params)

pretty_json = json.loads(e.text)

with open("data14.txt", "a") as myfile:

writer = csv.writer(myfile)

for item in pretty_json["geonames"]:

#print("{}, https://www.geonames.org/{}".format(item["name"], item["geonameId"]))

writer.writerow([item["name"], "https://www.geonames.org/{}".format(item["geonameId"])]) #Write row.

myfile.close()
  • 我已将 .txt 文件的输出复制到 Excel 工作表的 B 列中。
  • 然后我将输出值分成两列。例如
  •     |---------------------|-----------------------------------|
    | ColA | ColB |
    |---------------------|-----------------------------------|
    | Aïre | https://www.geonames.org/11048419 |
    |---------------------|-----------------------------------|

  • 由于地名和获得的结果之间不存在 1:1 对应关系,因此我对值进行了对齐。
    • 在 Excel 工作表中,我创建了一个新的空列 B
    • 在 B 列中,我写下了公式:=IF(ISNA(MATCH(A1;C:C;0));"";INDEX(C:C;MATCH(A1;C:C;0) )) 并且我已经迭代了公式直到列表末尾
    • 然后我创建了一个新的空列 C
    • 在 C 列中,我编写了公式:=IFERROR(INDEX($E:$E;MATCH($B1;$D:$D;0));"") 并且我有迭代公式直到列表末尾
  • 这里是最终结果:

    enter image description here

    关于sparql - 如何使用 geonames ID 丰富地点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169513/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com