Actions

Projets

« Apprendre en Cuisinant » : différence entre les versions

De GBLL, TAL, ALAO, etc.

Lmongin (discussion | contributions)
Tout refait
Lmongin (discussion | contributions)
mAucun résumé des modifications
Ligne 5 : Ligne 5 :


== Introduction ==
== Introduction ==
<br>Apprendre en Cuisinant est une application ayant pour but d’améliorer la prononciation d’un apprenant en français tout en lui proposant des recettes de cuisine.


=== I. Problématique ===
=== I. Problématique ===
 
<br>Selon la langue de l’apprenant, celui-ci aura des difficultés à prononcer correctement des sons français éloignés et/ou inexistants dans sa langue maternelle. De plus, il arrive souvent qu’un locuteur confonde deux phonèmes.
Selon la langue de l’apprenant, celui-ci aura des difficultés à prononcer correctement des sons français éloignés et/ou inexistants dans sa langue maternelle. De plus, il arrive souvent qu’un locuteur confonde deux phonèmes.
Par exemple, les phonèmes /y/ et /u/ sont souvent confondus par les locuteurs anglophones car ils sont très proches phonétiquement. Il en est de même pour les phonèmes /œ/ et/ø/.
Par exemple, les phonèmes /y/ et /u/ sont souvent confondus par les locuteurs anglophones car ils sont très proches phonétiquement. Il en est de même pour les phonèmes /œ/ et/ø/.
Les voyelles nasales sont également souvent difficiles à prononcer.
Les voyelles nasales sont également souvent difficiles à prononcer.


=== II. Notre proposition ===
=== II. Notre proposition ===
 
<br>Notre application propose à l’utilisateur de s'entraîner à prononcer les sons qui lui posent des problèmes tout en lui faisant un retour sur sa prononciation et de quelle manière le mot doit être prononcé.
Notre application propose à l’utilisateur de s'entraîner à prononcer les sons qui lui posent des problèmes tout en lui faisant un retour sur sa prononciation et de quelle manière le mot doit être prononcé.


=== III. Présentation du projet ===
=== III. Présentation du projet ===
 
<br>


==== 1. Besoins ====
==== 1. Besoins ====


Apprendre des nouveaux mots en français tout en cuisinant : notre appli permet donc d'apprendre à cuisiner en améliorant son vocabulaire ainsi que sa prononciation dans une langues.
<br>Apprendre des nouveaux mots en français tout en cuisinant : notre appli permet donc d'apprendre à cuisiner en améliorant son vocabulaire ainsi que sa prononciation dans une langues.
<br>
<br>
   
   
==== 2. Public ====
==== 2. Public ====
   
   
Pour des apprenants qui veulent apprendre le français. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et réutiliser ces mots. Ce serait également mieux d'avoir des connaissances en phonétique, savoir lire l'api.
<br>Pour des apprenants qui veulent apprendre le français. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et réutiliser ces mots. Ce serait également mieux d'avoir des connaissances en phonétique, savoir lire l'api.
L'application s'adresse également tout particulièrement aux personnes qui aiment cuisiner puisque de cette manière, on peut apprendre tout en cuisinant.
L'application s'adresse également tout particulièrement aux personnes qui aiment cuisiner puisque de cette manière, on peut apprendre tout en cuisinant.
<br>
<br>
Ligne 32 : Ligne 31 :
==== 3. Objectifs ====
==== 3. Objectifs ====
   
   
Créer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en découvrant des nouvelles recettes
<br>Créer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en découvrant des nouvelles recettes
Avoir un corpus de recette dynamique, une recette différente à chaque utilisation
Avoir un corpus de recette dynamique, une recette différente à chaque utilisation
Apprendre des mots selon leur catégorie grammaticale
Apprendre des mots selon leur catégorie grammaticale
Ligne 39 : Ligne 38 :


== Réflexions ==
== Réflexions ==
 
<br>
=== I. EasyAlign et les phonèmes en option ===
=== I. EasyAlign et les phonèmes en option ===
 
