forked from WDPS-Group2/Entity-Linking
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathelasticsearch.py
50 lines (43 loc) · 1.28 KB
/
elasticsearch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import requests
'''
example
"http://10.149.0.127:9200/freebase/label/_search?q=obama"
{
"hits" : {
"total" : 172,
"max_score" : 6.014344,
"hits" : [ {
"_index" : "freebase",
"_type" : "label",
"_id" : "AVgvwvuvuV5CxvxAa2D1",
"_score" : 6.014344,
"_source" : {
"resource" : "fbase:m.02mjmr",
"label" : "Barack Obama"
}
}
'''
def search(domain, query):
url = 'http://%s/freebase/label/_search' % domain
try:
response = requests.get(url, params={'q': query, 'size':20})
except:
return {}
id_score_labels = {}
if response:
response = response.json()
for hit in response.get('hits', {}).get('hits', []):
freebase_label = hit.get('_source', {}).get('label')
freebase_id = hit.get('_source', {}).get('resource')
freebase_score = hit.get('_score')
id_score_labels.setdefault(freebase_id, set()).add(freebase_score).add( freebase_label )
return id_score_labels
if __name__ == '__main__':
import sys
try:
_, DOMAIN, QUERY = sys.argv
except Exception as e:
print('Usage: python kb.py DOMAIN QUERY')
sys.exit(0)
for entity, labels in search(DOMAIN, QUERY).items():
print (entity,labels)