我正在寫一個python腳本從幾個國家和語言的數千篇新聞文章的集合中提取「實體名稱」。使用DBPedia的示例python腳本?
我想利用令人驚歎的DBPedia結構化知識,例如查找「埃及藝術家」的名稱和「加拿大公司」的名稱。
(如果這些信息是SQL的形式,我不會有任何問題。)
我更願意下載內容DBpedia中和離線使用。任何想要做什麼以及如何從python本地查詢它的想法?
我正在寫一個python腳本從幾個國家和語言的數千篇新聞文章的集合中提取「實體名稱」。使用DBPedia的示例python腳本?
我想利用令人驚歎的DBPedia結構化知識,例如查找「埃及藝術家」的名稱和「加拿大公司」的名稱。
(如果這些信息是SQL的形式,我不會有任何問題。)
我更願意下載內容DBpedia中和離線使用。任何想要做什麼以及如何從python本地查詢它的想法?
DBpedia內容採用RDF格式。可以從here下載轉儲
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" }} ] } }
>>>
我希望這給你如何開始的想法。
在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
THX @msalvadores。這適用於DBPedia.org。仍然需要使它在win7機器上本地工作。所以definetely Virtuoso(4store只有linux)。但仍然無法找到一個好的windows平臺安裝教程 – jaz
即使對於Virtuoso,您也會更喜歡使用Linux。如果你想堅持與Virtuoso看看這個http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows還要記住,如果你想加載所有DBPEDIA你將需要一個體面的強大的機器,也許是商品服務器。 –
不能投票給你,因爲我還沒有足夠的聲望。但選擇你的答案是正確的! – jaz