<br>
== Développement ==
== Développement ==
 
<br>
=== I. Contenu des scripts ===
=== I. Contenu des scripts ===
 
<br>
Le manuel d'utilisation se trouve dans le README.
Le manuel d'utilisation se trouve dans le README.


==== 1. Python ====
==== 1. Python ====


Nous avons utilisé Python pour plusieurs tâches de notre projet.
<br>Nous avons utilisé Python pour plusieurs tâches de notre projet.


La première étape consiste à la création d’un script qui permet de faire du web scraping afin de récupérer une recette aléatoirement sur le site marmiton https://www.marmiton.org/.
<br>La première étape consiste à la création d’un script qui permet de faire du web scraping afin de récupérer une recette aléatoirement sur le site marmiton https://www.marmiton.org/.
Pour cela nous avons utilisé la librairie BeautifulSoup. Ce code se trouve dans le script getrecipe.py.
Pour cela nous avons utilisé la librairie BeautifulSoup. Ce code se trouve dans le script getrecipe.py.
Le site de Marmiton propose une “recette au hasard” dans le menu de la page, notre script récupère donc tout d’abord le lien de cette recette.
Le site de Marmiton propose une “recette au hasard” dans le menu de la page, notre script récupère donc tout d’abord le lien de cette recette.


Ensuite, on récupère les informations de la recette qui nous intéresse, le texte avec les indications ainsi que le titre et les ingrédients. Alors que nous afficherons toutes ces informations à l’utilisateur qui pourra reproduire la recette, nous ne récupérons que le texte pour le choix des mots, pour éviter les erreurs de POS tagging.
<br>Ensuite, on récupère les informations de la recette qui nous intéresse, le texte avec les indications ainsi que le titre et les ingrédients. Alors que nous afficherons toutes ces informations à l’utilisateur qui pourra reproduire la recette, nous ne récupérons que le texte pour le choix des mots, pour éviter les erreurs de POS tagging.


Contenu du fichier texte pour CoreNLP Contenu de l’invite de commande
<br>Contenu du fichier texte pour CoreNLP Contenu de l’invite de commande
Screenshot
<br>
[[Fichier:Recette.png|1000px|vignette|centré]]
[[Fichier:Recette.png|1000px|vignette|centré]]
<br>


<br>Ensuite, nous avons créé un deuxième script qui permet d'annoncer à l’utilisateur quel mot il doit prononcer et d’enregistrer sa prononciation dans un format audio WAV. On retrouve cette partie dans le script record.py.


Ensuite, nous avons créé un deuxième script qui permet d'annoncer à l’utilisateur quel mot il doit prononcer et d’enregistrer sa prononciation dans un format audio WAV. On retrouve cette partie dans le script record.py.
<br>Dans un second temps, nous nous sommes occupés de la partie PRAAT. Nous avons créé deux scripts PRAAT (script1.praat et script2.praat) qui effectuent les parties 1 (macro-segmentation), 2 (phonétisation) et 3 (phone-segmentation) de EASYALIGN. Dans le premier script on retrouve les deux premières parties de EASYALIGN. Ensuite, il nous faut modifier le textgrid généré par script1.praat afin de modifier la transcription phonétique et d’ajouter les phonèmes options (indiqués par une *). Le script2.praat utilise ce textgrid modifié pour faire l’alignement des phonèmes optionnels entre la prononciation de l’utilisateur et la transcription du mot proposée par PRAAT. Pour lancer ces scripts PRAAT, nous avons écrit des scripts python praatrun1.py (qui lance le premier script PRAAT et modifie le textgrid) et praatrun2.py qui lance le deuxième script PRAAT.
 
