Spécifications de TXM 0.8

Discussions

  • Toute valeur vide de propriété, de structure ou de mot, sera et sera affichée : UNDEF
  • Dans information : on prend les N premières valeurs sans répétition et sans tri alphabétique

Réunion 04/07/2017 : "chaines de la GUI" -- CGUI

  1. établissement du workflow (documentation et outils) : production de CGUI dans dévs → choix final (v1) pour le projet (clé+valeur) → traduction → maintenance
  2. politique de nommage des clés et outils associés
  3. construction d'une étape v1 pour viser la possibilité de donner la GUI à traduire le plus vite possible et date de livraison associée
  4. Challenge : un minimum de ré-architecturation de TXM pour pouvoir à la fois proposer des nouveautés (traduire, setups, extensions) et continuer la ré-architecturation

Résultat discussion

Estimation date : début 2018

Spécifications

  • Restructuration du code de TXM : #690 #2113 wiki archi 079
    • structure des plugins :
      • core
        • structure des objets interne de TXM (résultats, corpus, etc.)
      • rcp
        • structure des UI de TXM (éditeurs, vues, page de préférence)
    • structure des préférences
    • structure du SVN
    • structure de l'externalisation des messages

Split

Le split est fini quand :

  1. split des commandes
    • on a sorti tout le code TBX+RCP dans des plugins (classes, extensions, messages)
      1. on a supprimé tous les cycles de plugins
    • les préférences sont gérées indépendamment dans chaque plugin
      1. déplacement des préférences
      2. vérifier les valeurs
      3. abandonné l'usage du fichier install.prefs
    • on peut builder la RCP
  2. split des strings
    • déplacer les strings dans les classes Messages et fichier properties des plugins
    • suppression des chaînes non-utilisées
  3. restructuration du code, hiérarchie des objets de résultat, mutualisation des commandes et éditeurs RCP
    • normaliser tous les objets en TXMResult, TXMPreferences, TXMEditor, TXMParameters, etc.
    • implémenter les méthodes abstraites des commandes TXMResult : canCompute, saveParameters, loadParameters
    • normaliser les charts avec les TXMResults
  4. début de normalisation de l'interface
    • suppression des boites de dialogues modales
  5. finalisation
    • la Toolbox devient le gestionnaire de corpus TXM
    • toutes les commandes fonctionnent normalement :
      • messages en console et ui (onglet editeur, boutons, etc) (voir TXMResult.getName(), getSimpleName(), getDetails(), ADAPTEURS, etc.)
      • préférences
      • calculs
    • le code de TXM 0.7.9 et ses plugins (Analec, Edition…) a été reversé dans TXM 0.8

Documentation (voir Recette 1)

  • documenter en Javadoc les “Direct Known Subclasses:” de TXMResult. Exemple : Partition, Specificities, etc.
  • documenter en Javadoc l'introduction de la classe Partition (org.txm.searchengine.cqp.corpus.Partition) :
    • actuellement “A partition on a corpus.”
    • → modifier :
      • introduire l'architecture de l'objet : une partition est composée de Part(s)
      • donner un exemple de création avec manipulation des paramètres
      • donner un exemple de manipulation de l'objet : itérer sur getParts()
      • préciser “Implements TXMResult”
      • lister les paramètres d'appel de la commande
  • documenter en Javadoc l'introduction de la classe Part

Restructuration

