使用DBPedia的Python示例脚本?

13

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

我想利用令人惊叹的DBPedia结构化知识,例如查找“埃及艺术家”的姓名和“加拿大公司”的名称。

(如果这些信息以SQL形式存在,我就不会有问题了。)

我宁愿下载DBPedia内容并在离线状态下使用它。有什么方法可以做到这一点,并如何从Python本地查询它?

2个回答

17

DBpedia的内容以RDF格式呈现,可以从此处下载该数据集。

由于Dbpedia是一个大型的RDF数据集,因此需要使用三元存储技术来处理这些数据。对于Dbpedia,您需要使用其中一个原生的三元存储,我建议您使用Virtuoso4store。个人而言,我更喜欢使用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" }} ] } }
>>> 
我希望这给你一个开始的想法。

感谢@msalvadores。这在DBPedia.org上运行良好。但仍需要在Win7机器上本地运行。所以肯定是Virtuoso(4store仅适用于Linux)。但仍然找不到Windows平台的良好安装教程。 - jaz
即使对于Virtuoso,您最好使用Linux。如果您想坚持使用Virtuoso,请查看此链接http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows。还要记住,如果您想加载所有DBPEDIA,您将需要一台相当强大的机器,可能是一台普通服务器。 - Manuel Salvadores
无法给你点赞,因为我还没有足够的声望。但是我选择了你的答案作为正确答案! - jaz

5

使用requests库,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接