Dans un second temps, nous nous sommes occupés de la partie PRAAT. Nous avons créé deux scripts PRAAT (script1.praat et script2.praat) qui effectuent les parties 1 (macro-segmentation), 2 (phonétisation) et 3 (phone-segmentation) de EASYALIGN. Dans le premier script on retrouve les deux premières parties de EASYALIGN. Ensuite, il nous faut modifier le textgrid généré par script1.praat afin de modifier la transcription phonétique et d’ajouter les phonèmes options (indiqués par une *). Le script2.praat utilise ce textgrid modifié pour faire l’alignement des phonèmes optionnels entre la prononciation de l’utilisateur et la transcription du mot proposée par PRAAT. Pour lancer ces scripts PRAAT, nous avons écrit des scripts python praatrun1.py (qui lance le premier script PRAAT et modifie le textgrid) et praatrun2.py qui lance le deuxième script PRAAT.




Enfin, nous avons créé le script phon.py qui regroupe plusieurs étapes de notre projet. La première est la récupération des phonèmes du mot en SAMPA à partir du textgrid créé grâce aux étapes précédentes sur PRAAT. La deuxième étape du script fait la conversion de SAMPA à API à partir du fichier TSV que nous avons créé. La troisième étape,  permet de comparer la prononciation de l'apprenant avec celle du lexique phonétisé. C’est cette dernière étape qui annonce le résultat à l’utilisateur, en lui disant si oui ou non sa prononciation est correcte.
<br>Enfin, nous avons créé le script phon.py qui regroupe plusieurs étapes de notre projet. La première est la récupération des phonèmes du mot en SAMPA à partir du textgrid créé grâce aux étapes précédentes sur PRAAT. La deuxième étape du script fait la conversion de SAMPA à API à partir du fichier TSV que nous avons créé. La troisième étape,  permet de comparer la prononciation de l'apprenant avec celle du lexique phonétisé. C’est cette dernière étape qui annonce le résultat à l’utilisateur, en lui disant si oui ou non sa prononciation est correcte.


==== 2. Java ====
==== 2. Java ====
 
<br>
Nous avons utilisé Java pour choisir aléatoirement quatre mots dans notre recette. C’est avec le POS-tagging de CORENLP que nous avons pu réaliser cette tâche. Dans notre code JAVA, on crée un fichier pour chaque mot (un fichier verbe, un fichier nom, un fichier adjectif et un fichier adverbe) contenant chacun un seul mot de la même catégorie.  
Nous avons utilisé Java pour choisir aléatoirement quatre mots dans notre recette. C’est avec le POS-tagging de CORENLP que nous avons pu réaliser cette tâche. Dans notre code JAVA, on crée un fichier pour chaque mot (un fichier verbe, un fichier nom, un fichier adjectif et un fichier adverbe) contenant chacun un seul mot de la même catégorie.  




=== II. Difficultés ===
=== II. Difficultés ===
 
<br>


==== 1. CoreNLP ====
==== 1. CoreNLP ====


Nous avons rencontré plusieurs difficultés pour la partie JAVA. Premièrement, nous avons remarqué que le POS-tagging de CORENLP que nous avons utilisé n’est pas tout à fait exact. En effet, la catégorie grammaticale des mots n’est pas fiable.
<br>Nous avons rencontré plusieurs difficultés pour la partie JAVA. Premièrement, nous avons remarqué que le POS-tagging de CORENLP que nous avons utilisé n’est pas tout à fait exact. En effet, la catégorie grammaticale des mots n’est pas fiable.
CAPTURE DECRAN  
CAPTURE DECRAN  


Ligne 87 : Ligne 86 :
==== 2. Encodage ====
==== 2. Encodage ====


Les textgrids qui utilisent des mots avec accents “é, è, ê, …” se sauvegardent en utf-16 et non pas en UTF-8.
<br>Les textgrids qui utilisent des mots avec accents “é, è, ê, …” se sauvegardent en utf-16 et non pas en UTF-8.


CAPTURE
CAPTURE
Ligne 95 : Ligne 94 :
==== 3. Lier Java et Python ====
==== 3. Lier Java et Python ====


