diff -r b7d19cd87fcf -r 09e00f38d177 src/hdalab/management/commands/geojson_transform.py --- a/src/hdalab/management/commands/geojson_transform.py Thu Apr 12 01:27:16 2018 +0200 +++ b/src/hdalab/management/commands/geojson_transform.py Wed Apr 11 12:19:47 2018 +0200 @@ -1,112 +1,118 @@ -# -*- coding: utf-8 -*- -''' -@author: raphv -''' -from django.conf import settings -from django.core.management.base import BaseCommand, CommandError -from django.utils.http import urlquote -import json -from SPARQLWrapper import SPARQLWrapper, JSON - -#import pydevd #@UnresolvedImport -#pydevd.settrace(suspend=False) - - -class Command(BaseCommand): - ''' - Command to export tags - ''' - args = '' - options = '' - help = """Adds semantic data to countries.geo.json files""" - - def handle(self, *args, **options): - - if len(args) == 0 or not args[0]: - raise CommandError("Give a Geo Json File to process") - - geojsonfile = args[0] - - f = open(geojsonfile,"r") - geojson = json.loads(f.read()) - f.close() - - labels = [feature['properties']['label_fr'] for feature in geojson['features']] - #uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels]) - uris = dict([(label, settings.DBPEDIA_URI_TEMPLATE % ( 'resource', urlquote(label.replace(' ','_')) )) for label in labels]) - - uri_list = [uris[label] for label in uris] - base_uris = dict([(uris[label],uris[label]) for label in uris]) - - grp = 10 - #endpoint = SPARQLWrapper("http://dbpedia.org/sparql") - endpoint = SPARQLWrapper(settings.DBPEDIA_URI_TEMPLATE % ( 'sparql', '' )) - endpoint.setReturnFormat(JSON) - - start = 0 - while start < len(uri_list): - sparql = """ - PREFIX dbpedia-owl: - SELECT ?source ?target - WHERE { - ?source dbpedia-owl:wikiPageRedirects ?target . - Filter (?source in (<%s>)) . - } - """ % '>, <'.join(uri_list[start:start + grp]) - endpoint.setQuery(sparql) - results = endpoint.query().convert() - - for r in results["results"]["bindings"]: - source = r["source"]["value"] - target = r["target"]["value"] - base_uris[source] = target - #print "%s redirects to %s"%(source, target) - start += grp - - base_uri_list = [base_uris[uri] for uri in base_uris] - - french_labels = {} - labels = {} - - start = 0 - while start < len(base_uri_list): - - sparql = """ - PREFIX rdfs: - SELECT ?country ?label WHERE { - ?country rdfs:label ?label . - FILTER (?country in (<%s>)) - } - """ % '>, <'.join(base_uri_list[start:start + grp]) - - endpoint.setQuery(sparql) - results = endpoint.query().convert() - - #print repr(results) - - for r in results["results"]["bindings"]: - country = r["country"]["value"] - label = r["label"]["value"] - if country not in labels: - labels[country] = {} - labels[country][r["label"]["xml:lang"]] = label - if r["label"]["xml:lang"] == 'fr': - french_labels[country] = label - print "%s label: %s"%(country, label) - - start += grp - - for feature in geojson['features']: - base_uri = base_uris[uris[feature['properties']['label_fr']]] - feature['properties']['dbpedia_uri'] = base_uri - - if labels.has_key(base_uri): - feature['properties']['labels'] = labels[base_uri] - if french_labels.has_key(base_uri): - feature['properties']['label_fr'] = french_labels[base_uri] - else: - print "No label for %s"%base_uri - - f = open(geojsonfile,"w") - f.write(json.dumps(geojson, indent=2)) - f.close() \ No newline at end of file +# -*- coding: utf-8 -*- +''' +Ajoute des données sémantiques issues de DBPedia a des fichiers de pays geojson. +En particulier ajoute les labels français et dans les autres langues disponibles. + +**Usage**: ``django-admin geojson_transform [options] [args [args ...]]`` + +**Arguments**: + +''' +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.utils.http import urlquote +import json +from SPARQLWrapper import SPARQLWrapper, JSON + +#import pydevd #@UnresolvedImport +#pydevd.settrace(suspend=False) + + +class Command(BaseCommand): + ''' + Command to export tags + ''' + args = '' + options = '' + help = """Adds semantic data to countries.geo.json files""" + + def handle(self, *args, **options): + + if len(args) == 0 or not args[0]: + raise CommandError("Give a Geo Json File to process") + + geojsonfile = args[0] + + f = open(geojsonfile,"r") + geojson = json.loads(f.read()) + f.close() + + labels = [feature['properties']['label_fr'] for feature in geojson['features']] + #uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels]) + uris = dict([(label, settings.DBPEDIA_URI_TEMPLATE % ( 'resource', urlquote(label.replace(' ','_')) )) for label in labels]) + + uri_list = [uris[label] for label in uris] + base_uris = dict([(uris[label],uris[label]) for label in uris]) + + grp = 10 + #endpoint = SPARQLWrapper("http://dbpedia.org/sparql") + endpoint = SPARQLWrapper(settings.DBPEDIA_URI_TEMPLATE % ( 'sparql', '' )) + endpoint.setReturnFormat(JSON) + + start = 0 + while start < len(uri_list): + sparql = """ + PREFIX dbpedia-owl: + SELECT ?source ?target + WHERE { + ?source dbpedia-owl:wikiPageRedirects ?target . + Filter (?source in (<%s>)) . + } + """ % '>, <'.join(uri_list[start:start + grp]) + endpoint.setQuery(sparql) + results = endpoint.query().convert() + + for r in results["results"]["bindings"]: + source = r["source"]["value"] + target = r["target"]["value"] + base_uris[source] = target + #print "%s redirects to %s"%(source, target) + start += grp + + base_uri_list = [base_uris[uri] for uri in base_uris] + + french_labels = {} + labels = {} + + start = 0 + while start < len(base_uri_list): + + sparql = """ + PREFIX rdfs: + SELECT ?country ?label WHERE { + ?country rdfs:label ?label . + FILTER (?country in (<%s>)) + } + """ % '>, <'.join(base_uri_list[start:start + grp]) + + endpoint.setQuery(sparql) + results = endpoint.query().convert() + + #print repr(results) + + for r in results["results"]["bindings"]: + country = r["country"]["value"] + label = r["label"]["value"] + if country not in labels: + labels[country] = {} + labels[country][r["label"]["xml:lang"]] = label + if r["label"]["xml:lang"] == 'fr': + french_labels[country] = label + print "%s label: %s"%(country, label) + + start += grp + + for feature in geojson['features']: + base_uri = base_uris[uris[feature['properties']['label_fr']]] + feature['properties']['dbpedia_uri'] = base_uri + + if labels.has_key(base_uri): + feature['properties']['labels'] = labels[base_uri] + if french_labels.has_key(base_uri): + feature['properties']['label_fr'] = french_labels[base_uri] + else: + print "No label for %s"%base_uri + + f = open(geojsonfile,"w") + f.write(json.dumps(geojson, indent=2)) + f.close()