问题 使用DBPedia的示例python脚本?


我正在编写一个python脚本,从几个国家和语言的数千篇新闻文章的集合中提取“实体名称”。

我想利用这个惊人的东西 DBpedia中 结构化的knwoledge,例如,查找“埃及艺术家”的名字和“加拿大公司”的名称。

(如果这些信息是SQL形式的,我就没有问题了。)

我更愿意下载DBPedia内容并离线使用它。有什么需要这样做的想法以及如何从python本地查询?


4034
2017-09-20 15:34


起源



答案:


DBpedia内容采用RDF格式。转储可以从下载 这里

Dbpedia是RDF中的一个大型数据集,用于处理您需要使用的大量数据 三重商店 技术。对于Dbpedia,您将需要一个原生三重商店,我建议您使用其中一个 炫技 要么 4store。我个人更喜欢4store。

一旦你的三重商店设置了Dbpedia。您可以使用 SPARQL 查询Dbpedia RDF三元组。有Python库可以帮助您。 4store和Virtuoso可以使用JSON为您提供结果,因此您可以轻松地使用任何库。

一些简单的urllib脚本就像......

def query(q,epr,f='application/json'):
    try:
        params = {'query': q}
        params = urllib.urlencode(params)
        opener = urllib2.build_opener(urllib2.HTTPHandler)
        request = urllib2.Request(epr+'?'+params)
        request.add_header('Accept', f)
        request.get_method = lambda: 'GET'
        url = opener.open(request)
        return url.read()
    except Exception, e:
        traceback.print_exc(file=sys.stdout)
        raise e 

可以帮助你运行SPARQL ...例如

>>> q1 = """
... select ?birthPlace where {
... <http://dbpedia.org/resource/Claude_Monet> <http://dbpedia.org/property/birthPlace> ?birthPlace .
...  }"""
>>> print query(q1,"http://dbpedia.org/sparql")

{ "head": { "link": [], "vars": ["birthPlace"] },
  "results": { "distinct": false, "ordered": true, "bindings": [
    { "birthPlace": { "type": "literal", "xml:lang": "en", "value": "Paris, France" }} ] } }
>>> 

我希望这可以让你了解如何开始。


14
2017-09-20 18:00



Thx @msalvadores。这适用于DBPedia.org。还需要让它在win7机器上本地工作。所以定义Virtuoso(4store只有linux)。但仍无法找到适合Windows平台的安装教程 - jaz
即使对于Virtuoso,你最好使用Linux。如果你想坚持Virtuoso看看这个 virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows 另外请记住,如果你想加载所有DBPEDIA,你将需要一个体面的强大机器,也许是一个商品服务器。 - Manuel Salvadores
不能投票给你,因为我仍然没有足够的声誉。但选择你的答案是正确的! - jaz


答案:


DBpedia内容采用RDF格式。转储可以从下载 这里

Dbpedia是RDF中的一个大型数据集,用于处理您需要使用的大量数据 三重商店 技术。对于Dbpedia,您将需要一个原生三重商店,我建议您使用其中一个 炫技 要么 4store。我个人更喜欢4store。

一旦你的三重商店设置了Dbpedia。您可以使用 SPARQL 查询Dbpedia RDF三元组。有Python库可以帮助您。 4store和Virtuoso可以使用JSON为您提供结果,因此您可以轻松地使用任何库。

一些简单的urllib脚本就像......

def query(q,epr,f='application/json'):
    try:
        params = {'query': q}
        params = urllib.urlencode(params)
        opener = urllib2.build_opener(urllib2.HTTPHandler)
        request = urllib2.Request(epr+'?'+params)
        request.add_header('Accept', f)
        request.get_method = lambda: 'GET'
        url = opener.open(request)
        return url.read()
    except Exception, e:
        traceback.print_exc(file=sys.stdout)
        raise e 

可以帮助你运行SPARQL ...例如

>>> q1 = """
... select ?birthPlace where {
... <http://dbpedia.org/resource/Claude_Monet> <http://dbpedia.org/property/birthPlace> ?birthPlace .
...  }"""
>>> print query(q1,"http://dbpedia.org/sparql")

{ "head": { "link": [], "vars": ["birthPlace"] },
  "results": { "distinct": false, "ordered": true, "bindings": [
    { "birthPlace": { "type": "literal", "xml:lang": "en", "value": "Paris, France" }} ] } }
>>> 

我希望这可以让你了解如何开始。


14
2017-09-20 18:00



Thx @msalvadores。这适用于DBPedia.org。还需要让它在win7机器上本地工作。所以定义Virtuoso(4store只有linux)。但仍无法找到适合Windows平台的安装教程 - jaz
即使对于Virtuoso,你最好使用Linux。如果你想坚持Virtuoso看看这个 virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows 另外请记住,如果你想加载所有DBPEDIA,你将需要一个体面的强大机器,也许是一个商品服务器。 - Manuel Salvadores
不能投票给你,因为我仍然没有足够的声誉。但选择你的答案是正确的! - jaz


在python3中,使用请求库的答案将如下所示:

def query(q, epr, f='application/json'):
    try:
        params = {'query': q}
        resp = requests.get(epr, params=params, headers={'Accept': f})
        return resp.text
    except Exception as e:
        print(e, file=sys.stdout)
        raise

1
2018-01-06 07:20