L’affichage de l’application étant majoritairement effectué en python, nous avons décidé de lier java et python à partir de python ou d’un script bash. Nous avons eu des difficultés pour lancer Corenlp sans utiliser Eclipse (qui déjà nous posait des problèmes).
<br>L’affichage de l’application étant majoritairement effectué en python, nous avons décidé de lier java et python à partir de python ou d’un script bash. Nous avons eu des difficultés pour lancer Corenlp sans utiliser Eclipse (qui déjà nous posait des problèmes).
Comment lier les dependencies avec les scripts ?
Comment lier les dependencies avec les scripts ?




==== 4. Windows vs Linux ====
==== 4. Windows vs Linux ====
Nous avons souhaité faire fonctionner l’application sur les systèmes d’exploitation Linux et Windows.
<br>Nous avons souhaité faire fonctionner l’application sur les systèmes d’exploitation Linux et Windows.
Problèmes de certaines librairies python qui ne fonctionnent pas avec Linux par exemple sounddevice, os.
Problèmes de certaines librairies python qui ne fonctionnent pas avec Linux par exemple sounddevice, os.
Praat et easyalign qui ne sont pas disponibles sous linux. Possibilité de les utiliser et installer avec wine mais problèmes lorsque que l’on veut écrire appeler les scripts praat avec les chemins sur le ‘faux’ disque C:.
Praat et easyalign qui ne sont pas disponibles sous linux. Possibilité de les utiliser et installer avec wine mais problèmes lorsque que l’on veut écrire appeler les scripts praat avec les chemins sur le ‘faux’ disque C:.


Pour remédier à ces problèmes, ayant tous les deux accès à Windows, nous avons décidé de nous concentrer en priorité à ce que l’application fonctionne sous cet OS.
<br>Pour remédier à ces problèmes, ayant tous les deux accès à Windows, nous avons décidé de nous concentrer en priorité à ce que l’application fonctionne sous cet OS.


== Evaluation ==
== Evaluation ==
 
<br>


=== I. Problèmes ===
=== I. Problèmes ===
 
<br>


* erreurs dans le lexique qu’on a utilisé : les deux son o et (c à l’envers). Par exemple olive o ou c à l’envers.
* erreurs dans le lexique qu’on a utilisé : les deux son o et (c à l’envers). Par exemple olive o ou c à l’envers.
Ligne 118 : Ligne 117 :


=== II. Améliorations ===
=== II. Améliorations ===
 
<br>


* Proposer à l’utilisateur des recettes typiques française, pour cela, détecter sur le site un tag “français” par exemple, ou utiliser un site/corpus différent et libre d’utilisation. Le but ultime serait d’utiliser notre propre site de recette avec des plats typiques revisités à la façon Sandouis.
* Proposer à l’utilisateur des recettes typiques française, pour cela, détecter sur le site un tag “français” par exemple, ou utiliser un site/corpus différent et libre d’utilisation. Le but ultime serait d’utiliser notre propre site de recette avec des plats typiques revisités à la façon Sandouis.
Ligne 127 : Ligne 126 :
== Liens ==
== Liens ==


 
<br>
=== I. Bibliographie ===
=== I. Bibliographie ===


 
<br>
Corpus de recettes :
Corpus de recettes :
Marmiton : https://www.marmiton.org/
Marmiton : https://www.marmiton.org/
Ligne 150 : Ligne 149 :
=== II. Lien du projet ===
=== II. Lien du projet ===


 
<br>
Lien GitHub du projet ApprendreEnCuisinant : https://github.com/Louielo/ApprendreEnCuisinant
Lien GitHub du projet ApprendreEnCuisinant : https://github.com/Louielo/ApprendreEnCuisinant

Version du 30 décembre 2020 à 22:08

< M2 IdL — TAL & ALAO/2020-2021

Projet réalisé par Sanda HACHANA et Louis MONGIN

Introduction


Apprendre en Cuisinant est une application ayant pour but d’améliorer la prononciation d’un apprenant en français tout en lui proposant des recettes de cuisine.

I. Problématique


