13

いくつかの国と言語からの何千ものニュース記事のコレクションから「エンティティ名」を抽出する Python スクリプトを作成しています。

たとえば、「エジプトのアーティスト」の名前と「カナダの会社」の名前を検索するなど、DBPediaの驚くべき構造化された知識を利用したいと思います。

(これらの情報が SQL 形式であれば、何の問題もありませんでした。)

DBPedia コンテンツをダウンロードして、オフラインで使用したいと考えています。そのために必要なものと、python からローカルでクエリを実行する方法についてのアイデアはありますか?

4

2 に答える 2

17

DBpedia コンテンツは RDF 形式です。ダンプはここからダウンロードできます

Dbpedia は RDF の大規模なデータセットであり、Triple Storeテクノロジを使用するために必要な量のデータを処理します。Dbpedia の場合、ネイティブ トリプル ストアのいずれかが必要になります。Virtuoso または 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" }} ] } }
>>> 

これにより、開始方法のアイデアが得られることを願っています。

于 2011-09-20T18:00:29.527 に答える
3

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
于 2016-01-06T07:20:31.593 に答える