Skip to content
Snippets Groups Projects
Commit 0c92ec36 authored by Fize Jacques's avatar Fize Jacques
Browse files

SERVER FUNCTIONNAL

parent c32ff670
No related branches found
No related tags found
No related merge requests found
...@@ -88,8 +88,8 @@ def heuritic_mean(geocoder,data): ...@@ -88,8 +88,8 @@ def heuritic_mean(geocoder,data):
res_geocode["lat"] = lats res_geocode["lat"] = lats
results = {} results = {}
for tp in toponyms: for tp in toponyms:
lat = res_geocode[res_geocode.tc == tp].lat.mean() lat = res_geocode[res_geocode.t == tp].lat.mean()
lon = res_geocode[res_geocode.tc == tp].lon.mean() lon = res_geocode[res_geocode.t == tp].lon.mean()
results[tp]={"lat":lat,"lon":lon} results[tp]={"lat":lat,"lon":lon}
return results return results
...@@ -119,3 +119,5 @@ class TextGeocoder(): ...@@ -119,3 +119,5 @@ class TextGeocoder():
for e in range(len(entities)): for e in range(len(entities)):
entities[e]["coord"] = heuristic_results[entities[e]["text"]] entities[e]["coord"] = heuristic_results[entities[e]["text"]]
return entities return entities
from flask import Flask, escape, request, render_template from flask import Flask, escape, request, render_template,jsonify,Markup
#from lib.geocoder import Geocoder from lib.geocoder import Geocoder,TextGeocoder,heuritic_mean
geocoder = None#Geocoder("./outputs/GB_MODEL_2/GB.txt_100_4_100__A_I_C.h5","./outputs/GB_MODEL_2/GB.txt_100_4_100__A_I_C_index") geocoder = Geocoder("./outputs/GB_MODEL_2/GB.txt_100_4_100__A_I_C.h5","./outputs/GB_MODEL_2/GB.txt_100_4_100__A_I_C_index")
app = Flask(__name__) app = Flask(__name__)
@app.route('/') @app.route('/')
def home(): def home():
toponym = request.args.get("top", "Paris") toponym = request.args.get("top", "")
c_toponym = request.args.get("c_top", "Cherbourg") c_toponym = request.args.get("c_top", "")
if toponym and c_toponym: if toponym and c_toponym:
lon,lat = geocoder.get_coord(toponym,c_toponym) lon,lat = geocoder.get_coord(toponym,c_toponym)
lon,lat = geocoder.wgs_coord(lon,lat) lon,lat = geocoder.wgs_coord(lon,lat)
...@@ -19,6 +19,26 @@ def home(): ...@@ -19,6 +19,26 @@ def home():
def text(): def text():
return render_template("text.html",title="Text Geocoder") return render_template("text.html",title="Text Geocoder")
@app.route('/geocode') @app.route('/geocode', methods=['POST', 'GET'])
def geocode(): def geocode():
pass if request.method == 'POST':
\ No newline at end of file text = request.form["text"]
g_t = TextGeocoder(geocoder,"spacy","en",heuritic_mean)
results = g_t.geocode(g_t.extract_geo_entities(text))
html_, pos_ = "", 0
for item in results:
start,end = item["start"], item["end"]
html_ = html_ + text[pos_:start] + "<span class=\"annotation place\">{0}</span>".format(text[start:end])
pos_ = end
place_coords = {}
for r in results:
if r["text"] in place_coords:
continue
place_coords[r["text"]]={"lat":float(r["coord"]["lat"]),"lon":float(r["coord"]["lon"])}
return render_template("text.html",title="Text Geocoder",data={"type":"success","output":Markup(html_),"place_coords":place_coords})
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True)
\ No newline at end of file
/*
* Globals
*/
/* Links */
a,
a:focus,
a:hover {
color: #fff;
}
/* Custom default button */
.btn-secondary,
.btn-secondary:hover,
.btn-secondary:focus {
color: #333;
text-shadow: none; /* Prevent inheritance from `body` */
background-color: #fff;
border: .05rem solid #fff;
}
/*
* Base structure
*/
html,
body {
height: 100%;
background-color: #333;
}
body {
display: -ms-flexbox;
display: flex;
color: #fff;
text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
}
.cover-container {
max-width: 42em;
}
/*
* Header
*/
.masthead {
margin-bottom: 2rem;
}
.masthead-brand {
margin-bottom: 0;
}
.nav-masthead .nav-link {
padding: .25rem 0;
font-weight: 700;
color: rgba(255, 255, 255, .5);
background-color: transparent;
border-bottom: .25rem solid transparent;
}
.nav-masthead .nav-link:hover,
.nav-masthead .nav-link:focus {
border-bottom-color: rgba(255, 255, 255, .25);
}
.nav-masthead .nav-link + .nav-link {
margin-left: 1rem;
}
.nav-masthead .active {
color: #fff;
border-bottom-color: #fff;
}
@media (min-width: 48em) {
.masthead-brand {
float: left;
}
.nav-masthead {
float: right;
}
}
/*
* Cover
*/
.cover {
padding: 0 1.5rem;
}
.cover .btn-lg {
padding: .75rem 1.25rem;
font-weight: 700;
}
/*
* Footer
*/
.mastfoot {
color: rgba(255, 255, 255, .5);
}
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<!-- TOPONYM FORM --> <!-- TOPONYM FORM -->
<div class="container" style="background-color: white;padding: 5px;"> <div class="container" style="background-color: white;padding: 5px;">
<p> <p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Eum aliquid similique corporis, consequatur dicta itaque commodi ex est ad nemo atque dolore voluptatibus quidem totam? Ut incidunt quos similique veniam.
</p> </p>
<form action="/" method="get"> <form action="/" method="get">
<div class="form-group"> <div class="form-group">
...@@ -41,9 +41,9 @@ ...@@ -41,9 +41,9 @@
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>', attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>',
}).addTo(mymap); }).addTo(mymap);
{% if lat and lon %}
var marker = L.marker([{{lat}}, {{lon}}]).addTo(mymap); var marker = L.marker([{{lat}}, {{lon}}]).addTo(mymap);
{% endif %}
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -6,18 +6,13 @@ ...@@ -6,18 +6,13 @@
<meta name="viewport" content="width=auto, initial-scale=1.0"> <meta name="viewport" content="width=auto, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Geocoder Interface</title> <title>Geocoder Interface</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css2?family=Kumbh+Sans:wght@300;400;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Kumbh+Sans:wght@300;400;700&display=swap" rel="stylesheet">
<!-- Load Leaflet --> <!-- Load Leaflet -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA==" crossorigin="" />
integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA==" <script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js" integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA==" crossorigin=""></script>
crossorigin="" />
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"
integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA=="
crossorigin=""></script>
</head> </head>
<body> <body>
...@@ -25,14 +20,37 @@ ...@@ -25,14 +20,37 @@
body { body {
font-family: 'Kumbh Sans', sans-serif; font-family: 'Kumbh Sans', sans-serif;
} }
#mapid { #mapid {
height: 400px; height: 400px;
width: 100%; width: 100%;
} }
.container-fluid{
.container-fluid {
padding: 0 !important; padding: 0 !important;
} }
.text_annotated {
line-height: 2em;
}
.annotation {
border-radius: 5px;
color: white;
padding: 4px;
}
.person {
background-color: #cf000f;
}
.place {
background-color: #2c82c9;
}
.org {
background-color: #00b16a;
}
</style> </style>
<main class="container-fluid"> <main class="container-fluid">
...@@ -43,29 +61,22 @@ ...@@ -43,29 +61,22 @@
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav"> <div class="navbar-nav">
<a class="nav-link" href="/">Toponyms Pair Geocoder</a> <a class="nav-link" href="/">Toponyms Pair Geocoder</a>
<a class="nav-link" href="/text">Text Geocoder</a> <a class="nav-link" href="/text">Text Geocoder</a>
</div> </div>
</div> </div>
</nav> </nav>
<h2 class="text-center" style="margin-top: 0.5em;">{{title}}</h2> <h2 class="text-center" style="margin-top: 0.5em;">{{title}}</h2>
{% block content %}{% endblock %} {% block content %}{% endblock %}
</main> </main>
<!-- JS SCRIPTS --> <!-- JS SCRIPTS -->
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
crossorigin="anonymous"></script>
{% block script%} {% block script%} {% endblock %}
{% endblock %}
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -5,20 +5,21 @@ ...@@ -5,20 +5,21 @@
<!-- TOPONYM FORM --> <!-- TOPONYM FORM -->
<div class="container"> <div class="container">
<p> <p>
</p> </p>
<form action=""> <form action="/geocode" method="post">
<div class="form-group"> <div class="form-group">
<label for="exampleFormControlTextarea1">Your text</label> <label for="text"><h5>Your text</h5></label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea> <textarea class="form-control" id="text" name="text" rows="3"></textarea>
<br> <br>
<button class="btn btn-info" id="submit">Geocode</button> <button class="btn btn-info" id="submit">Geocode</button>
</div> </div>
</form> </form>
<h5>Results :</h5> <h5>Results :</h5>
<div class="col-lg-12" style="border:1px solid #666"> <div class="col-lg-12" style="border:1px solid #999;border-radius:5px;">
<p id="result_container"></p> <p class="text_annotated" id="result_container">
{% if data %} {{data["output"]}} {% endif %}
</p>
</div> </div>
</div> </div>
...@@ -37,5 +38,17 @@ ...@@ -37,5 +38,17 @@
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>', attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>',
}).addTo(mymap); }).addTo(mymap);
</script>
{% if data %}
<script>
{% for place,coords in data["place_coords"].items() %}
var mark = L.marker([{{coords["lat"]}}, {{coords["lon"]}}],);
mark.bindPopup("{{place}}")
mark.addTo(mymap);
{% endfor %}
</script> </script>
{% endif %}
{% endblock %} {% endblock %}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment