Skip to content

Commit a9b384e

Browse files
Sépare les notebooks (#373)
* test workdlow * NLP intro * Automated changes * easier * Automated changes * test * Automated changes * change how we do it * Automated changes * remove notebooks * Automated changes * nb * Automated changes * notebooks * Automated changes * rm * Automated changes * Update netlify-test.yaml * Automated changes * copy recursively * Automated changes * mv * Automated changes * recurisve * Automated changes * remove * Automated changes * ordre * Automated changes * pull * Automated changes * pull no need * Automated changes * handle * Automated changes * test une action dédiée * Automated changes * url depot * Automated changes * change auth * Automated changes * change * Automated changes * test reset repo force * Automated changes * notebooks * Automated changes * un seul job * test other notebook * back action * seems to worrk * retour * update --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent d2a2773 commit a9b384e

File tree

4 files changed

+103
-84
lines changed

4 files changed

+103
-84
lines changed

.github/workflows/netlify-test.yaml

Lines changed: 27 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ on:
66
- main
77
- master
88
- dev
9-
- quarto
109

1110
jobs:
1211
pages:
@@ -59,20 +58,21 @@ jobs:
5958
name: Website
6059
path: public/
6160
enonces:
62-
name: Render-Blog
61+
name: Render notebooks
6362
runs-on: ubuntu-latest
6463
container: linogaliana/python-datascientist:latest
6564
steps:
66-
- uses: actions/checkout@v2
65+
- uses: actions/checkout@v3
6766
with:
68-
submodules: true
6967
fetch-depth: 0
7068
ref: ${{ github.event.pull_request.head.ref }}
71-
repository: ${{github.event.pull_request.head.repo.full_name}}
7269
- name: Configure safe.directory # Workaround for actions/checkout#760
73-
run: git config --global --add safe.directory /__w/python-datascientist/python-datascientist
70+
run: |
71+
git config --global --add safe.directory /__w/python-datascientist/python-datascientist
72+
git config --global --add safe.directory /__w/python-datascientist/python-datascientist-notebooks
7473
- shell: bash
7574
run: |
75+
ls
7676
conda info
7777
conda list
7878
- name: Convert in ipynb with Quarto
@@ -82,71 +82,37 @@ jobs:
8282
python build/tweak_render.py
8383
python build/pimp_notebook.py
8484
quarto render content --to ipynb
85-
mkdir -p notebooks
86-
python build/move_files.py notebooks
85+
mkdir -p temp_notebooks
86+
mkdir -p temp_notebooks/notebooks
87+
python build/move_files.py temp_notebooks/notebooks
88+
quarto render content --to ipynb --execute
89+
mkdir -p temp_notebooks/corrections
90+
python build/move_files.py temp_notebooks/corrections
8791
- uses: actions/upload-artifact@v2
8892
with:
8993
name: Source enonce
9094
path: content/
9195
- uses: actions/upload-artifact@v2
9296
with:
9397
name: Enonces
94-
path: notebooks/
95-
- name: Commit new notebooks
96-
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
97-
env:
98-
BRANCHE_REF: ${{ github.event.pull_request.head.ref }}
99-
run: |
100-
git config user.name 'github-actions[bot]'
101-
git config user.email 'github-actions[bot]@users.noreply.github.com'
102-
git status
103-
find notebooks -type f -name "*.ipynb" | xargs git add
104-
git commit -m "Automated changes";
105-
git pull
106-
git push
107-
corrections:
108-
name: Render-Blog
109-
runs-on: ubuntu-latest
110-
container: linogaliana/python-datascientist:latest
111-
steps:
112-
- uses: actions/checkout@v2
113-
with:
114-
submodules: true
115-
fetch-depth: 0
116-
ref: ${{ github.event.pull_request.head.ref }}
117-
repository: ${{github.event.pull_request.head.repo.full_name}}
118-
- name: Configure safe.directory # Workaround for actions/checkout#760
119-
run: git config --global --add safe.directory /__w/python-datascientist/python-datascientist
120-
- shell: bash
121-
run: |
122-
conda info
123-
conda list
124-
- name: Convert in ipynb with Quarto
125-
run: |
126-
git diff --name-only origin/master origin/${GITHUB_HEAD_REF} >> diff
127-
python build/tweak_project.py
128-
python build/tweak_render.py
129-
python build/tweak_options_quarto.py
130-
python build/pimp_notebook.py
131-
quarto render content --to ipynb --execute
132-
mkdir -p corrections
133-
python build/move_files.py corrections
98+
path: temp_notebooks/notebooks/
13499
- uses: actions/upload-artifact@v2
135100
with:
136-
name: Corrections
137-
path: corrections/
138-
- name: Commit new notebooks
139-
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
101+
name: Enonces
102+
path: temp_notebooks/corrections/
103+
- name: Pushes to another repository
104+
uses: linogaliana/github-action-push-to-another-repository@main
140105
env:
141-
BRANCHE_REF: ${{ github.event.pull_request.head.ref }}
142-
run: |
143-
git config user.name 'github-actions[bot]'
144-
git config user.email 'github-actions[bot]@users.noreply.github.com'
145-
git status
146-
find corrections -type f -name "*.ipynb" | xargs git add
147-
git commit -m "Automated changes";
148-
git pull
149-
git push
106+
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
107+
with:
108+
source-directory: 'temp_notebooks/'
109+
destination-repository-username: 'linogaliana'
110+
destination-repository-name: 'python-datascientist-notebooks'
111+
user-email: lino.galiana@insee.fr
112+
destination-github-username: linogaliana
113+
target-branch: dev
114+
create-target-branch-if-needed: true
115+
reset-repo: true
150116

151117

152118

.github/workflows/prod.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,58 @@ jobs:
3737
with:
3838
name: Website
3939
path: public/
40+
enonces:
41+
name: Render notebooks
42+
runs-on: ubuntu-latest
43+
container: linogaliana/python-datascientist:latest
44+
steps:
45+
- uses: actions/checkout@v3
46+
with:
47+
fetch-depth: 0
48+
ref: ${{ github.event.pull_request.head.ref }}
49+
- name: Configure safe.directory # Workaround for actions/checkout#760
50+
run: |
51+
git config --global --add safe.directory /__w/python-datascientist/python-datascientist
52+
git config --global --add safe.directory /__w/python-datascientist/python-datascientist-notebooks
53+
- shell: bash
54+
run: |
55+
ls
56+
conda info
57+
conda list
58+
- name: Convert in ipynb with Quarto
59+
run: |
60+
python build/tweak_render.py
61+
python build/wc_website.py
62+
python build/pimp_notebook.py
63+
quarto render content --to ipynb
64+
mkdir -p temp_notebooks
65+
mkdir -p temp_notebooks/notebooks
66+
python build/move_files.py temp_notebooks/notebooks
67+
quarto render content --to ipynb --execute
68+
mkdir -p temp_notebooks/corrections
69+
python build/move_files.py temp_notebooks/corrections
70+
- uses: actions/upload-artifact@v2
71+
with:
72+
name: Source enonce
73+
path: content/
74+
- uses: actions/upload-artifact@v2
75+
with:
76+
name: Enonces
77+
path: temp_notebooks/notebooks/
78+
- uses: actions/upload-artifact@v2
79+
with:
80+
name: Enonces
81+
path: temp_notebooks/corrections/
82+
- name: Pushes to another repository
83+
uses: cpina/github-action-push-to-another-repository@main
84+
env:
85+
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
86+
with:
87+
source-directory: 'temp_notebooks/'
88+
destination-repository-username: 'linogaliana'
89+
destination-repository-name: 'python-datascientist-notebooks'
90+
user-email: lino.galiana@insee.fr
91+
destination-github-username: linogaliana
92+
#target-branch: test
93+
create-target-branch-if-needed: true
94+
#reset-repo: true

content/course/NLP/01_intro/index.qmd

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
---
22
title: "Quelques éléments pour comprendre les enjeux du NLP"
3-
date: 2020-10-15T13:00:00Z
4-
draft: false
5-
weight: 10
3+
date: 2023-07-15T13:00:00Z
64
slug: nlpintro
75
type: book
86
tags:
@@ -21,7 +19,7 @@ description: |
2119
explorer quelques méthodes classiques de nettoyage en s'appuyant
2220
sur le _Comte de Monte Cristo_ d'Alexandre Dumas.
2321
bibliography: ../../../../reference.bib
24-
image: featured.png
22+
image: wordcloud_openfood_clean.png
2523
---
2624

2725
::: {.cell .markdown}
@@ -95,9 +93,9 @@ dumas[10000:10500]
9593
```
9694

9795

98-
# La particularité des données textuelles
96+
## La particularité des données textuelles
9997

100-
## Objectif
98+
### Objectif
10199

102100
Le *natural language processing* (NLP) ou
103101
*traitement automatisé de la langue* (TAL) en Français,
@@ -118,7 +116,7 @@ Si cette tâche n'était pas assez difficile comme ça, on peut ajouter d'autres
118116
* propres à chaque langue : il n'existe pas de règle de passage unique entre deux langues
119117
* grande dimension : des combinaisons infinies de séquences de mots
120118

121-
## Méthode
119+
### Méthode
122120

123121
L’unité textuelle peut être le mot ou encore une séquence de *n*
124122
mots (un *n-gramme*) ou encore une chaîne de caractères (e.g. la
@@ -132,7 +130,7 @@ l’information transformée. Mais les étapes de nettoyage de texte sont indisp
132130

133131

134132

135-
# Nettoyer un texte
133+
## Nettoyer un texte
136134

137135
Les *wordclouds* sont des représentations graphiques assez pratiques pour visualiser
138136
les mots les plus fréquents. Elles sont très simples à implémenter en `Python`
@@ -201,7 +199,7 @@ mesure de les comparer.
201199
:::
202200

203201

204-
## Tokenisation
202+
### Tokenisation
205203

206204
::: {.cell .markdown}
207205
```{=html}
@@ -259,7 +257,7 @@ commande suivante :
259257

260258

261259

262-
## Retirer les stop-words
260+
### Retirer les stop-words
263261

264262
Le jeu de données est maintenant propre. On peut désormais retirer les
265263
mots qui n'apportent pas de sens et servent seulement à faire le
@@ -327,7 +325,7 @@ plt.axis("off")
327325
```
328326

329327

330-
## *Stemming*
328+
### *Stemming*
331329

332330
Pour réduire la complexité d'un texte, on peut tirer partie de
333331
_"classes d'équivalence"_ : on peut
@@ -385,7 +383,7 @@ stemmer = FrenchStemmer()
385383
:::
386384

387385

388-
# Reconnaissance des entités nommées
386+
## Reconnaissance des entités nommées
389387

390388
Cette étape n'est pas une étape de préparation mais illustre la capacité
391389
des librairies `Python` a extraire du sens d'un texte. La librairie
@@ -429,7 +427,7 @@ displacy.render(doc, style="ent", jupyter=True)
429427
~~~
430428

431429

432-
# Représentation d'un texte sous forme vectorielle
430+
## Représentation d'un texte sous forme vectorielle
433431

434432
Une fois nettoyé, le texte est plus propice à une représentation vectorielle.
435433
En fait, implicitement, on a depuis le début adopté une démarche *bag of words*.
@@ -447,4 +445,4 @@ La pondération la plus simple est basée sur la fréquence des mots dans le doc
447445
C'est l'objet de la métrique **tf-idf** (term frequency - inverse document frequency)
448446
abordée dans un prochain chapitre.
449447

450-
# Références
448+
## Références

content/course/NLP/02_exoclean/index.qmd

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ plongements de mots permet d'obtenir des tableaux comme celui-ci:
9393
![](word_embedding.png)
9494

9595

96-
# Librairies nécessaires
96+
## Librairies nécessaires
9797

9898
Cette page évoquera les principales librairies pour faire du NLP, notamment :
9999

@@ -160,7 +160,7 @@ nltk.download('wordnet')
160160
nltk.download('omw-1.4')
161161
```
162162

163-
# Données utilisées
163+
## Données utilisées
164164

165165
::: {.cell .markdown}
166166
```{=html}
@@ -289,7 +289,7 @@ constructions d'indices de similarité cosinus reposent sur ce type d'approche.
289289
:::
290290

291291

292-
## Fréquence d'un mot
292+
### Fréquence d'un mot
293293

294294
Avant de s'adonner à une analyse systématique du champ lexical de chaque
295295
auteur, on se focaliser dans un premier temps sur un unique mot, le mot *fear*.
@@ -407,7 +407,7 @@ fig.get_figure()
407407
```
408408

409409

410-
# Premier *wordcloud*
410+
## Premier *wordcloud*
411411

412412
Pour aller plus loin dans l'analyse du champ lexical de chaque auteur,
413413
on peut représenter un `wordcloud` qui permet d'afficher chaque mot avec une
@@ -501,7 +501,7 @@ par la loi de Zipf, cf. exercice suivant).
501501

