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'] ...@@ -46,42 +46,63 @@ dicoZhLogs = alemdic['dicoZhLogs']
##### STATS DICTIONNAIRES ##### STATS DICTIONNAIRES
def getLenDic(dic): def getLenDic(lang):
lenDic = 0 # if lang == "fr":
for k in dic.keys(): # alemDic = dicoFr
lenDic+=1 # elif lang == "en":
return lenDic # alemDic = dicoEn
# elif lang == "zh":
# pour requêtage depuis views.py (dicoView()) # alemDic = dicoZh
def getLenDicFr():
return getLenDic(word2transFr) # query = alemDic.find()
def getLenDicEn(): # lenDic = 0
return getLenDic(word2transEn) # for q in query:
def getLenDicZh(): # lenDic+=1
return getLenDic(word2transZh) # 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) ##### MISE EN MÉMOIRE DES DICTIONNAIRES (seulement les transcriptions+regions)
def makeWord2trans(alemDic): def makeWord2trans(alemDic):
query = alemDic.find() query = alemDic.find()
word2trans = {} word2trans = {}
for q in query: for q in query:
if q['w'] not in word2trans.keys(): if len(q['w'].split(' '))==1:
word2trans[q['w']] = { "t" : q['t'] } # pas besoin de mettre en mémoire le reste pour l'instant (catégories, traductions, fantizi...) # on met que les mots simples en mémoire (pas les expressions (=avec une espace))
else: if q['w'] not in word2trans.keys():
print('DOUBLON DÉTECTÉ :', q['w']) 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 return word2trans
print("Mise en mémoire de dicoFr...") print("Mise en mémoire de dicoFr...")
word2transFr = makeWord2trans(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...") print("Mise en mémoire de dicoEn...")
word2transEn = makeWord2trans(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...") print("Mise en mémoire de dicoZh...")
word2transZh = makeWord2trans(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): ...@@ -301,15 +322,12 @@ def getEntryByWord(m,mc,t,tc,lang):
# lang = langue cible ('fr', 'en', 'zh'...) # lang = langue cible ('fr', 'en', 'zh'...)
if lang == "fr": if lang == "fr":
word2trans = word2transFr
m = m.replace("'",'’') m = m.replace("'",'’')
dico = dicoFr dico = dicoFr
elif lang == "en": elif lang == "en":
word2trans = word2transEn
m = m.replace('’',"'") m = m.replace('’',"'")
dico = dicoEn dico = dicoEn
elif lang == "zh": elif lang == "zh":
word2trans = word2transZh
dico = dicoZh dico = dicoZh
m = m.lower() m = m.lower()
...@@ -342,17 +360,24 @@ def getEntryByWord(m,mc,t,tc,lang): ...@@ -342,17 +360,24 @@ def getEntryByWord(m,mc,t,tc,lang):
# transOK = True # transOK = True
# if transOK: result[entree] = infos['t'] # 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}}): for entree in dico.find({'w': {"$regex": mc1+m+mc2}}):
transOK = False transOK = False
for i,trans in enumerate(entree['t']): if t != r'.*':
if re.match(tc1+t+tc2,trans['tt'].replace('.','')): for i,trans in enumerate(entree['t']):
transOK = True if re.match(tc1+t+tc2,trans['tt'].replace('.','')):
transOK = True
else:
transOK = True
if transOK: if transOK:
result[entree['w']] = {} cpt+=1
for i, j in entree.items(): if cpt<=limite:
if i != "_id": result[entree['w']] = {}
result[entree['w']][i] = j 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) 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): def modifEntry(user,mot,infos,lang):
......
...@@ -227,17 +227,18 @@ def main0(request): ...@@ -227,17 +227,18 @@ def main0(request):
def dicoView(request): def dicoView(request):
print("Réception requête dicoView().")
data = Entree() data = Entree()
data.update = updateTime() data.update = updateTime()
data.nbMotsFr = txtphono.getLenDicFr() data.nbMotsFr = txtphono.getLenDic('fr')
data.nbMotsEn = txtphono.getLenDicEn() data.nbMotsEn = txtphono.getLenDic('en')
data.nbMotsZh = txtphono.getLenDicZh() data.nbMotsZh = txtphono.getLenDic('zh')
return render(request, 'editDicoHome.html', {'data': data}) return render(request, 'editDicoHome.html', {'data': data})
def dicoViewFr(request): def dicoViewFr(request):
data = Entree() data = Entree()
data.update = updateTime() data.update = updateTime()
data.lenDic = txtphono.getLenDicFr() data.lenDic = txtphono.getLenDic('fr')
data.logStat = txtphono.getLogStat('fr') data.logStat = txtphono.getLogStat('fr')
data.dicoLang = "fr" data.dicoLang = "fr"
return render(request, 'editDico.html', {'data': data}) return render(request, 'editDico.html', {'data': data})
...@@ -245,7 +246,7 @@ def dicoViewFr(request): ...@@ -245,7 +246,7 @@ def dicoViewFr(request):
def dicoViewEn(request): def dicoViewEn(request):
data = Entree() data = Entree()
data.update = updateTime() data.update = updateTime()
data.lenDic = txtphono.getLenDicEn() data.lenDic = txtphono.getLenDic('en')
data.logStat = txtphono.getLogStat('en') data.logStat = txtphono.getLogStat('en')
data.dicoLang = "en" data.dicoLang = "en"
return render(request, 'editDico.html', {'data': data}) return render(request, 'editDico.html', {'data': data})
...@@ -253,7 +254,7 @@ def dicoViewEn(request): ...@@ -253,7 +254,7 @@ def dicoViewEn(request):
def dicoViewZh(request): def dicoViewZh(request):
data = Entree() data = Entree()
data.update = updateTime() data.update = updateTime()
data.lenDic = txtphono.getLenDicZh() data.lenDic = txtphono.getLenDic('zh')
data.logStat = txtphono.getLogStat('zh') data.logStat = txtphono.getLogStat('zh')
data.dicoLang = "zh" data.dicoLang = "zh"
return render(request, 'editDico.html', {'data': data}) return render(request, 'editDico.html', {'data': data})
......
...@@ -106,7 +106,8 @@ $(document).ready(function(){ ...@@ -106,7 +106,8 @@ $(document).ready(function(){
cptrows = 0 cptrows = 0
for (t in dico[i][1]['t']){ for (t in dico[i][1]['t']){
cptrows += 1 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>' 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/>'; transList += '<br/>';
} }
......
...@@ -17,7 +17,8 @@ ...@@ -17,7 +17,8 @@
<div class="card cardDico border-dark" onclick="location.href='fr';"> <div class="card cardDico border-dark" onclick="location.href='fr';">
<div class="card-header"><h4>Français</h4></div> <div class="card-header"><h4>Français</h4></div>
<div class="card-body" style="text-align: left;"> <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> <p>Issu de :</p>
<ul> <ul>
<li>Wiktionnaire français</li> <li>Wiktionnaire français</li>
...@@ -29,7 +30,8 @@ ...@@ -29,7 +30,8 @@
<div class="card cardDico border-dark" onclick="location.href='en';"> <div class="card cardDico border-dark" onclick="location.href='en';">
<div class="card-header"><h4>Anglais</h4></div> <div class="card-header"><h4>Anglais</h4></div>
<div class="card-body" style="text-align: left;"> <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> <p>Issu de :</p>
<ul> <ul>
<li>English Wiktionary</li> <li>English Wiktionary</li>
...@@ -43,7 +45,8 @@ ...@@ -43,7 +45,8 @@
<div class="card cardDico border-dark" onclick="location.href='zh';"> <div class="card cardDico border-dark" onclick="location.href='zh';">
<div class="card-header"><h4>Mandarin</h4></div> <div class="card-header"><h4>Mandarin</h4></div>
<div class="card-body" style="text-align: left;"> <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> <p>Issu de :</p>
<ul> <ul>
<li>CC-CEDICT</li> <li>CC-CEDICT</li>
......
Markdown is supported
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