2011-09-20 21 views
11

私はいくつかの国や言語のニュース記事のコレクションから「エンティティ名」を抽出するためのPythonスクリプトを作成しています。DBPediaを使用するpythonスクリプトの例?

驚くべきDBPedia構造のknwoledgeを利用したいと思います。たとえば、「エジプトのアーティスト」の名前と「カナダの企業」の名前を検索したいとします。

(これらの情報は、SQL形式にあった場合、私は何の問題もなかっただろう。)

私はDBpediaのコンテンツをダウンロードし、オフラインでそれを使用することを好むだろう。そうするために必要なことのアイデアや、Pythonからローカルにクエリする方法

答えて

14

DBpediaのコンテンツはRDF形式です。ダンプはテクノロジを使用するのに必要なデータ量を処理するために、RDFの大きなデータセットです。here

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

のための私は、これはあなたに開始する方法のアイデアを与える願っています。

+0

のTHX @msalvadoresを。これはDBPedia.orgでうまく動作します。それでもwin7マシンでローカルに動作させる必要があります。だから確かにVirtuoso(4storeのみLinux)。しかし、まだWindowsプラットフォームのための良いインストールのチュートリアルを見つけることができませんでした – jaz

+0

Virtuosoの場合でも、Linuxの方が良いでしょう。あなたがVirtuosoに固執したい場合は、この1つを見てください。http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindowsまた、DBPEDIAをすべてロードするには、まともな強力なマシンが必要です、おそらく商品サーバー。私はまだ十分な評判がないので、 –

+0

はあなたを投票することができません。しかしあなたの答えを正しいものとして選んでください! – jaz

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 
関連する問題