2011-09-20 35 views
11

Tôi đang viết một tập lệnh python để trích xuất "Tên thực thể" từ một bộ sưu tập hàng nghìn bài báo từ một vài quốc gia và ngôn ngữ.Kịch bản lệnh python ví dụ sử dụng DBPedia?

Tôi muốn sử dụng công cụ knwoledge có cấu trúc tuyệt vời DBPedia, ví dụ: tìm kiếm tên của "nghệ sĩ ở Ai Cập" và tên của "công ty ở Canada".

(Nếu những thông tin là ở dạng SQL, tôi sẽ không có vấn đề.)

Tôi muốn để tải nội dung dbpedia và sử dụng nó ẩn. bất kỳ ý tưởng về những gì là cần thiết để làm như vậy và làm thế nào để truy vấn nó cục bộ từ python?

Trả lời

14

Nội dung DBpedia có định dạng RDF. Các bãi có thể được tải xuống từ here

Dbpedia là một tập dữ liệu lớn trong RDF, để xử lý lượng dữ liệu bạn cần sử dụng công nghệ Triple Store. Đối với Dbpedia, bạn sẽ cần một trong ba cửa hàng gốc, tôi khuyên bạn nên sử dụng Virtuoso hoặc 4store. Cá nhân tôi thích 4store.

Khi bạn có cửa hàng ba thiết lập với Dbpedia trong đó. Bạn có thể sử dụng SPARQL để truy vấn bộ ba Dbpedia RDF. Có những thư viện Python có thể giúp bạn với điều đó. 4store và Virtuoso có thể cung cấp cho bạn kết quả trong JSON để bạn có thể dễ dàng nhận được mà không cần bất kỳ thư viện nào.

Một số urllib kịch bản đơn giản như ...

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 

có thể giúp bạn ra ngoài để chạy SPARQL ... ví dụ

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

Tôi hy vọng điều này mang đến cho bạn một ý tưởng về làm thế nào để bắt đầu.

+0

@msalvadores Thx. Điều này làm việc tốt với DBPedia.org. Vẫn cần phải làm cho nó hoạt động cục bộ trên một máy win7. Vì vậy, definetely Virtuoso (4store chỉ linux). Nhưng vẫn không thể tìm thấy một hướng dẫn cài đặt tốt cho nền tảng cửa sổ – jaz

+0

Ngay cả đối với Virtuoso bạn sẽ tốt hơn với Linux. Trong trường hợp bạn muốn gắn bó với Virtuoso, hãy xem http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows Cũng lưu ý rằng nếu bạn muốn tải tất cả DBPEDIA, bạn sẽ cần một máy khá mạnh , có thể là một máy chủ hàng hóa. –

+0

không thể bỏ phiếu cho bạn vì tôi vẫn không có đủ danh tiếng. Nhưng đã chọn câu trả lời của bạn là chính xác! – jaz

1

Trong python3 câu trả lời sẽ giống như thế này bằng cách sử dụng thư viện yêu cầu:

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 
Các vấn đề liên quan