Commit 094ce996 authored by Quentin David's avatar Quentin David
Browse files

Adding new page: Prevalidation, small changes here and there. New documentation file for API!

parent 105c43d2
# Cas d'utilisation 1
## Version Simple
Corpus Voix du Nord -> Néoveille -> SDMC
## Version optimisée
Corpus Voix du Nord -> TreeTagger -> Néoveille -> Filtrage sur les phrases contenant les néologismes -> SDMC
## Détails des appels API
### Version simple
#### POST /corpus
Paramètres : Le corpus sera envoyé en paramètre ainsi que les autres paramètres.
``` javascript
{
corpus_content:
[
'Article1 de la voix du Nord',
'Article2 de la voix du Nord',
'Article3 de la voix du Nord'
],
corpus_parameters: {
lang: 'fr',
author: 'La voix du Nord',
date: null
}
}
```
On envoie le corpus à la BDD
La BDD nous renvoie un id correspondant qui sera utilisé pour faire le lien entre le traitement et le corpus.
À titre d'exemple, on imagine que l'id retourné est: __1DT4G__
#### POST /chaine
Paramètres :
``` javascript
{
corpus_id: '1DT4G',
treatment_chain: [
{
module_name: 'Néoveille',
parameters:
[
...
]
},
{
module_name: 'SDMC',
parameters:
[
{
parameter_name: 'motif_type',
value: 'Forme du mot seul'
},
{
parameter_name: 'motif_representation',
value: 'Fermés (sans sous-motifs de même fréquence)'
},
{
parameter_name: 'gap',
value: ["0","0"]
},
...
]
}
]
}
```
Ainsi, le dispatcher saura quel corpus traiter et possèdera aussi la liste des modules concernés dans le traitement ainsi que leur ordre et leurs paramètres.
#### POST /Neoveille/treatment
``` javascript
{
corpus_id: '1DT4G',
parameters: {
// Parameters for Neoveille
}
}
```
Cela va activer le module Néoveille afin qu'il effectue le traitement.
Tout d'abord, il doit récupérer le fichier corpus.
#### GET /corpus/1DT4G
Retourne le corpus
#### PUT /corpus/1DT4G
``` javascript
// Envoi de l'output de Néoveille à la BDD, ainsi que maj du corpus
```
* Retourne ensuite au dispatcher
#### POST /SDMC/treatment
``` javascript
{
corpus_id: '1DT4G',
parameters: {
// Parameters for SDMC
}
}
```
#### GET /corpus/1DT4G
Retourn le corpus
#### PUT /corpus/1DT4G
``` javascript
// Envoi de l'output de Néoveille à la BDD, ainsi que maj du corpus
```
* Retourne ensuite au dispatcher qui s'aperçoit que le traitement est alors terminé
GET /chaine/status/1DT4G renvoie alors 'finished'
Dans son profil, il y aura comme appel
### GET /corpus/user/MY_USER
(besoin d'un résumé juste ?)
Puis il pourra cliquer dessus pour accéder à l'outil de visualisation
### GET /corpus/1DT4G
\ No newline at end of file
...@@ -39,8 +39,11 @@ See [Configuration Reference](https://cli.vuejs.org/config/). ...@@ -39,8 +39,11 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
### Display Results ### Display Results
* Voir comment mieux gérer le redimensionnement * Voir comment mieux gérer le redimensionnement -> Check ?
* Regarder comment avoir un treeview clickable (possible ? ) * Regarder comment avoir un treeview clickable (possible ? ) -> DOne
* Faire une transition pour afficher ou cacher le paneau de droite
* Checker pour faire des titres (Paneau d'annotation, Panneau de document...)
- Panneau de droite : Chaque étiquette doit avoir une couleur
### Others ### Others
...@@ -53,3 +56,97 @@ See [Configuration Reference](https://cli.vuejs.org/config/). ...@@ -53,3 +56,97 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
* Multiple page form: devrais-je utiliser Vuex? Stocker les paramètres dans la session ? * Multiple page form: devrais-je utiliser Vuex? Stocker les paramètres dans la session ?
Besoin de garder momentanément potentiellement un fichier lourd. Besoin de garder momentanément potentiellement un fichier lourd.
* Comment gérer le json des paramètres des modules et la traduction ? (import a file, cfshared locale msg in i18n) * Comment gérer le json des paramètres des modules et la traduction ? (import a file, cfshared locale msg in i18n)
### Questions DEV TEAM
* Risque d'avoir du v-html pour la visualisation ?
* Quel livre se concentrer pour les webservices ?
## Morfetik
### Liste des catégories
#### Formes complexes
* Locutions verbales
* Locutions nominales
* Locutions conjonctives
* Locutions determinatives
* Locutions interjectives
* Locutions pronominales
* Locutions phrases
* Locutions prépositionnelles
* Locutions adjectivales
#### Formes simples
* Sigles
* Interjections
* Adjectifs
* Noms
* Verbes
* Adverbes
* Conjonctions
* Déterminants
* Pronoms
* Prépositions
# Next week
Pré-traitement
Export (ConLLU prêt)
Lundi 7 15h (Discussion avec Jorge API)
Mardi 8 16h (DevTeam pour avis API / Smartphone)
Mercredi 9 15h (CheneTAL)
### Annotation de NEOVEILLE
```
NEOVEILLE:NEOLOGISM
* -> Pas de néologisme détecté
_ -> Inconnu
13 -> Nombre d'occurrence du néologisme
ou
1:3 -> ID_NEOLOGISME & Nombre d'occurrences
ou
1:2:13 -> ID_NEOLOGISME, index du l'expression si néologisme de plusieurs tokens, nb d'occurrences
```
### Annotation de SDMC
```
SDMC:MOTIFS
* -> Pas de motifs détectés
_ -> Inconnu
3:15 -> ID de l'occurrence dans la phrase (Si 3 motifs dans la phrase, alors id est compris entre 1 et 3), & nombre d'occurrences du motif dans le corpus
ou
1:3:12 -> ID_MOTIF_PHRASE, MOTIF_TOKEN_IDX, NB_OCCURRENCE
ou
ID_MOTIF, MOTIF_TOKEN_IDX, NB_OCCURRENCE
```
### Annotation de Morfetik
```
MORFETIK:LOCUTIONS
* -> Pas de locutions détectées
_ -> Inconnu
LOCUTION_TYPE, LOCUTION_TOKEN_IDX,LOCUTION_COUNT
LOC_ADV:1:4
```
\ No newline at end of file
...@@ -2196,6 +2196,14 @@ ...@@ -2196,6 +2196,14 @@
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
"dev": true "dev": true
}, },
"axios": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz",
"integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==",
"requires": {
"follow-redirects": "^1.10.0"
}
},
"babel-eslint": { "babel-eslint": {
"version": "10.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
...@@ -5251,7 +5259,6 @@ ...@@ -5251,7 +5259,6 @@
"version": "1.11.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
"integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
"dev": true,
"requires": { "requires": {
"debug": "^3.0.0" "debug": "^3.0.0"
}, },
...@@ -5260,7 +5267,6 @@ ...@@ -5260,7 +5267,6 @@
"version": "3.2.6", "version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": { "requires": {
"ms": "^2.1.1" "ms": "^2.1.1"
} }
...@@ -7194,8 +7200,7 @@ ...@@ -7194,8 +7200,7 @@
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"multicast-dns": { "multicast-dns": {
"version": "6.2.3", "version": "6.2.3",
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'" "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'"
}, },
"dependencies": { "dependencies": {
"axios": "^0.20.0",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-flag-icon": "^1.0.6", "vue-flag-icon": "^1.0.6",
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<v-tabs-items v-model="tab" class="my-4" vertical> <v-tabs-items v-model="tab" class="my-4" vertical>
<v-tab-item> <v-tab-item>
<!-- Local files -->
<v-card outlined height=8em> <v-card outlined height=8em>
<v-card-text <v-card-text
class="justify-center text-center" class="justify-center text-center"
...@@ -28,9 +29,11 @@ ...@@ -28,9 +29,11 @@
</v-card> </v-card>
</v-tab-item> </v-tab-item>
<v-tab-item> <v-tab-item>
<!-- Input text -->
<InputText /> <InputText />
</v-tab-item> </v-tab-item>
<v-tab-item> <v-tab-item>
<!-- Profile text -->
<v-card outlined height=8em> <v-card outlined height=8em>
<v-card-text> <v-card-text>
<v-select :items="test_profile_corpus" <v-select :items="test_profile_corpus"
...@@ -44,6 +47,7 @@ ...@@ -44,6 +47,7 @@
</v-card> </v-card>
</v-tab-item> </v-tab-item>
<v-tab-item> <v-tab-item>
<!-- Shared corpus -->
<v-card outlined height=8em> <v-card outlined height=8em>
<v-card-text <v-card-text
class="justify-center text-center" class="justify-center text-center"
...@@ -75,7 +79,7 @@ ...@@ -75,7 +79,7 @@
selected: null, selected: null,
test: { "fr": false, "en": false}, test: { "fr": false, "en": false},
test_profile_corpus: ["My_Corpus1","À la recherche du temps perdu", "Libé_1980_2010"], test_profile_corpus: ["My_Corpus1","À la recherche du temps perdu", "Libé_1980_2010"],
test_common_corpus: ["CommonCorpus1", "LIPN_Articles", "Sequoia"] test_common_corpus: ["CommonCorpus1", "LIPN_Articles", "Sequoia","LaVoixDuNord_Solr"]
}), }),
components: { components: {
InputText, InputText,
...@@ -93,7 +97,7 @@ ...@@ -93,7 +97,7 @@
"local-file-hint":"Formats acceptés: PDF, TXT, ...", "local-file-hint":"Formats acceptés: PDF, TXT, ...",
"profile-corpus-label":"Choisissez le corpus que vous voulez traiter", "profile-corpus-label":"Choisissez le corpus que vous voulez traiter",
"profile-corpus-hint":"Vous pouvez définir vos corpora dans votre profil", "profile-corpus-hint":"Vous pouvez définir vos corpora dans votre profil",
"shared-corpus-label":"Choisissez lecorpus que vous voulez traiter" "shared-corpus-label":"Choisissez le corpus que vous voulez traiter"
}, },
"en":{ "en":{
"local-file":"From a local file", "local-file":"From a local file",
......
...@@ -72,12 +72,26 @@ export default { ...@@ -72,12 +72,26 @@ export default {
modules: modules:
[ [
{ {
name: "Morfetik", name:"Néoveille",
description: "Dictionnaire morphologique", description: "Détecteur de néologismes",
parameters: parameters:
[
{
label: "Méthode d'analyse",
name: "analysis_method",
type: "List-Mono",
items: ["Reference Dico","POS-Tagger","Stoplist","Stopre","POS-Tagger & Reference Dico",
"POS-Tagger & Reference Dico & Stoplist","POS-Tagger & Reference Dico & Stoplist & Stopre"
]
},
{ {
"Parameter 1": "This is parameter 1", label: "Output",
name: "output",
type: "List-Mono",
items: ["Neologisms","Neologisms & context","Neologisms, context & counts"],
default_value: "Neologisms & context"
} }
]
}, },
{ name: "SDMC", { name: "SDMC",
description: "Outil de fouille de motifs", description: "Outil de fouille de motifs",
...@@ -122,8 +136,9 @@ export default { ...@@ -122,8 +136,9 @@ export default {
} }
], ],
}, },
{ name:"Néoveille", {
description: "Détecteur de néologismes", name: "Morfetik",
description: "Dictionnaire morphologique",
parameters: parameters:
{ {
"Parameter 3": "This is parameter 1", "Parameter 3": "This is parameter 1",
......
<template>
<v-container>
<v-card
outlined
class="my-5"
>
<v-card-title class="justify-center py-6">
<h2 class="display-1">{{ $t('pre-treatment-title') }}</h2>
</v-card-title>
<div class="px-12" v-if="show">
<v-checkbox v-model="tokenization" label="Tokenization" />
<v-checkbox v-model="utf_conversion" label="Conversion UTF" />
<v-checkbox v-model="sentence_segmentation" label="Segmentation en phrase" />
</div>
<v-row class="px-12" v-if="!show">
<v-col v-for="option in pretreatment_options" :key="option.name">
<v-checkbox v-model="option.value" :label="option.fr_name" />
</v-col>
</v-row>
</v-card>
</v-container>
</template>
<script>
export default {
data: () => ({
show: false,
sentence_segmentation: true,
utf_conversion: false,
tokenization: true,
pretreatment_options: [
{name:"sentence_segmentation", fr_name:"Segmentation en phrase",value: true},
{name:"tokenization", fr_name: "Segmentation en mot", value: true},
{name:"POS-Tagging", fr_name:"Analyse morphosyntaxique", value: true},
{name:"utf_conversion", fr_name: "Conversion UTF",value: false},
]
})
}
</script>
<i18n>
{
"fr":{
"pre-treatment-title":"Options de pré-traitement"
},
"en":{
"pre-treatment-title":"Pre-treatment options"
}
}
</i18n>
\ No newline at end of file
...@@ -4,24 +4,27 @@ ...@@ -4,24 +4,27 @@
<v-card-title class="justify-center py-6"> <v-card-title class="justify-center py-6">
<h1 class="display-3"> {{ $t('module-choice') }} </h1> <h1 class="display-3"> {{ $t('module-choice') }} </h1>
</v-card-title> </v-card-title>
<DefinePreTreatment />
<DefinePipeline class="my-5" @add-module="updateChain" /> <DefinePipeline class="my-5" @add-module="updateChain" />
<ModuleChain class="my-5" <ModuleChain class="my-5"
v-if="chain.length > 0" v-if="chain.length > 0"
@delete-module="deleteModuleFromChain" @delete-module="deleteModuleFromChain"
:added_modules="chain"/> :added_modules="chain"/>
</v-card> </v-card>
<v-btn block color="success" to="/validation"> {{ $t('treatment-validation') }} </v-btn> <v-btn block color="success" to="/prevalidation"> {{ $t('treatment-validation') }} </v-btn>
</v-container> </v-container>
</template> </template>
<script> <script>
import DefinePipeline from '@/components/DefineTreatment/DefinePipeline' import DefinePipeline from '@/components/DefineTreatment/DefinePipeline'
import ModuleChain from '@/components/DefineTreatment/ModuleChain' import ModuleChain from '@/components/DefineTreatment/ModuleChain'
import DefinePreTreatment from '@/components/DefineTreatment/DefinePreTreatment'
export default { export default {
name: 'Treatment', name: 'Treatment',
components: { components: {
DefinePipeline, DefinePipeline,
ModuleChain, ModuleChain,
DefinePreTreatment,
}, },
data: () => ({ data: () => ({
chain: [], chain: [],
......
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
<v-card-title class="justify-center py-6"> <v-card-title class="justify-center py-6">
<h2 class="display-1">Chaîne de traitement</h2> <h2 class="display-1">Chaîne de traitement</h2>
</v-card-title> </v-card-title>
<div>
<v-timeline <v-timeline
class="ma-5" class="ma-5 align-center"
dense dense
> >
<div <div
...@@ -27,14 +28,13 @@ ...@@ -27,14 +28,13 @@
</v-col> </v-col>
</v-row> </v-row>
<v-card-text> <v-card-text>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Doloribus vel voluptatibus dolore explicabo delectus rerum possimus nemo rem.
Beatae, dolorum. Aliquid quas doloremque est, dolorem earum voluptatem dignissimos omnis velit!
</v-card-text> </v-card-text>
</v-card> </v-card>
</v-timeline-item> </v-timeline-item>
</div> </div>
</v-timeline> </v-timeline>
</div>
</v-card> </v-card>
</template> </template>
<script> <script>
...@@ -49,3 +49,9 @@ ...@@ -49,3 +49,9 @@
props: ["added_modules"], props: ["added_modules"],
} }
</script> </script>
<style scoped>
.timeline {
max-width: 50%;
justify-content: center;
}
</style>
\ No newline at end of file
<template> <template>
<v-container fluid> <v-container fluid>
<v-row no-gutters> <v-row no-gutters class="fill-height">
<!-- Left Panel -->
<v-col cols="3"> <v-col cols="3">
<v-treeview <v-treeview
class="fixed24"