【问题标题】:Example python script that uses DBPedia?使用 DBPedia 的示例 python 脚本?
【发布时间】:2011-11-21 05:08:52
【问题描述】:

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

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

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

我希望下载 DBPedia 内容并离线使用。关于这样做需要什么以及如何从 python 在本地查询它的任何想法?

【问题讨论】:

    标签: python mysql sparql dbpedia information-extraction


    【解决方案1】:

    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" }} ] } }
    >>> 
    

    我希望这能让您了解如何开始。

    【讨论】:

    • 谢谢@msalvadores。这适用于 DBPedia.org。仍然需要使其在win7机器上本地工作。所以definetely Virtuoso(4store only linux)。但是还是找不到好的windows平台安装教程
    • 即使对于 Virtuoso,您也最好使用 Linux。如果您想坚持使用 Virtuoso,请查看这个virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows 还要记住,如果您想加载所有 DBPEDIA,您将需要一台功能强大的机器,也许是商用服务器。
    • 不能投票给你,因为我还没有足够的声望。但是选择你的答案是正确的!
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多