gpt4 book ai didi

python - 使用 rdflib 和 python 测试 dbpedia 页面的资源类型

转载 作者:行者123 更新时间:2023-12-01 05:20:37 24 4
gpt4 key购买 nike

我正在使用Python中的RDFlib从用户输入的dbpedia页面中提取数据,并且正在努力寻找一种方法来测试该页面是否与一个人有关。我确信这很容易,并且可以使用测试,例如页面是否有生日资源,但这看起来像是一个拼凑。

是否有一种直接的方法可以在不使用 SPARQL 的情况下实现此目的

我的代码类似于

from rdflib import Graph, URIRef
URI_ref = 'http://dbpedia.org/resource/Richard_Nixon'
g = Graph()
g.parse(URI_ref)

for info in g.subject_objects(URIRef("http://dbpedia.org/ontology/birthName"))
print "This person ", str(info[0]), "was named ", str(info[1]), "at birth"

并非所有记录都有birthName,但我仍然想检查这是一个人而不是水果:)

对此不熟悉,因此感谢任何帮助。

最佳答案

如果不使用 SPARQL,您可以找到资源的所有类型断言,并验证 dbpedia:Person(或您认为是人的任何类)是其中之一。代码如下所示。

from rdflib import Graph, URIRef, RDF
uri = URIRef('http://dbpedia.org/resource/Richard_Nixon')
person = URIRef('http://dbpedia.org/ontology/Person')

g = Graph()
g.parse(uri)

for obj in g.objects(subject=uri, predicate=RDF.type):
if obj == person:
print uri, "is a", person

您要求的答案不使用 SPARQL,但对从 DBpedia 获取的数据运行 SPARQL 查询是一种非常干净的方法。以下是该方法的示例代码:

from rdflib import Graph, URIRef

def is_person(uri):
uri = URIRef(uri)
person = URIRef('http://dbpedia.org/ontology/Person')
g = Graph()
g.parse(uri)
resp = g.query(
"ASK {?uri a ?person}",
initBindings={'uri': uri, 'person': person}
)
print uri, "is a person?", resp.askAnswer
return resp.askAnswer


uri = URIRef('http://dbpedia.org/resource/Richard_Nixon')
person = URIRef('http://dbpedia.org/ontology/Person')

nixon = 'http://dbpedia.org/resource/Richard_Nixon'
is_person(nixon)

pear = 'http://dbpedia.org/resource/Pear'
is_person(pear)

关于python - 使用 rdflib 和 python 测试 dbpedia 页面的资源类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468887/

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