views.py 10.5 KB
Newer Older
Sylvain Coulange's avatar
Sylvain Coulange committed
1
from django.shortcuts import render, HttpResponseRedirect
2
from . import textPhonographer as txtphono
3
from .models import Phonograph, Data, Entree, commitData
4
from django.http import JsonResponse
5
6
from .liaisons import *
import json, spacy, subprocess, re
7

8
9
print('Chargement des modèles de langue...')
print('fr_core_news_md...')
10
nlpFr = spacy.load('fr_core_news_md')
11
print('en_core_web_sm...')
Sylvain Coulange's avatar
Sylvain Coulange committed
12
nlpEn = spacy.load("en_core_web_sm")
13
print('zh_core_web_sm...')
Sylvain Coulange's avatar
Sylvain Coulange committed
14
nlpZh = spacy.load("zh_core_web_sm")
15
print('OK.')
16
logFile = "../logs/dico_frwiktionary-20200301_v2.log"
Sylvain Coulange's avatar
Sylvain Coulange committed
17
18

def redirApp(request):
Sylvain Coulange's avatar
Sylvain Coulange committed
19
    return HttpResponseRedirect('/')
Sylvain Coulange's avatar
Sylvain Coulange committed
20

21
def main(request,pageLang,**mySettings):
22
23
    data = Data()
    data.update = updateTime()
24
    return render(request, 'coloriseur.html', {'data': data, 'pageLang':pageLang})
Sylvain Coulange's avatar
Sylvain Coulange committed
25

26
27
28
29
def colorize(request):
    colis = json.loads(request.body)
    text = colis['inText']
    lang = colis['lang']
Sylvain Coulange's avatar
Sylvain Coulange committed
30
31
32
33
    if lang == "fr":
        nlpText = nlpFr(text)
    elif lang == "en":
        nlpText = nlpEn(text)
Sylvain Coulange's avatar
Sylvain Coulange committed
34
35
    elif lang == "zh":
        nlpText = nlpZh(text)
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
    

    ######### traitement du tiret ############
    if lang == "fr":
        listeMots = []

        for i, mot in enumerate(nlpText):
            # Traiter les mots qui contiennent le '-'.
            # Ex : "-il", "Peut-être"
            if "-" in mot.text and len(mot.text) > 1 :
                temp = ""
                for l in mot.text :
                    if l != "-":
                        temp += l
                    else:
                        if temp == '':
                            listeMots.append("-")
                        else:
                            listeMots.append(temp)
                            listeMots.append("-")
                            temp = ""
                if temp != "":
                    listeMots.append(temp)
            # Traiter uniquement le tiret
            else:
                listeMots.append(mot.text)

        tiret = {} # EX : Vas-y ! Pouvait-il partir ? ==> {'Vas': 1, 'Pouvait': 5}
        for k,item in enumerate(listeMots):
            if item == "-" and k > 0 :
                tiret[listeMots[k-1]] = k
        print(tiret)

        # Remplacer tous les tirets dans le texte par le caractere espace
        if "-" in listeMots:
            text = text.replace('-', ' ')
        
        nlpText = nlpFr(text)
    #########################################
    
76
77
    outText = []

78
79
80
81
82
    # appeler la fonction pour savoir s'il y a une locution
    index = liaison_locution(text, nlpText)
    print("Index", index)

    for j, token in enumerate(nlpText):
83
84
85
86
87
88
89
90
        sdl = re.findall(r'\r\n',token.text)
        print("sdl =",sdl)
        if len(sdl) > 0:
            for s in sdl:
                print("Saut de ligne.")
                outText.append('§')
        else:
            print("Mot en entrée :",token.text)
Sylvain Coulange's avatar
Sylvain Coulange committed
91
            if lang == "fr" or lang == "en":
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
                liaison = None

                ## TRAITEMENT LIAISON POUR FR
                if lang == "fr":
                    if j + 1 < len(nlpText):
                        # ici on met la liaison directement s'il s'agit d'une locution avec exception
                        if index != None and (index[0]+index[1]) == j:
                                bigram = (nlpText[j].text, nlpText[j+1].text)
                                liaison = index[2]
                                print("bigram de locution :",bigram)
                        # appel de la fonction obtenirM1M2
                        else:
                            bigram = obtenirM1M2(token.text, nlpText[j+1].text)
                            print("bigram normal :",bigram)
                            # vérifie les règles de liaisons et denasalisation
                            if bigram != None:
                                print("bigram normal :",token.pos_,nlpText[j+1].pos_)
                                liaison = verifliaison(token, nlpText[j+1])
                                print("type de liaison : ",liaison)

                result = txtphono.traitement(token.text,lang,liaison) # LIAISON : ajoute le booléen liaison en argument
