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/).
### Display Results
* Voir comment mieux gérer le redimensionnement
* Regarder comment avoir un treeview clickable (possible ? )
* Voir comment mieux gérer le redimensionnement -> Check ?
* 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
......@@ -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 ?
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)
### 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 @@
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
"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": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
......@@ -5251,7 +5259,6 @@
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
"integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
"dev": true,
"requires": {
"debug": "^3.0.0"
},
......@@ -5260,7 +5267,6 @@
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
......@@ -7194,8 +7200,7 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"multicast-dns": {
"version": "6.2.3",
......
......@@ -9,6 +9,7 @@
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'"
},
"dependencies": {
"axios": "^0.20.0",
"core-js": "^3.6.5",
"vue": "^2.6.11",
"vue-flag-icon": "^1.0.6",
......
......@@ -12,6 +12,7 @@
<v-tabs-items v-model="tab" class="my-4" vertical>
<v-tab-item>
<!-- Local files -->
<v-card outlined height=8em>
<v-card-text
class="justify-center text-center"
......@@ -28,9 +29,11 @@
</v-card>
</v-tab-item>
<v-tab-item>
<!-- Input text -->
<InputText />
</v-tab-item>
<v-tab-item>
<!-- Profile text -->
<v-card outlined height=8em>
<v-card-text>
<v-select :items="test_profile_corpus"
......@@ -44,6 +47,7 @@
</v-card>
</v-tab-item>
<v-tab-item>
<!-- Shared corpus -->
<v-card outlined height=8em>
<v-card-text
class="justify-center text-center"
......@@ -75,7 +79,7 @@
selected: null,
test: { "fr": false, "en": false},
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: {
InputText,
......@@ -93,7 +97,7 @@
"local-file-hint":"Formats acceptés: PDF, TXT, ...",
"profile-corpus-label":"Choisissez le corpus que vous voulez traiter",
"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":{
"local-file":"From a local file",
......
......@@ -72,12 +72,26 @@ export default {
modules:
[
{
name: "Morfetik",
description: "Dictionnaire morphologique",
name:"Néoveille",
description: "Détecteur de néologismes",
parameters:
[
{
"Parameter 1": "This is parameter 1",
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"
]
},
{
label: "Output",
name: "output",
type: "List-Mono",
items: ["Neologisms","Neologisms & context","Neologisms, context & counts"],
default_value: "Neologisms & context"
}
]
},
{ name: "SDMC",
description: "Outil de fouille de motifs",
......@@ -122,8 +136,9 @@ export default {
}
],
},
{ name:"Néoveille",
description: "Détecteur de néologismes",
{
name: "Morfetik",
description: "Dictionnaire morphologique",
parameters:
{
"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 @@
<v-card-title class="justify-center py-6">
<h1 class="display-3"> {{ $t('module-choice') }} </h1>
</v-card-title>
<DefinePreTreatment />
<DefinePipeline class="my-5" @add-module="updateChain" />
<ModuleChain class="my-5"
v-if="chain.length > 0"
@delete-module="deleteModuleFromChain"
:added_modules="chain"/>
</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>
</template>
<script>
import DefinePipeline from '@/components/DefineTreatment/DefinePipeline'
import ModuleChain from '@/components/DefineTreatment/ModuleChain'
import DefinePreTreatment from '@/components/DefineTreatment/DefinePreTreatment'
export default {
name: 'Treatment',
components: {
DefinePipeline,
ModuleChain,
DefinePreTreatment,
},
data: () => ({
chain: [],
......
......@@ -3,38 +3,38 @@
<v-card-title class="justify-center py-6">
<h2 class="display-1">Chaîne de traitement</h2>
</v-card-title>
<v-timeline
class="ma-5"
dense
>
<div
v-for="(module, index) in added_modules"
:key="module.name">
<v-timeline-item icon="mdi-arrow-down">
</v-timeline-item>
<v-timeline-item icon="fa-cubes" fill-dot>
<v-card outlined elevation="6">
<v-row align="center">
<v-col>
<v-card-title>
{{ module.name }}
</v-card-title>
</v-col>
<v-col class="text-right mr-3">
<v-btn icon @click="deleteModule(index)">
<v-icon>fa-times-circle</v-icon>
</v-btn>
</v-col>
</v-row>
<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>
</v-timeline-item>
</div>
</v-timeline>
<div>
<v-timeline
class="ma-5 align-center"
dense
>
<div
v-for="(module, index) in added_modules"
:key="module.name">
<v-timeline-item icon="mdi-arrow-down">
</v-timeline-item>
<v-timeline-item icon="fa-cubes" fill-dot>
<v-card outlined elevation="6">
<v-row align="center">
<v-col>
<v-card-title>
{{ module.name }}
</v-card-title>
</v-col>
<v-col class="text-right mr-3">
<v-btn icon @click="deleteModule(index)">
<v-icon>fa-times-circle</v-icon>
</v-btn>
</v-col>
</v-row>
<v-card-text>
</v-card-text>
</v-card>
</v-timeline-item>
</div>
</v-timeline>
</div>
</v-card>
</template>
<script>
......@@ -48,4 +48,10 @@
},
props: ["added_modules"],
}
</script>
\ No newline at end of file
</script>
<style scoped>
.timeline {
max-width: 50%;
justify-content: center;
}
</style>
\ No newline at end of file
<template>
<v-container fluid>
<v-row no-gutters>
<v-row no-gutters class="fill-height">
<!-- Left Panel -->
<v-col cols="3">
<v-treeview
class="fixed24"
:items="items"
activatable
return-object
:active.sync="selection"
:active.sync="selectionLeft"
>
<template v-slot:append="{item}">
<v-icon
v-if="!isSourceDocumentForIcon(item)"
@click="downloadFile(item.link)"
>mdi-download</v-icon>
</template>
</v-treeview>
</v-col>
<v-col cols="6">
<!-- Middle Panel -->
<v-col :cols="mainPanelGridSize">
<div
class="pa-5 fixed"
>
<h1> {{ selection }} </h1>
Lorem ipsum dolor, sit amet consectetur adipisicing elit.
Quaerat, quam! Ipsam et eum beatae cupiditate exercitationem,
fugit porro nihil nostrum, nesciunt,
fuga natus reiciendis facilis mollitia! Ea iste ex quisquam?
<div v-if="selectionLeft != null && selectionLeft[0] != null && selectionLeft[0].content != null">
<h1 class="text-center"> {{ selectionLeft[0].content.title }}</h1>
<br/>
<p class="text-justify" v-html="formatSourceDocument((selectionLeft[0].content.contents))"></p>
<!-- <p class="text-justify">{{ formatSourceDocument((selectionLeft[0].content.contents)) }}</p> -->
</div>
<div v-else>
<h1 class="text-center"> Outil de visualisation </h1>
<br>
Choisissez un document sur le panneau de gauche.
</div>
</div>
</v-col>
<v-col cols="3">
<!-- Right Panel -->
<v-col cols="3" v-if="isSourceDocument(selectionLeft)">
<v-treeview
class="fixed24"
:items="items_annotation"
color="white"
activatable
return-object
v-model="selectionRight"
selectable
>
</v-treeview>
</v-col>
......@@ -35,21 +52,44 @@
</v-container>
</template>
<script>
import