Commit b07909ce authored by Sylvain Coulange's avatar Sylvain Coulange
Browse files

optimisation temps requetes DicoView() (getLenDic()) et DicoReq()

parent 6e236c50
......@@ -46,42 +46,63 @@ dicoZhLogs = alemdic['dicoZhLogs']
##### STATS DICTIONNAIRES
def getLenDic(dic):
lenDic = 0
for k in dic.keys():
lenDic+=1
return lenDic
# pour requêtage depuis views.py (dicoView())
def getLenDicFr():
return getLenDic(word2transFr)
def getLenDicEn():
return getLenDic(word2transEn)
def getLenDicZh():
return getLenDic(word2transZh)
def getLenDic(lang):
# if lang == "fr":
# alemDic = dicoFr
# elif lang == "en":
# alemDic = dicoEn
# elif lang == "zh":
# alemDic = dicoZh
# query = alemDic.find()
# lenDic = 0
# for q in query:
# lenDic+=1
# return lenDic
# VARIANTE ÉCONOMIQUE (calculée à partir des logs)
if lang == "fr":
dicoLogs = dicoFrLogs
base = 1457835 # nb d'entrées au 28 août 2021
elif lang == "en":
dicoLogs = dicoEnLogs
base = 155019 # nb d'entrées au 28 août 2021
elif lang == "zh":
dicoLogs = dicoZhLogs
base = 188996 # nb d'entrées au 28 août 2021
query = dicoLogs.find()
nbDel=0
nbAdd=0
for q in query:
if q['type'] == 'ADD': nbAdd+=1
if q['type'] == 'DEL': nbDel+=1
return base+nbAdd-nbDel
##### MISE EN MÉMOIRE DES DICTIONNAIRES (seulement les transcriptions+regions)
def makeWord2trans(alemDic):
query = alemDic.find()
word2trans = {}
for q in query:
if q['w'] not in word2trans.keys():
word2trans[q['w']] = { "t" : q['t'] } # pas besoin de mettre en mémoire le reste pour l'instant (catégories, traductions, fantizi...)
else:
print('DOUBLON DÉTECTÉ :', q['w'])
if len(q['w'].split(' '))==1:
# on met que les mots simples en mémoire (pas les expressions (=avec une espace))
if q['w'] not in word2trans.keys():
word2trans[q['w']] = { "t" : q['t'] } # pas besoin de mettre en mémoire le reste pour l'instant (catégories, traductions, fantizi...)
else:
print('DOUBLON DÉTECTÉ :', q['w'])
return word2trans
print("Mise en mémoire de dicoFr...")
word2transFr = makeWord2trans(dicoFr)
print("Nombre d'entrées dans AlemDic-dicoFr :", getLenDic(word2transFr))
print("Nombre d'entrées dans AlemDic-dicoFr :", getLenDic('fr'))
print("Mise en mémoire de dicoEn...")
word2transEn = makeWord2trans(dicoEn)
print("Nombre d'entrées dans AlemDic-dicoEn :", getLenDic(word2transEn))
print("Nombre d'entrées dans AlemDic-dicoEn :", getLenDic(('en')))
print("Mise en mémoire de dicoZh...")
word2transZh = makeWord2trans(dicoZh)
print("Nombre d'entrées dans AlemDic-dicoZh :", getLenDic(word2transZh))
print("Nombre d'entrées dans AlemDic-dicoZh :", getLenDic('zh'))
########################################
......@@ -301,15 +322,12 @@ def getEntryByWord(m,mc,t,tc,lang):
# lang = langue cible ('fr', 'en', 'zh'...)
if lang == "fr":
word2trans = word2transFr
m = m.replace("'",'’')
dico = dicoFr
elif lang == "en":
word2trans = word2transEn
m = m.replace('’',"'")
dico = dicoEn
elif lang == "zh":
word2trans = word2transZh
dico = dicoZh
m = m.lower()
......@@ -342,17 +360,24 @@ def getEntryByWord(m,mc,t,tc,lang):
# transOK = True
# if transOK: result[entree] = infos['t']
# Requêter directement MongoDB et envoyer l'ensemble des résultats (cétégories, traductions... compris)
# Requêter directement MongoDB et envoyer l'ensemble des résultats (catégories, traductions... compris)
limite = 999999 # limite à 999999
cpt = 0
for entree in dico.find({'w': {"$regex": mc1+m+mc2}}):
transOK = False
for i,trans in enumerate(entree['t']):
if re.match(tc1+t+tc2,trans['tt'].replace('.','')):
transOK = True
if t != r'.*':
for i,trans in enumerate(entree['t']):
if re.match(tc1+t+tc2,trans['tt'].replace('.','')):
transOK = True
else:
transOK = True
if transOK:
result[entree['w']] = {}
for i, j in entree.items():
if i != "_id":
result[entree['w']][i] = j
cpt+=1
if cpt<=limite:
result[entree['w']] = {}
for i, j in entree.items():
if i != "_id":
result[entree['w']][i] = j
return sorted(result.items(), key=lambda M: locale.strxfrm(M[0])) # mise dans l'ordre alphabétique français (ex. é après e, et pas après z)
def modifEntry(user,mot,infos,lang):
......
......@@ -227,17 +227,18 @@ def main0(request):
def dicoView(request):
print("Réception requête dicoView().")
data = Entree()
data.update = updateTime()
data.nbMotsFr = txtphono.getLenDicFr()
data.nbMotsEn = txtphono.getLenDicEn()
data.nbMotsZh = txtphono.getLenDicZh()
data.nbMotsFr = txtphono.getLenDic('fr')
data.nbMotsEn = txtphono.getLenDic('en')
data.nbMotsZh = txtphono.getLenDic('zh')
return render(request, 'editDicoHome.html', {'data': data})
def dicoViewFr(request):
data = Entree()
data.update = updateTime()
data.lenDic = txtphono.getLenDicFr()
data.lenDic = txtphono.getLenDic('fr')
data.logStat = txtphono.getLogStat('fr')
data.dicoLang = "fr"
return render(request, 'editDico.html', {'data': data})
......@@ -245,7 +246,7 @@ def dicoViewFr(request):
def dicoViewEn(request):
data = Entree()
data.update = updateTime()
data.lenDic = txtphono.getLenDicEn()
data.lenDic = txtphono.getLenDic('en')
data.logStat = txtphono.getLogStat('en')
data.dicoLang = "en"
return render(request, 'editDico.html', {'data': data})
......@@ -253,7 +254,7 @@ def dicoViewEn(request):
def dicoViewZh(request):
data = Entree()
data.update = updateTime()
data.lenDic = txtphono.getLenDicZh()
data.lenDic = txtphono.getLenDic('zh')
data.logStat = txtphono.getLogStat('zh')
data.dicoLang = "zh"
return render(request, 'editDico.html', {'data': data})
......
......@@ -106,7 +106,8 @@ $(document).ready(function(){
cptrows = 0
for (t in dico[i][1]['t']){
cptrows += 1
transList += "<span class='trans'>"+dico[i][1]['t'][t]['tt'] + "</span> (" + dico[i][1]['t'][t]['tr'].join(', ') + ")";
transList += "<span class='trans'>"+dico[i][1]['t'][t]['tt'] + "</span>"
if (dico[i][1]['t'][t]['tr']) { transList += " (" + dico[i][1]['t'][t]['tr'].join(', ') + ")"; }
if (dico[i][1]['t'][t]['tc']) { transList += '<img width="20px" src="/static/im/logo-comment.png" title="'+dico[i][1]['t'][t]['tc']+'"></img>';} //'<span style="font-size:.8em; font-style:italic;">' + thisWordTransList[t]['c'] +'</span>'
transList += '<br/>';
}
......
......@@ -17,7 +17,8 @@
<div class="card cardDico border-dark" onclick="location.href='fr';">
<div class="card-header"><h4>Français</h4></div>
<div class="card-body" style="text-align: left;">
<p>{{ data.nbMotsFr|intcomma }} entrées.</p>
<!-- <p>{{ data.nbMotsFr|intcomma }} entrées.</p> -->
<p>1 450 000+ entrées.</p>
<p>Issu de :</p>
<ul>
<li>Wiktionnaire français</li>
......@@ -29,7 +30,8 @@
<div class="card cardDico border-dark" onclick="location.href='en';">
<div class="card-header"><h4>Anglais</h4></div>
<div class="card-body" style="text-align: left;">
<p>{{ data.nbMotsEn|intcomma }} entrées.</p>
<!-- <p>{{ data.nbMotsEn|intcomma }} entrées.</p> -->
<p>155 000+ entrées.</p>
<p>Issu de :</p>
<ul>
<li>English Wiktionary</li>
......@@ -43,7 +45,8 @@
<div class="card cardDico border-dark" onclick="location.href='zh';">
<div class="card-header"><h4>Mandarin</h4></div>
<div class="card-body" style="text-align: left;">
<p>{{ data.nbMotsZh|intcomma }} entrées.</p>
<!-- <p>{{ data.nbMotsZh|intcomma }} entrées.</p> -->
<p>188 000+ entrées.</p>
<p>Issu de :</p>
<ul>
<li>CC-CEDICT</li>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment