使用DBPedia的示例python脚本?

时间:2011-09-20 15:34:23

标签: python mysql sparql dbpedia information-extraction

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

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

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

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

2 个答案:

答案 0 :(得分:14)

DBpedia内容采用RDF格式。转储可以从here

下载

Dbpedia是RDF中的一个大型数据集,用于处理使用Triple Store技术所需的大量数据。对于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" }} ] } }
>>> 

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

答案 1 :(得分:1)

在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