Sylvain Coulange's avatar
Sylvain Coulange committed
113
114
115
116
117
118
119
120
121
122
123
124

                phonographieList = []
                for r in result:
                    phonographie = []
                    for i in r[0]:
                        ph = {}
                        ph['phon'] = i[0]
                        ph['graph'] = i[1]
                        phonographie.append(ph)
                    phonographieList.append((phonographie,r[1],r[2],r[3]))
                outText.append(phonographieList)
            
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
                ## SUITE LIAISON ##
                if lang == 'fr':
                    ## Affichage de la liaison hors du mot
                    juge = False
                    if len(tiret) > 0 and token.text in tiret.keys() :
                        if liaison != None :
                            result1 = txtphono.traitement("-͜", lang, token.text+liaison)
                            juge = True
                        elif liaison == None :
                            result1 = txtphono.traitement("-", lang, liaison)
                            juge = True
                    else:
                        if liaison != None:
                            result1 = txtphono.traitement("‿", lang, token.text+liaison)
                            juge = True
                    if juge == True :
                        phonographieList = []
                        for r in result1:
                            phonographie = []
                            for i in r[0]:
                                ph = {}
                                ph['phon'] = i[0]
                                ph['graph'] = i[1]
                                phonographie.append(ph)
                            phonographieList.append((phonographie, r[1], r[2], r[3]))
                        outText.append(phonographieList)

Sylvain Coulange's avatar
Sylvain Coulange committed
152
153
154
155
156
            elif lang == "zh":
                result = txtphono.traitementzh(token.text)
                outText.append(result)
            print("Résultat en sortie :", result)
               
157
158
159
160
161
    rep = {
        'outText': outText
    }
    return JsonResponse(rep)

162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195

def getPhonoOf(request):
    # Renvoie une liste(texte) de listes(phonographiesPossibles) de listes(phonographie) de phonèmes à partir d'un mot ou d'une expression
    # ex. input="chat" → output=[[[phon_s_maj, phon_a], [phon_ts_maj, phon_a, phon_t]]]
    # ex. input="le chat" → output= [
    #   [
    #       [phon_l,phon_2],
    #       [phon_e_maj,phon_l,phon_2]
    #   ],
    #   [
    #       [phon_s_maj, phon_a],
    #       [phon_ts_maj, phon_a, phon_t]
    #   ]
    # ]
     
    colis = json.loads(request.body)
    text = colis['inText']
    lang = colis['lang']
    if lang == "fr":
        nlpText = nlpFr(text)
    elif lang == "en":
        nlpText = nlpEn(text)
    outPhono = []

    for token in nlpText:
        sdl = re.findall(r'\r\n',token.text)
        print("sdl =",sdl)
        if len(sdl) > 0:
            for s in sdl:
                print("Saut de ligne.")
                outText.append('§')
        else:
            print("Mot en entrée :",token.text)
            if lang == "en":
Sylvain Coulange's avatar
Sylvain Coulange committed
196
                result = txtphono.traitement(token.text,lang)
197
            else:
Sylvain Coulange's avatar
Sylvain Coulange committed
198
                result = txtphono.traitement(token.text,lang)
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
            print(result)
        
            phonographieList = []
            for r in result:      
                phonoliste = []
                for i in r[0]:
                    phonoliste.append(i[0])
                    
                phonographieList.append(phonoliste)
            outPhono.append(phonographieList)
    rep = {
        'outText': outPhono
    }
    return JsonResponse(rep)

214
215
def updateTime():
    upd = str(subprocess.check_output(["git", "log", "-1", "--format=%cd", "--date=short"]))
216
    #ver = str(subprocess.check_output(["git", "rev-list", "--all", "--count"]))
Sylvain Coulange's avatar
Sylvain Coulange committed
217
    return 'Version 5.0 (mis à jour le '+upd[2:-3]+')'
Sylvain Coulange's avatar
Sylvain Coulange committed
218

219
220
221
def main0(request):
    data = Data()
    data.text = ''
