add plaintext search in all the web pages

develop
gwen 2 years ago
parent 0bcc14afbb
commit 07712ad544

@ -3,6 +3,8 @@
TODO: maybe all these calculations are to be put in the db storage TODO: maybe all these calculations are to be put in the db storage
""" """
from .dbinit import inverted_prince_bigram
def make_timeitem_from_filename(filename): def make_timeitem_from_filename(filename):
""" """
"anj_isa_i_1441_08_05a" -> "1441_08_05a" "anj_isa_i_1441_08_05a" -> "1441_08_05a"
@ -10,6 +12,47 @@ def make_timeitem_from_filename(filename):
trs_fname = filename.split('_') trs_fname = filename.split('_')
return "_".join(trs_fname[3:]) return "_".join(trs_fname[3:])
def plaintext_response(search, actecol, prince_bigram):
"""plain text search response
:search: the form's result
:return: database query
"""
query = [
{
"$match": {
"xmlcontent": {
"$regex": search,
"$options" :'i' # case-insensitive
}
}
},
{
'$group': {'_id': {'prince_name': '$prince_name',
'house': '$house',
'date': '$date',
'prince_code': '$prince_code',
'filename': '$filename',
"place": "$place.name",
"diplo_state": "$diplo_state",
"diplo_type": "$diplo_type"
}
}
}]
results = list(actecol.aggregate(query))
transformed_query = [pr['_id'] for pr in results]
invert_prince_bigram = {val: key for key, val in prince_bigram.items()}
# constructing the dateitem
for trs in transformed_query:
trs['house'] = trs['house'].capitalize()
trs['dateitem'] = make_timeitem_from_filename(trs['filename'])
bigram, number = trs['prince_code'].split('_')
long_prince_bigram = inverted_prince_bigram(bigram) + '_' + number
trs['prince_url'] = prince_name=long_prince_bigram.capitalize()
return transformed_query
#from flask import abort #from flask import abort
# #
#def find_one_or_404(collection, **kwargs): #def find_one_or_404(collection, **kwargs):

