2011-09-20 18 views
11

我正在寫一個python腳本從幾個國家和語言的數千篇新聞文章的集合中提取「實體名稱」。使用DBPedia的示例python腳本?

我想利用令人驚歎的DBPedia結構化知識,例如查找「埃及藝術家」的名稱和「加拿大公司」的名稱。

(如果這些信息是SQL的形式,我不會有任何問題。)

我更願意下載內容DBpedia中和離線使用。任何想要做什麼以及如何從python本地查詢它的想法?

回答

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

我希望這給你如何開始的想法。

+0

THX @msalvadores。這適用於DBPedia.org。仍然需要使它在win7機器上本地工作。所以definetely Virtuoso(4store只有linux)。但仍然無法找到一個好的windows平臺安裝教程 – jaz

+0

即使對於Virtuoso,您也會更喜歡使用Linux。如果你想堅持與Virtuoso看看這個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