Selon la langue de l’apprenant, celui-ci aura des difficultés à prononcer correctement des sons français éloignés et/ou inexistants dans sa langue maternelle. De plus, il arrive souvent qu’un locuteur confonde deux phonèmes. Par exemple, les phonèmes /y/ et /u/ sont souvent confondus par les locuteurs anglophones car ils sont très proches phonétiquement. Il en est de même pour les phonèmes /œ/ et/ø/. Les voyelles nasales sont également souvent difficiles à prononcer.

II. Notre proposition


Notre application propose à l’utilisateur de s'entraîner à prononcer les sons qui lui posent des problèmes tout en lui faisant un retour sur sa prononciation et de quelle manière le mot doit être prononcé.

III. Présentation du projet


1. Besoins


Apprendre des nouveaux mots en français tout en cuisinant : notre appli permet donc d'apprendre à cuisiner en améliorant son vocabulaire ainsi que sa prononciation dans une langues.

2. Public


Pour des apprenants qui veulent apprendre le français. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et réutiliser ces mots. Ce serait également mieux d'avoir des connaissances en phonétique, savoir lire l'api. L'application s'adresse également tout particulièrement aux personnes qui aiment cuisiner puisque de cette manière, on peut apprendre tout en cuisinant.

3. Objectifs


Créer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en découvrant des nouvelles recettes Avoir un corpus de recette dynamique, une recette différente à chaque utilisation Apprendre des mots selon leur catégorie grammaticale Créer un système pour vérifier la prononciation des phonèmes : script praat en python

Réflexions


I. EasyAlign et les phonèmes en option


Développement


I. Contenu des scripts


Le manuel d'utilisation se trouve dans le README.

1. Python


Nous avons utilisé Python pour plusieurs tâches de notre projet.


La première étape consiste à la création d’un script qui permet de faire du web scraping afin de récupérer une recette aléatoirement sur le site marmiton https://www.marmiton.org/. Pour cela nous avons utilisé la librairie BeautifulSoup. Ce code se trouve dans le script getrecipe.py. Le site de Marmiton propose une “recette au hasard” dans le menu de la page, notre script récupère donc tout d’abord le lien de cette recette.


Ensuite, on récupère les informations de la recette qui nous intéresse, le texte avec les indications ainsi que le titre et les ingrédients. Alors que nous afficherons toutes ces informations à l’utilisateur qui pourra reproduire la recette, nous ne récupérons que le texte pour le choix des mots, pour éviter les erreurs de POS tagging.


Contenu du fichier texte pour CoreNLP Contenu de l’invite de commande



Ensuite, nous avons créé un deuxième script qui permet d'annoncer à l’utilisateur quel mot il doit prononcer et d’enregistrer sa prononciation dans un format audio WAV. On retrouve cette partie dans le script record.py.


Dans un second temps, nous nous sommes occupés de la partie PRAAT. Nous avons créé deux scripts PRAAT (script1.praat et script2.praat) qui effectuent les parties 1 (macro-segmentation), 2 (phonétisation) et 3 (phone-segmentation) de EASYALIGN. Dans le premier script on retrouve les deux premières parties de EASYALIGN. Ensuite, il nous faut modifier le textgrid généré par script1.praat afin de modifier la transcription phonétique et d’ajouter les phonèmes options (indiqués par une *). Le script2.praat utilise ce textgrid modifié pour faire l’alignement des phonèmes optionnels entre la prononciation de l’utilisateur et la transcription du mot proposée par PRAAT. Pour lancer ces scripts PRAAT, nous avons écrit des scripts python praatrun1.py (qui lance le premier script PRAAT et modifie le textgrid) et praatrun2.py qui lance le deuxième script PRAAT.



Enfin, nous avons créé le script phon.py qui regroupe plusieurs étapes de notre projet. La première est la récupération des phonèmes du mot en SAMPA à partir du textgrid créé grâce aux étapes précédentes sur PRAAT. La deuxième étape du script fait la conversion de SAMPA à API à partir du fichier TSV que nous avons créé. La troisième étape, permet de comparer la prononciation de l'apprenant avec celle du lexique phonétisé. C’est cette dernière étape qui annonce le résultat à l’utilisateur, en lui disant si oui ou non sa prononciation est correcte.

