7
7
extension : .md
8
8
format_name : markdown
9
9
format_version : ' 1.3'
10
- jupytext_version : 1.16.1
10
+ jupytext_version : 1.16.6
11
11
kernelspec :
12
12
display_name : Python 3 (ipykernel)
13
13
language : python
@@ -23,7 +23,6 @@ Cours 12 : *And another thing…*
23
23
** Loïc Grobol** [ < lgrobol@parisnanterre.fr > ] ( mailto:lgrobol@parisnanterre.fr )
24
24
<!-- #endregion -->
25
25
26
-
27
26
``` python
28
27
from IPython.display import display
29
28
```
@@ -62,7 +61,7 @@ frameworks comme [React](https://reactjs.org) ou [Angular](https://angular.io).
62
61
Il y a énormément à dire et à apprendre au-delà de ce cours, et je vous recommande très fortement
63
62
d'aller lire, ou au moins picorer [ le tutoriel de
64
63
MDN] ( https://developer.mozilla.org/en-US/docs/Learn/JavaScript ) et le [ * Modern Javascript
65
- Tutorial* ] ( https://javascript.info ) .
64
+ Tutorial* ] ( https://javascript.info ) .
66
65
67
66
Ici, on va se limiter à quelques trucs bons à savoir si vous apprenez JavaScript en venant de Python
68
67
@@ -90,7 +89,7 @@ const b = 3
90
89
(a + b).toString ()
91
90
```
92
91
93
- Ne fait pas ce que vous pensez mais
92
+ Ne fait pas ce que vous pensez mais
94
93
95
94
``` javascript
96
95
const a = 2
@@ -137,7 +136,6 @@ d'indenter dans les blocs comme vous en avez l'habitude.
137
136
138
137
### Déclarer des variables
139
138
140
-
141
139
Les variables se ** déclarent** à leur première utilisation avec ` let ` ou ` const ` (pour les rendre
142
140
constantes) ou avec ` var ` ** mais évitez d'utiliser ` var ` ** qui tend à devenir obsolète
143
141
@@ -176,10 +174,10 @@ Pour des raisons historiques, il y a trois types de boucles `for` en `JavaScrip
176
174
- ` for ` qui est la boucle ` for ` du langage C :
177
175
178
176
``` javascript
179
- let str = " " ;
177
+ let str = " "
180
178
181
179
for (let i = 0 ; i < 9 ; i++ ) {
182
- str = str + i;
180
+ str = str + i
183
181
}
184
182
185
183
console .log (str);
@@ -189,10 +187,10 @@ Pour des raisons historiques, il y a trois types de boucles `for` en `JavaScrip
189
187
- ` for (… of …) ` qui plus ou moins la même chose que ` for ` en Python
190
188
191
189
``` javascript
192
- const array1 = [' a' , ' b' , ' c' ];
190
+ const array1 = [' a' , ' b' , ' c' ]
193
191
194
192
for (const element of array1) {
195
- console .log (element);
193
+ console .log (element)
196
194
}
197
195
```
198
196
@@ -214,12 +212,15 @@ Il y a deux façons de définir des fonctions en JavaScript :
214
212
function getRectArea (width , height ) {
215
213
return width * height
216
214
}
215
+ getRectArea (15 , 13 )
217
216
```
218
217
218
+ ou
219
+
219
220
``` javascript
220
- ( function (width , height ) {
221
+ const getRectArea = function (width , height ) {
221
222
return width * height
222
- })( 15 , 13 )
223
+ }
223
224
```
224
225
225
226
- Les modernes fonctions fléchées
@@ -258,7 +259,7 @@ d'outils pour les observer et les manipuler. Par exemple ceci change la couleur
258
259
document .body .style .background = " red" ;
259
260
```
260
261
261
- On parle de DOM : _ ** D** ocument ** O** bject ** M** odel _ .
262
+ On parle de DOM : *** D** ocument ** O** bject ** M** odel * .
262
263
263
264
Il ** faut** garder sous la main [ la documentation du DOM] ( https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model ) .
264
265
<!-- #endregion -->
@@ -306,7 +307,7 @@ logique sur JavaScript, que ce soit côté client (donc page web) que du côté
306
307
recommande même d'éviter ici d'utiliser du JavaScript côté serveur (ce qu'on pourrait faire en
307
308
Node). L'architecture adaptée si vous voulez une interface web graphique :
308
309
309
- ```
310
+ ``` text
310
311
Système de TAL ⇆ API (FastAPI[+Jinja][+SQL]) ⇆ Page web (HTML+CSS+JavaScript)
311
312
```
312
313
@@ -327,7 +328,7 @@ Ici la page web requête l'API au moyen de méthodes comme
327
328
<h1 >POS-tagger</h1 >
328
329
<form action =" http://localhost:8000/postag" method =" POST" id =" inputForm" >
329
330
<label for =" sentence" >La phrase à analyser</label >
330
- <input name =" sentence" id =" sentence" value =" Il y a un lama dans mon salon !" />
331
+ <input name =" sentence" id =" sentence" value =" Il y a un lama dans mon salon !" />
331
332
<button type =" submit" >Envoyer</button >
332
333
</form >
333
334
@@ -347,6 +348,7 @@ Ici la page web requête l'API au moyen de méthodes comme
347
348
{
348
349
method: " POST" ,
349
350
headers: {
351
+ " Accept" : " text/html" ,
350
352
" Content-Type" : " application/json" ,
351
353
},
352
354
body: JSON .stringify (data),
@@ -361,18 +363,32 @@ Ici la page web requête l'API au moyen de méthodes comme
361
363
```
362
364
<!-- #endregion -->
363
365
364
- Elle permet d'accéder à l'API spacy suivante (qu'il aurait vraiment fallu faire avec Jinja) :
366
+ Elle permet d'accéder à l'API SpaCy suivante (qu'il aurait été mieux de faire avec Jinja) :
365
367
366
368
``` python
367
369
# %load apis/spacy_html_api.py
368
370
from fastapi import FastAPI, HTTPException
371
+ from fastapi.middleware.cors import CORSMiddleware
369
372
from fastapi.staticfiles import StaticFiles
370
373
from pydantic import BaseModel
371
374
from fastapi.responses import HTMLResponse
372
375
import spacy
373
376
374
377
app = FastAPI()
375
378
379
+ # Voir <https://fastapi.tiangolo.com/tutorial/cors> pour une explication de pourquoi il faut faire
380
+ # ça
381
+ app.add_middleware(
382
+ CORSMiddleware,
383
+ allow_origins = [
384
+ " http://localhost" ,
385
+ " http://localhost:8000" ,
386
+ ],
387
+ allow_credentials = True ,
388
+ allow_methods = [" *" ],
389
+ allow_headers = [" *" ],
390
+ )
391
+
376
392
377
393
app.mount(" /front" , StaticFiles(directory = " static" ), name = " front" )
378
394
@@ -387,31 +403,14 @@ async def postag(inpt: InputData, model="fr_core_news_sm"):
387
403
raise HTTPException(status_code = 422 , detail = f " Model { model!r } unavailable " )
388
404
nlp = spacy.load(model)
389
405
doc = nlp(inpt.sentence)
390
- above = """ <!DOCTYPE html>
391
- <html lang="en">
392
- <head>
393
- <meta charset="utf-8" />
394
- <title>This is what you asked me to display</title>
395
- </head>
396
- <body>
397
- <ol>
398
- """
399
- below = """
400
- </ol>
401
- </body>
402
- </html>
403
- """
404
406
lst = " \n " .join([f " <li> { w.text} : { w.pos_} </li> " for w in doc])
405
- html_content = " \n " .join([above, lst, below])
407
+ html_content = f " <ol> \n { lst} </ol> "
406
408
return HTMLResponse(content = html_content, status_code = 200 )
407
409
408
410
409
411
@app.get (" /list" )
410
412
async def list_models ():
411
413
return {" models" : spacy.util.get_installed_models()}
412
-
413
-
414
-
415
414
```
416
415
417
416
<!-- #region -->
0 commit comments