假设我有一些令牌并且我想知道某个特定令牌是否是编程技能,所以我想与dbpedia交叉验证它是否是编程技能。我怎么能这样做?我使用了一些代码:
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?label
WHERE { <http://dbpedia.org/resource/Python_(programming_language)> rdfs:label ?label }
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print(result["label"]["value"])
但是从输出中我得不到Python是否是编程语言的信息。
答案 0 :(得分:1)
在我看来,如果实体Python_(programming_language)
存在,则意味着Python
是一种编程语言。使用您的方法,如果您想检查令牌X
是否是编程,您可以查询页面X_(programming_language)
是否退出。但是对于所有编程语言来说都不是这样。
更好的方法是获取所有编程语言的列表,然后检查此列表中的令牌。您可以使用this query
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
SELECT ?pl ?label
WHERE {
?pl rdfs:label ?label .
?pl rdf:type dbo:ProgrammingLanguage .
FILTER (LANG(?label)='en')
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
results = results["results"]["bindings"]
programming_languages = [item["label"]["value"] for item in results]
print programming_languages
# [u'ALGOL', u'AMOS (programming language)', u'APL (programming language)', ...]