2. Java


Nous avons utilisé Java pour choisir aléatoirement quatre mots dans notre recette. C’est avec le POS-tagging de CORENLP que nous avons pu réaliser cette tâche. Dans notre code JAVA, on crée un fichier pour chaque mot (un fichier verbe, un fichier nom, un fichier adjectif et un fichier adverbe) contenant chacun un seul mot de la même catégorie.


II. Difficultés


1. CoreNLP


Nous avons rencontré plusieurs difficultés pour la partie JAVA. Premièrement, nous avons remarqué que le POS-tagging de CORENLP que nous avons utilisé n’est pas tout à fait exact. En effet, la catégorie grammaticale des mots n’est pas fiable. CAPTURE DECRAN

Ensuite, nous avons eu des soucis avec ECLIPSE et nous n’avons alors pas pu continuer notre travail.

2. Encodage


Les textgrids qui utilisent des mots avec accents “é, è, ê, …” se sauvegardent en utf-16 et non pas en UTF-8.

CAPTURE

Donc création d’une fonction qui vérifie l’encodage du fichier.

3. Lier Java et Python


L’affichage de l’application étant majoritairement effectué en python, nous avons décidé de lier java et python à partir de python ou d’un script bash. Nous avons eu des difficultés pour lancer Corenlp sans utiliser Eclipse (qui déjà nous posait des problèmes). Comment lier les dependencies avec les scripts ?


4. Windows vs Linux


Nous avons souhaité faire fonctionner l’application sur les systèmes d’exploitation Linux et Windows. Problèmes de certaines librairies python qui ne fonctionnent pas avec Linux par exemple sounddevice, os. Praat et easyalign qui ne sont pas disponibles sous linux. Possibilité de les utiliser et installer avec wine mais problèmes lorsque que l’on veut écrire appeler les scripts praat avec les chemins sur le ‘faux’ disque C:.


Pour remédier à ces problèmes, ayant tous les deux accès à Windows, nous avons décidé de nous concentrer en priorité à ce que l’application fonctionne sous cet OS.

Evaluation


I. Problèmes


  • erreurs dans le lexique qu’on a utilisé : les deux son o et (c à l’envers). Par exemple olive o ou c à l’envers.
  • on a commencé à lier java et python mais prob pour lancer corenlp avec lignes de commandes
  • Si on enregistre plusieurs phonèmes comme devant être noté en options alors easyalign n’arrive pas à bien fonctionner.
  • Les nasales ne sont pas bien prises en compte dans easyalign

II. Améliorations


  • Proposer à l’utilisateur des recettes typiques française, pour cela, détecter sur le site un tag “français” par exemple, ou utiliser un site/corpus différent et libre d’utilisation. Le but ultime serait d’utiliser notre propre site de recette avec des plats typiques revisités à la façon Sandouis.
  • Automatiser le lien de Python avec Java pour ne pas avoir à demander à l’utilisateur de lui même lancer les scripts java
  • Proposer à l’utilisateur d’indiquer au début quels phonèmes lui posent problème


Liens


I. Bibliographie


Corpus de recettes : Marmiton : https://www.marmiton.org/

Lexique phonétisé : https://gricad-gitlab.univ-grenoble-alpes.fr/pedagogies-multimodales/lexiques-phonetises

Praat : EasyAlign : Phonèmes en option : Remédiation phonétique et phonologique en FLE par une approche multimodale chez les apprenants japonophones - Sylvain Coulange https://dumas.ccsd.cnrs.fr/dumas-01387387/document partie 7.1.2 (p98)

  • Librairies Python :

BeautifulSoup : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

  • Librairie Java :

CoreNLP : https://stanfordnlp.github.io/CoreNLP/


II. Lien du projet


Lien GitHub du projet ApprendreEnCuisinant : https://github.com/Louielo/ApprendreEnCuisinant