使用Python从dbpedia中提取有关编程技能的信息?

时间:2017-03-28 06:18:47

标签: python dbpedia

假设我有一些令牌并且我想知道某个特定令牌是否是编程技能,所以我想与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是否是编程语言的信息。

1 个答案:

答案 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)', ...]