@ -27,10 +27,11 @@ from pymongo import ASCENDING
from .dbinit import * from .dbinit import *
from .helper import make_timeitem_from_filename from .helper import make_timeitem_from_filename, plaintext_response
main = Blueprint("main", __name__, url_prefix="/") main = Blueprint("main", __name__, url_prefix="/")
# ______________________________________________________________________________ # ______________________________________________________________________________
# routes # routes
@ -39,62 +40,41 @@ def home():
"""home route""" """home route"""
if request.method == 'POST': if request.method == 'POST':
search = request.form['search'] search = request.form['search']
#actecol.find({key: { $regex: new RegExp(search, 'i')}}) return render_template("plainsearch.html",
query = [ search=search,
{ actes=plaintext_response(search, actecol, prince_bigram))
"$match": {
"xmlcontent": {
"$regex": search,
"$options" :'i' # case-insensitive
}
}
},
{
'$group': {'_id': {'prince_name': '$prince_name',
'house': '$house',
'date': '$date',
'prince_code': '$prince_code',
'filename': '$filename',
"place": "$place.name",
"diplo_state": "$diplo_state",
"diplo_type": "$diplo_type"
}
}
}]
results = list(actecol.aggregate(query))
transformed_query = [pr['_id'] for pr in results]
invert_prince_bigram = {val: key for key, val in prince_bigram.items()}
# constructing the dateitem
for trs in transformed_query:
trs['house'] = trs['house'].capitalize()
trs['dateitem'] = make_timeitem_from_filename(trs['filename'])
bigram, number = trs['prince_code'].split('_')
long_prince_bigram = inverted_prince_bigram(bigram) + '_' + number
trs['prince_url'] = prince_name=long_prince_bigram.capitalize()
return render_template("plainsearch.html", search=search, actes=transformed_query)
return render_template("home.html") return render_template("home.html")
@main.route("/about/", methods=('GET', 'POST')) @main.route("/about/", methods=('GET', 'POST'))
def about(): def about():
"""about route""" """about route"""
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
return render_template("about.html") return render_template("about.html")
@main.route("/actes/") @main.route("/actes/", methods=('GET', 'POST'))
def corpora_all(): def corpora_all():
"""copora all """copora all
lists houses lists houses
sample_house_names = ["Bourbon", "Berry", "Anjou", ...] sample_house_names = ["Bourbon", "Berry", "Anjou", ...]
""" """
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
houses = list(housecol.find()) houses = list(housecol.find())
return render_template("corpora_all.html", houses=houses) return render_template("corpora_all.html", houses=houses)
@main.route("/actes/<house>") @main.route("/actes/<house>", methods=('GET', 'POST'))
def actes(house): def actes(house):
"""*actes* route, sample route: '/actes/Bourbon' or '/actes/Berry' """*actes* route, sample route: '/actes/Bourbon' or '/actes/Berry'
@ -104,6 +84,12 @@ def actes(house):
with a capital letter at the beginning with a capital letter at the beginning
example: `house = "Berry"` example: `house = "Berry"`
""" """
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
# house in the store shall be in lower case, but let's force it, just in case # house in the store shall be in lower case, but let's force it, just in case
house = house.lower() house = house.lower()
# sample result: # sample result:
@ -116,12 +102,18 @@ def actes(house):
return render_template("corpus.html", house=house.capitalize(), princes=princes) return render_template("corpus.html", house=house.capitalize(), princes=princes)
@main.route("/actes/<house>/<prince>") @main.route("/actes/<house>/<prince>", methods=('GET', 'POST'))
def prince_corpus(house=None, prince=None): def prince_corpus(house=None, prince=None):
"""copora prince, *timeline* view """copora prince, *timeline* view
sample route: '/actes/Berry/je_i' or '/actes/Anjou/lo_i' sample route: '/actes/Berry/je_i' or '/actes/Anjou/lo_i'
""" """
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
prince_code = prince.lower() prince_code = prince.lower()
house = house.lower() house = house.lower()
prince_long_name = extract_prince_in_house(house, prince_code)['prince_name'] prince_long_name = extract_prince_in_house(house, prince_code)['prince_name']
@ -158,7 +150,7 @@ def prince_corpus(house=None, prince=None):
return render_template("prince_corpus.html", house=house, duke_name=prince_long_name, return render_template("prince_corpus.html", house=house, duke_name=prince_long_name,
prince_name=long_prince_bigram.capitalize(), actes=transformed_query) prince_name=long_prince_bigram.capitalize(), actes=transformed_query)
@main.route("/acte/<house>/<prince>/<dateitem>") @main.route("/acte/<house>/<prince>/<dateitem>", methods=('GET', 'POST'))
def acte(house=None, prince=None, dateitem=None): def acte(house=None, prince=None, dateitem=None):
"""specific prince's acte view """specific prince's acte view
@ -171,6 +163,12 @@ def acte(house=None, prince=None, dateitem=None):
/acte/Anjou/Isabelle_i/1441_08_05a -> anj_isa_i_1441_08_05a /acte/Anjou/Isabelle_i/1441_08_05a -> anj_isa_i_1441_08_05a
/acte/Bourbon/Anne_i/1388_09_15a -> brb_ann_i_1388_09_15a /acte/Bourbon/Anne_i/1388_09_15a -> brb_ann_i_1388_09_15a
""" """
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
filestem = make_acteid_from_route(house, prince, dateitem) filestem = make_acteid_from_route(house, prince, dateitem)
result = actecol.find_one({'_id': filestem}) result = actecol.find_one({'_id': filestem})
return render_template("acte.html", house=house, prince=result.get('prince_code'), return render_template("acte.html", house=house, prince=result.get('prince_code'),
@ -181,8 +179,14 @@ def acte(house=None, prince=None, dateitem=None):
transcribers=result.get('transcribers'), transcribers=result.get('transcribers'),
image=result.get('image')) image=result.get('image'))
@main.route("/geolocalisation") @main.route("/geolocalisation", methods=('GET', 'POST'))
def geolocalisation(): def geolocalisation():
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
"global folium/leaflet map" "global folium/leaflet map"
m = folium.Map(location=[46.603354, 1.888334], zoom_start=6) m = folium.Map(location=[46.603354, 1.888334], zoom_start=6)
for result in actecol.find(): for result in actecol.find():
@ -199,19 +203,37 @@ def geolocalisation():
geolocalisation = m._repr_html_() geolocalisation = m._repr_html_()
return render_template("map.html", geolocalisation=geolocalisation) return render_template("map.html", geolocalisation=geolocalisation)
@main.route("/contact") @main.route("/contact", methods=('GET', 'POST'))
def contact() -> t.Text: def contact() -> t.Text:
"""Displays the Contact page""" """Displays the Contact page"""
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
return render_template("contact.html", title="Contact") return render_template("contact.html", title="Contact")
@main.route("/termsofservice") @main.route("/termsofservice", methods=('GET', 'POST'))
def terms() -> t.Text: def terms() -> t.Text:
"""Displaysthe T&C page.""" """Displaysthe T&C page."""
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
return render_template("terms.html", title="Mentions légales") return render_template("terms.html", title="Mentions légales")
@main.route("/privacy") @main.route("/privacy", methods=('GET', 'POST'))
def privacy() -> t.Text: def privacy() -> t.Text:
"""Displays the privacy policy page.""" """Displays the privacy policy page."""
if request.method == 'POST':
search = request.form['search']
return render_template("plainsearch.html",
search=search,
actes=plaintext_response(search, actecol, prince_bigram))
return render_template("privacy.html", title="Politique de confidentialité") return render_template("privacy.html", title="Politique de confidentialité")

Loading…
Cancel
Save