502502

503503

504-
## Aparté: la loi de Zipf
504+
### Aparté: la loi de Zipf
505505

506506
::: {.cell .markdown}
507507
```{=html}
@@ -592,7 +592,7 @@ quasiment log-linéaire entre le rang et la fréquence d'occurrence d'un mot.
592592
Dit autrement, le mot le plus utilisé l'est deux fois plus que le deuxième
593593
mois le plus fréquent qui l'est trois plus que le troisième, etc.
594594

595-
# Nettoyage d'un texte
595+
## Nettoyage d'un texte
596596

597597
Les premières étapes dans le nettoyage d'un texte, qu'on a
598598
développé au cours du [chapitre précédent](#nlp), sont :
@@ -797,7 +797,7 @@ print("---------------------------")
797797
print(lemmatized_output[:209])
798798
```
799799

800-
# TF-IDF: calcul de fréquence
800+
## TF-IDF: calcul de fréquence
801801

802802
Le calcul [tf-idf](https://fr.wikipedia.org/wiki/TF-IDF) (term _frequency–inverse document frequency_)
803803
permet de calculer un score de proximité entre un terme de recherche et un
@@ -897,7 +897,7 @@ La matrice `document x terms` est un exemple typique de matrice _sparse_ puisque
897897
:::
898898

899899

900-
# Approche contextuelle: les *n-gramms*
900+
## Approche contextuelle: les *n-gramms*
901901

902902

903903
Pour être en mesure de mener cette analyse, il est nécessaire de télécharger un corpus supplémentaire :
@@ -1042,4 +1042,4 @@ collocations_word("love")
10421042
```
10431043

10441044

1045-
# Références
1045+
## Références

0 commit comments

Comments
 (0)