Formalisation du nouveau système :

  • chaque commande/plug-in contient un AbstractPreferenceInitializer étendu qui définit des clés de préférences/paramètres et des valeurs de préférences par défaut
  • chaque résultat étend TXMResult ou ChartResult qui centralisent maintenant toutes les commandes de chargement de paramètres/prefs par défaut, de computing, rendering, etc.
  • une annotation @Parameter a été créée pour automatiser un grand nombre de tâches (chargement automatique de préférences par défaut vers paramètres de l'objet ; sauvegarde auto dans le noeud de prefs et flush du fichier de persistance d'un résultat ; transfert automatique des paramètres de l'objet vers les Widget d'un éditeur (champs de paramètres) ; transfert des valeurs des Widgets d'un éditeur vers les paramètres d'un objet avant son computing ; clonage automatique des paramètres de types primitifs (boolean, int, etc.)
  • un état des paramètres d'un compute à N-1 est sauvegardé dans chaque TXMResult/ChartResult permettant de tester lors d'un compute si un paramètre de type COMPUTING ou RENDERING a changé. Ce système permet d'agir finement sur le computing ou le rendering, ex. : si la query d'une Progression a changé ⇒ faire tous les traitements ; si seulement la SUP a changé ⇒ faire seulement tel traitement ; si seulement la couleur du chart a changé ⇒ pas de computing, juste rendering (et juste changement de la couleur pas de recréation totale du chart) ; etc.
  • le système utilise maintenant une vraie hiérarchie en arbre pour les TXMResult. Chaque TXMResult possède un parent, ce qui permet des compute en cascade, clonage en cascade, lazy loading, simplification des delete en cascade et assurance des appels des méthodes de libération des ressources, etc.
  • les éditeurs ont été centralisés dans TXMEditor et ChartEditor qui gèrent le mécanisme de compute, de transfert des paramètres de Widget vers result et result vers Widgets, et pas mal d'autres choses
  • TXMResult définit des méthodes abstraites getSimpleName(), getName(), getDetails(), getValidFileName(), etc. permettant de générer des noms qui vont être utilisés à différents endroits (log, UI, etc.)
  • une commande héritant de TXMResult doit implémenter les méthodes du tableau suivant pour profiter pleinement du système
    • pour un développement progressif, une implémentation partielle des méthodes est possible

TBX

“computing fin” et “rendering fin” précisent si un passage a été fait pour vérifier et optimiser le compute et le render de la commande grâce à hasParameterChanged() à savoir : ne pas recomputer la totalité du result ou ne pas recréer le chart complet en fonction du type de paramètre qui a changé depuis le last computing ou le last rendering. Au-delà des optimisations (suppression des appels inutiles à R/CWB) cela peut permettre, pour les results de type table, de garder le tri/sélection de lignes, ou pour les charts, de conserver le zoom/pan/sélection entre deux rendus.

  • x = OK
  • - = inutile, implémentations vides
  • ? = à revérifier et optimisations ou computing/rendering fin possible
  • . = sous-classes
  • * = priorité haute
TXMResult loadParameters() @Parameter _compute() canCompute() saveParameters() computing fin rendering fin
Concordance* x x x x x -
Contrast
.AbsoluteFrequency
.Chi2
.RelativeFrequency
.Specificities2
Cooccurrence* x x x x non fait -
Index* x x x x - -
.TSIndex
Information/Diagnostic* - x x - - ? -
InternalView* x x x x x x -
LexicalTable* x x x x -
Lexicon* ? ? x x ? -
ParaBrowser
Preview -
QueryAutoCooccurence -
QueryCooccurence -
QueryIndex -
Referencer* x x x x -
Selection
Specificities* - x x x - -
Summary (utilité TXMResult?)
TIGERSearch
ChartResult loadParameters() @Parameter _compute() canCompute() saveParameters() computing fin rendering fin
AHC* - - x -
CA* - x ? x - ?
Eigenvalues* - - - x - -
PartitionDimensions* - - x x - - x
Progression* - x x x - x
SpecificitiesSelection* - x - x - - x
TextsBalance x (mais bug dataset) x x x non fait
WordCloud x x x x x x
TXMObject loadParameters() @Parameter _compute() canCompute() saveParameters() computing fin rendering fin
Alignment
Base
Corpus
.Corpus
..MainCorpus
..Subcorpus
Edition
Page
Partition
Partition
Project
SavedQuery
Script
Text
Workspace

RCP

TXMEditor _createPartControl() @Parameter updateResultFromEditor() updateEditorFromResult() Infos supplémentaires
ConcordanceEditor
CooccurrencesEditor
IndexEditor x x - x
.DictionnaryEditor
InformationEditor x x - x
InternalViewEditor x x - x BUG: les cancel des PropertiesSelector ne fonctionnent pas
LexicalTableEditor BUG: commandes en double dans le menu contextuel
QueryIndexEditor x x - x
ReferencerEditor
SpecificitiesEditor x x - x BUG: manque le choix de la propriété lexicale qui était dans l'ancien Dialog
SVGGraphicEditor
TIGERSearchEditor
TSIndexEditor
Chartditor __createPartControl() @Parameter updateResultFromEditor() updateEditorFromResult() Infos supplémentaires
AHCChartEditor
CAFactorialMapChartEditor
EigenvaluesChartEditor - - - -
PartitionDimensionsEditor x x - -
ProgressionEditor x x x x
SpecificitiesSelectionEditor X X - -
TextsBalanceEditor x x - -
WordCloudEditor x x - -

Restauration des entrées des commandes dans les localisations RCP

Commande Toolbar “Tools” Context menu Vue Corpus Menu “Tools” Context menu Editor
AHC*
CA*
Concordance* x x x manque, lignes vers ???
Cooccurrence x x x manque lignes vers concordances
Eigenvalues* - - - -
Index* x x x
Information/Diagnostic* x x manquant -
LexicalTable* x x x x (4 commandes)
Lexicon* x x x
PartitionDimensions* x x x
Progression* x x x -
Referencer* x x x refToConc (ok mais prob de label)
Specificities* x manquant x x (lignes vers chart)
SpecificitiesSelection* - - - -
TextsBalance x x x
WordCloud x x x

les lignes étoilés sont prioritaires

Restauration de l'ordre des commandes dans les menus et toolbars

Utiliser : toolbar:org.txm.rcp.toolbartools?after=ID

où ID est l'id de la commande qui va précéder la commande actuelle, ex. de locationURI dans org.txm.ca.rcp :

toolbar:org.txm.rcp.toolbartools?after=org.txm.partition.rcp.handlers.ComputePartitionDimensionsBarChart

placera la commande APRES la commande de dimensions de partition.

Ordre des commandes 0.7.9

Toolbar :

  • Partagée result (org.txm.rcp.toolbarresult)
    1. Export chart
    2. Export data
    3. Delete

Corpus :

0.7.9 et 0.8

  • Corpus (toolbarcorpus)
    1. Edition (OK)
    2. Information/Diagnostic (OK)
    3. InternalView (Est en dernier pour l'instant)
    4. Delete (supprimé, passé dans toolbarresult)
    5. Subcorpus (OK)
    6. Partition (OK)
    7. Recode a property (En attente màj plugin)
    8. Update a corpus (En attente màj plugin)
  • Corpus (toolbartools)
    1. Lexicon (OK)
    2. Index (OK)
    3. Concordance (OK)
    4. Cooccurrence (OK)
    5. Progression (OK)
    6. Referencer (OK)
  • Corpus (à checker)
    1. Send to R
    2. Preferences
    3. Create new file
    4. Open file
    5. Rexecute last Groovy script
    6. Export
  • Sous-Corpus
    1. Edition (OK)
    2. Information/Diagnostic (OK)
    3. InternalView (Est en dernier pour l'instant)
    4. Delete (Est en premier pour l'instant)
    5. Subcorpus (OK)
    6. Partition (OK)
    7. Recode a property (En attente màj plugin)
    8. Update a corpus (En attente màj plugin)
    9. Lexicon (OK)
    10. Index (OK)
    11. Concordance (OK)
    12. Cooccurrence (OK)
    13. Progression (OK)
    14. Referencer (OK)
    15. Specificities (OK)
  • Sous-Corpus (à checker)
    1. Send to R
    2. Preferences
    3. Create new file
    4. Open file
    5. Rexecute last Groovy script
    6. Export

Partition :

0.7.9 et 0.8

  • Partition (toolbarcorpus)
    1. Information/Diagnostic
  • Partition (toolbartools)
    1. Delete (supprimé, passé dans toolbarresult)
    2. LexicalTable
    3. Recode a property (à garder sur un objet Partition ?)
    4. Update corpus (à garder sur un objet Partition ?)
    5. Index
    6. Specificities
    7. CA
    8. AHC
  • Partition (à checker)
    1. Preferences
    2. Create new File
    3. Open file
    4. Rexecute last Groovy script
  • Lexicon
    1. aucune commande spécifique
  • Index
    1. LexicalTable
  • Concordance
    1. Cooccurrence
  • Cooccurrence
    1. aucune commande spécifique
  • Progression
    1. aucune commande spécifique

* Referencer

  1. aucune commande spécifique
  • LexicalTable
    1. Specificities
    2. CA
    3. AHC
  • Specificities
    1. aucune commande spécifique
  • CA
    1. AHC
  • AHC
    1. aucune commande spécifique

Traduction

Pour traduire, on a besoin :

  • d'un code stable → le split est fini (voir si dessous)
  • d'un système + ou - automatisé de diagnostic des messages de TXM (chaînes non-traduites, chaînes inutiles (properties ok mais pas de clé), chaînes non externalisées, chaînes en double, chaines cassées (clé OK mais pas de properties)
  • de chaînes stables : 1) commencer par externaliser les chaines du code 2) supprimer String inutiles 3) merger les répétitions de chaines d'un plugin
  • Doit-on externaliser les messages techniques (non : c'est long, oui : permet de corriger les chaines sans Eclipse) ? Doit-on traduire les messages techniques ? (non : c'est long et technique (encore moins de personnes dispo pour traduire) oui : est ce que tous les messages sont destinés au dev ou admin ?)
  • de clés de chaines stables à l'aide des specs : refactoriser les clés actuelles en suivant les recommandations https://groupes.renater.fr/wiki/txm-info/public/nommage_symboles_externalisation
  • d'un outil d'aide à la traduction qui : propose des trad, permet de trad toutes les langues, permet de recharger les chaines l'interface (+ ou - wysiwyg)
    • début de réponse : Ressource Bundle editor (modifie les fichiers de l'install directory, prévoir un moyen de téléverser/merger le taff) → Extension à faire pour TXM
    • début de réponse : Transifex (and co) outils externalisés → pas de maj automatique dans l'interface :'(

A FAIRE :

  • Voir quelles chaînes partagées
  • Externaliser les chaînes restantes
  • Finir de traduire FR, EN et RU

Etat des chaînes après split

Chaînes manquantes

(A récupérer dans 0.7.9)

  • ObjectExplorer_9
  • ConcordancesEditor_52

Chaînes non-utilisées / broken strings

(à virer, ou pas)

A FAIRE - AUTRE - ETC.

  • renommage de résultat :
    • solution possible : ajouter un userName aux TXMResult
  • liens entre commandes
    • rétablir les anciens liens, sans dépendance de plugin (avec l'API des commandes ?)
    • en rajouter
    • lier les éditeurs

Relations avec le portail

  • Mettre à jour la TBX du portail
  • Faire fonctionner le portail en mode “lite” (sans stats et charts)
  • Faire fonctionner le portail en mode “complet”

Recettes

Recette 0 - installation multiple

  • télécharger l'installeur de TXM 0.8
  • installer TXM 0.8
    • à la question “Souhaitez vous remplacer le TXM déjà installé sur cette machine ?” répondre par 'Non' (parmi un choix [Oui (par défaut), Non, Abandonner) ou check + cliquer sur Continuer
    • à la question “Souhaitez vous récupérer les corpus du TXM déjà installé sur cette machine ?” répondre par 'Oui' (parmi un choix [Oui (par défaut), Non, Abandonner) ou uncheck + cliquer sur Continuer
  • lancer TXM 0.8
  • vérifier son fonctionnement
  • lancer le TXM précédemment installé
  • vérifier son fonctionnement

Solutions

solution installeur spécifique par système

  • Télécharger l'installeur de TXM 0.8 pour Windows ou Ubuntu
  • installer TXM 0.8
  • lancer TXM 0.8
  • au premier lancement sélectionner l'espace de travail à utiliser
  • constater qu'un nouveau espace de travail est créé

solution installeur universel

(si basé sur Java, il faut que Java soit embeddé)

solution archive

  • Télécharger l'archive de TXM 0.8 pour Windows ou Ubuntu
  • des-archiver TXM 0.8
  • lancer TXM 0.8
  • au premier lancement sélectionner l'espace de travail à utiliser
  • constater qu'un nouveau espace de travail est créé

Recette 1 : scriptage de la plateforme

  • écrire une macro de calcul des spécificités chronologiques
    • trouver la documentation des objets et des commandes pour réaliser le calcul :
      • trouver dans la documentation de l'API de la toolbox :
        • la documentation de l'objet Partition (ou de TableLexicale, plus tard) la signature d'appel permettant d'itérer sur les parties en récupérant pour chaque partie t, prop(i), f(i) et F(i)
        • la documentation de l'objet Part, Lexique de la Part, etc.
        • la documentation du calcul de Specificities la signature d'appel permettant de calculer une spécificité de (T, t, F, f)
      • trouver dans la documentation de l'API de la RCP :
        • la documentation de la commande Concordance
        • la documentation des liens hypertextes internes d'appel de commandes (API ?)
    • code :
      • itérer sur les regroupements de parties par niveaux en calculant les spécificités et en stockant les résultats
      • trier et filtrer les résultats (seuils en paramètres)
      • afficher un tableau HTML contenant des liens vers la Progression (la progression doit afficher des délimitations en rapport avec les parties de la partition pour pouvoir vérifier la densité chronologique)

Recette 2 : annotation de mots en concordance

  • importer le corpus TDM80J avec le module TXT+CSV avec annotation par TreeTagger
  • lancer une concordance de XXX sur le corpus
  • afficher la propriété 'frpos' du pivot
  • constater que la valeur est incorrrecte
  • lancer l'annotation
  • corriger les valeurs
  • sauver l'annotation
  • recalculer la concordance de XXX
  • vérifier que la propriété 'frpos' est bien correcte

Recette 3 : extension installation de TreeTagger

  • installer l'extension 'TreeTagger Installer'
  • faire un import presse-papier du texte de la recette 3
  • lancer la commande Propriétés sur le corpus créé et vérifier que les mots sont bien étiquetés avec 'frpos' et 'frlemma'
public/roadmap_0.8.txt · Dernière modification: 2018/04/26 14:27 par sebastien.jacquot@univ-fcomte.fr