| author | cavaliet |
| Tue, 24 Jun 2014 16:58:34 +0200 | |
| changeset 281 | bc0f26b1acc2 |
| parent 266 | 825ff4d6a8ac |
| child 284 | f01235a1dcc2 |
| permissions | -rw-r--r-- |
| 123 | 1 |
# -*- coding: utf-8 -*- |
2 |
''' |
|
3 |
@author: raphv |
|
4 |
''' |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
5 |
from django.conf import settings |
| 123 | 6 |
from django.core.management.base import BaseCommand, CommandError |
7 |
from django.utils.http import urlquote |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
8 |
import json |
| 123 | 9 |
from SPARQLWrapper import SPARQLWrapper, JSON |
10 |
||
| 135 | 11 |
#import pydevd #@UnresolvedImport |
12 |
#pydevd.settrace(suspend=False) |
|
13 |
||
14 |
||
| 123 | 15 |
class Command(BaseCommand): |
16 |
''' |
|
17 |
Command to export tags |
|
18 |
''' |
|
19 |
args = '<path_to_geojson_file>' |
|
20 |
options = '' |
|
21 |
help = """Adds semantic data to countries.geo.json files""" |
|
22 |
||
23 |
def handle(self, *args, **options): |
|
24 |
||
25 |
if len(args) == 0 or not args[0]: |
|
26 |
raise CommandError("Give a Geo Json File to process") |
|
27 |
||
28 |
geojsonfile = args[0] |
|
29 |
||
30 |
f = open(geojsonfile,"r") |
|
31 |
geojson = json.loads(f.read()) |
|
32 |
f.close() |
|
33 |
||
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
34 |
labels = [feature['properties']['label_fr'] for feature in geojson['features']] |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
35 |
#uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels]) |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
36 |
uris = dict([(label, settings.DBPEDIA_URI_TEMPLATE % ( 'resource', urlquote(label.replace(' ','_')) )) for label in labels]) |
| 123 | 37 |
|
38 |
uri_list = [uris[label] for label in uris] |
|
39 |
base_uris = dict([(uris[label],uris[label]) for label in uris]) |
|
40 |
||
41 |
grp = 10 |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
42 |
#endpoint = SPARQLWrapper("http://dbpedia.org/sparql") |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
43 |
endpoint = SPARQLWrapper(settings.DBPEDIA_URI_TEMPLATE % ( 'sparql', '' )) |
| 123 | 44 |
endpoint.setReturnFormat(JSON) |
45 |
||
46 |
start = 0 |
|
47 |
while start < len(uri_list): |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
48 |
# sparql = """ |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
49 |
# PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
50 |
# SELECT ?source ?target |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
51 |
# WHERE { |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
52 |
# ?source dbpedia-owl:wikiPageRedirects ?target . |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
53 |
# Filter (?source in (<%s>)) . |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
54 |
# } |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
55 |
# """ % '>, <'.join(uri_list[start:start + grp]) |
| 123 | 56 |
sparql = """ |
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
57 |
PREFIX dbpedia-owl: <%s> |
| 123 | 58 |
SELECT ?source ?target |
59 |
WHERE { |
|
60 |
?source dbpedia-owl:wikiPageRedirects ?target . |
|
61 |
Filter (?source in (<%s>)) . |
|
62 |
} |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
63 |
""" % ((settings.DBPEDIA_URI_TEMPLATE % ( 'ontology', '' )), '>, <'.join(uri_list[start:start + grp])) |
| 123 | 64 |
endpoint.setQuery(sparql) |
65 |
results = endpoint.query().convert() |
|
66 |
||
67 |
for r in results["results"]["bindings"]: |
|
68 |
source = r["source"]["value"] |
|
69 |
target = r["target"]["value"] |
|
70 |
base_uris[source] = target |
|
71 |
#print "%s redirects to %s"%(source, target) |
|
72 |
start += grp |
|
73 |
||
74 |
base_uri_list = [base_uris[uri] for uri in base_uris] |
|
75 |
||
76 |
french_labels = {} |
|
| 135 | 77 |
labels = {} |
| 123 | 78 |
|
79 |
start = 0 |
|
80 |
while start < len(base_uri_list): |
|
81 |
||
82 |
sparql = """ |
|
83 |
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> |
|
84 |
SELECT ?country ?label WHERE { |
|
85 |
?country rdfs:label ?label . |
|
| 135 | 86 |
FILTER (?country in (<%s>)) |
| 123 | 87 |
} |
88 |
""" % '>, <'.join(base_uri_list[start:start + grp]) |
|
89 |
||
90 |
endpoint.setQuery(sparql) |
|
91 |
results = endpoint.query().convert() |
|
92 |
||
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
93 |
#print repr(results) |
| 135 | 94 |
|
| 123 | 95 |
for r in results["results"]["bindings"]: |
96 |
country = r["country"]["value"] |
|
97 |
label = r["label"]["value"] |
|
| 135 | 98 |
if country not in labels: |
99 |
labels[country] = {} |
|
100 |
labels[country][r["label"]["xml:lang"]] = label |
|
101 |
if r["label"]["xml:lang"] == 'fr': |
|
102 |
french_labels[country] = label |
|
| 123 | 103 |
print "%s label: %s"%(country, label) |
104 |
||
105 |
start += grp |
|
106 |
||
107 |
for feature in geojson['features']: |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
108 |
base_uri = base_uris[uris[feature['properties']['label_fr']]] |
| 123 | 109 |
feature['properties']['dbpedia_uri'] = base_uri |
| 135 | 110 |
|
111 |
if labels.has_key(base_uri): |
|
112 |
feature['properties']['labels'] = labels[base_uri] |
|
| 123 | 113 |
if french_labels.has_key(base_uri): |
114 |
feature['properties']['label_fr'] = french_labels[base_uri] |
|
115 |
else: |
|
116 |
print "No label for %s"%base_uri |
|
117 |
||
118 |
f = open(geojsonfile,"w") |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
119 |
f.write(json.dumps(geojson, indent=2)) |
| 123 | 120 |
f.close() |