Sylvain Coulange's avatar
Sylvain Coulange committed
222
    data.pphh = [[[]]]
223
    data.update = updateTime()
Sylvain Coulange's avatar
Sylvain Coulange committed
224
    data.colorType = 'sw'
225
    data.defaultBg = 'black'
226
227
228
    return render(request, 'coloriseur.html', {'data': data})


Sylvain Coulange's avatar
Sylvain Coulange committed
229
def dicoView(request):
230
    print("Réception requête dicoView().")
231
232
    data = Entree()
    data.update = updateTime()
233
234
235
    data.nbMotsFr = txtphono.getLenDic('fr')
    data.nbMotsEn = txtphono.getLenDic('en')
    data.nbMotsZh = txtphono.getLenDic('zh')
236
237
238
    return render(request, 'editDicoHome.html', {'data': data})

def dicoViewFr(request):
Sylvain Coulange's avatar
Sylvain Coulange committed
239
    data = Entree()
240
    data.update = updateTime()
241
    data.lenDic = txtphono.getLenDic('fr')
242
    data.logStat = txtphono.getLogStat('fr')
243
244
245
246
247
248
    data.dicoLang = "fr"
    return render(request, 'editDico.html', {'data': data})

def dicoViewEn(request):
    data = Entree()
    data.update = updateTime()
249
    data.lenDic = txtphono.getLenDic('en')
250
    data.logStat = txtphono.getLogStat('en')
251
    data.dicoLang = "en"
Sylvain Coulange's avatar
Sylvain Coulange committed
252
253
    return render(request, 'editDico.html', {'data': data})

Sylvain Coulange's avatar
Sylvain Coulange committed
254
255
256
def dicoViewZh(request):
    data = Entree()
    data.update = updateTime()
257
    data.lenDic = txtphono.getLenDic('zh')
Sylvain Coulange's avatar
Sylvain Coulange committed
258
259
260
261
    data.logStat = txtphono.getLogStat('zh')
    data.dicoLang = "zh"
    return render(request, 'editDico.html', {'data': data})

262
def dicoReq(request):
263
    dicoLang = request.GET.get('dicoLang', None)
264
265
266
267
268
    mot = request.GET.get('mot', None)
    trans = request.GET.get('trans', None)
    motCond = request.GET.get('motCond', None)
    transCond = request.GET.get('transCond', None)
    
Sylvain Coulange's avatar
Sylvain Coulange committed
269
    rep = {
270
        "listeEntrees" : txtphono.getEntryByWord(m=mot,mc=motCond,t=trans,tc=transCond,lang=dicoLang)
Sylvain Coulange's avatar
Sylvain Coulange committed
271
272
273
274
275
276
277
278
279
280
    }
    return JsonResponse(rep)

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip
281

Sylvain Coulange's avatar
Sylvain Coulange committed
282
def editEntry(request):
Sylvain Coulange's avatar
Sylvain Coulange committed
283
284
285
286
287
    colis = json.loads(request.body)
    mot = colis['mot']
    lang = colis['lang']
    infos = colis['infos']
    print(infos)
Sylvain Coulange's avatar
Sylvain Coulange committed
288
    ipCli = get_client_ip(request)
Sylvain Coulange's avatar
Sylvain Coulange committed
289
290

    return JsonResponse(txtphono.modifEntry(ipCli,mot,infos,lang))
Sylvain Coulange's avatar
Sylvain Coulange committed
291

292
def newEntry(request):
293
294
    mot = request.GET.get('mot', None)
    trans = request.GET.get('trans', None)
295
    lang = request.GET.get('lang', None)
296
    ipCli = get_client_ip(request)
Sylvain Coulange's avatar
Sylvain Coulange committed
297
298

    return JsonResponse(txtphono.addEntry(ipCli,mot,trans,lang))
299

300
301
def supprEntry(request):
    mot = request.GET.get('mot', None)
302
    lang = request.GET.get('lang', None)
303
    ipCli = get_client_ip(request)
Sylvain Coulange's avatar
Sylvain Coulange committed
304
305

    return JsonResponse(txtphono.delEntry(ipCli,mot,lang))
306

307
def getLog(request):
Sylvain Coulange's avatar
Sylvain Coulange committed
308
309
310
    lang = request.GET.get('lang', None)
    rep = txtphono.sendMeLogPlease(lang)
    return JsonResponse({"logs":rep})