Géométrie et volumétrie de corpus pris en charge par TXM

TXM s’appuie sur le moteur de recherche CQP qui a ses propres limites.

De part son architecture, TXM ajoute des limites de calcul supplémentaires :

  • dénombrements&combinatoire (ex : les requêtes intermédiaires du calcul des cooccurrences)
  • résultats intermédiaires (ex : parties de partitions)
  • tris (ex: trier une concordance) : prend du temps et de l'espace mémoire (pour stocker le résultat et pour afficher le résultat)
  • traitements d'import (ex : appel de TreeTagger)

Géométrie

Currently the main corpus geometry target for TXM is about hundreds of texts of about dozens or hundreds of thousand words with medium to dense XML-TEI markup, some properties for each word (pos, lemma…) and for each text (metadata).

This is oriented by the textometry corpus analysis methodology, that TXM implements. That methodology tries to balance text reading (with scholarly editions, concordance…) with various quantitative synthesis tools.

e.g: you will not be able to import 600 000 TXT texts directly today.

That been said, any feedback to speed up the import process is very welcome and we have some development tickets related to that:

We could try to help to develop a response within the TXM platform. For example a partnership that develops an alternative corpus geometry target like this :

  • lots of small to medium texts
  • lots of words
  • shallow or no text structure
  • some properties for each word and each text

Volumétrie

L'architecture actuelle de TXM répond à une demande de volumétrie d'1 million de mots maximum (fixée en 2007). Il n'est donc pas étonnant de rencontrer diverses limites à partir de quelques dizaines de millions de mots.

Ces limites sont différentes selon les systèmes d'exploitation, par exemple la non fermeture partielle de fichiers temporaires dans un module d'import provoquait une interruption de l'import sous Windows (seulement) jusqu'à sa correction dans TXM 0.7.1 (sortie bientôt), et la version de TXM (bureau, portail). Nous savons déjà que ces limites apparaissent lors de l'import ou lors de l'exécution de commandes.

Cas rencontrés

Nous sommes intéressés par l'amélioration de la plateforme pour les questions de volumétrie.

Pour pouvoir envisager un passage à l'échelle qui alignera l'ensemble de la plateforme sur la limite théorique du moteur CQP (voir la FAQ pour les détails), nous sommes très intéressés par des retours précis sur les limites rencontrées actuellement :

  1. machine utilisée
  2. corpus utilisé
  3. TXM utilisé
  4. procédure d'import précise
  5. messages d'import et erreurs détaillés
  6. commandes exécutées
  7. messages d'exécution et erreurs détaillés

La compilation de ces informations dans une page du wiki des utilisateurs nous aidera à former une base pour la programmation de cette activité.

AL (2013-03-11)

  • Machine Windows XP (3.25 Go de RAM)
  • TXM 0.7
  • Réglages de TXM.ini (dans $USER/Application Data/.txm)

.txm
-vmargs
-Xms1024m
-Xmx1024m

  • Le moteur CQP lancé en mode mémoire
  • Corpus “gghf17-20” de 9 558 665 tokens
  • Pas de problème à l'import (XML-TEI / BFM)
  • La commande Edition lancée après une autre commande (index ou vocabulaire) provoque l'arrêt immédiat de TXM sans aucun message d'erreur
  • Une tentative de retour au texte à partir d'une concordance provoque

** Impossible d'afficher en plein texte : java.lang.NullPointerException

  • Sur un corpus plus petit (près de 6 000 000 tokens), le même problème surgit après un plus grand nombre d'opérations
  • Le problème ne se manifeste pas lorsque le moteur de recherche est en “mode réseau”

SO (2013-03-12)

  • machine utilisée : Mac OsX 10.6.8 3.6 GHz Intel Core i5 mémoire 4Go 1333MHz DDR3
  • corpus utilisé : corpus d'exemples
    • 1 exemple / ligne sous la forme : [numéro] Blabla de l'exemple
    • les exemples sont séparés par 2 lignes vides
    • ils se répartissent en 11 sous-corpus (selon la source des exemples - Est Républicain, Frantext, etc.)
    • 2 fichiers par sous-corpus : 22 x 13,3 Mo de fichiers txt + 1 metadata.csv (id \t corpus), 57.484.452 “mots”
  • TXM utilisé : TXM 0.7
  • procédure d'import précise :
    • module TXT+CSV
    • encodage de caractères UTF-8
    • langue principale : Annoter le corpus + fr
  • messages d'import et erreurs détaillés

Chargement des paramètres d'import depuis le fichier : /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/import.xml
Sauvegarde des paramètres d'importation...
Execution du script : /Users/so/TXM/scripts/import/quickLoader.groovy
Trying to read metadatas from: /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/metadata.csv
-- IMPORTER - Reading source files with extension [txt, TXT]
Create simple XML files (22 files)
......................
Tokenizing 22 files
......................
Tagging sentences of 22 files
......................
Building xml-tei-txm (22 files)
......................
-- INJECTING METADATAS - from csv file: /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/metadata.csv
Injecting metadata: [corpus] in texts of directory /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
-- ANNOTATE - Running NLP tools
Building TT source files (22) from directory /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
Applying TreeTagger on dir: /Users/so/TXM/corpora/testsrlf/treetagger (22 files)
......................
Building stdoff files (22) from dir:/Users/so/TXM/corpora/testsrlf/treetagger to /Users/so/TXM/corpora/testsrlf/annotations
......................
Injecting stdoff files (22) data from /Users/so/TXM/corpora/testsrlf/annotations to xml-txm files of /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
-- COMPILING - Building Search Engine indexes
Compiling 22 files
......................
pAttrs : [id, lbid, frpos, frlemma]
sAttrs : [text:+name+id+type+path+corpus+base+project, s:+n, p:+id, txmcorpus:+lang]
-- EDITION - Building edition
......................
Importation terminée : 4h, 12 min et51 sec (15171050 ms)
Erreur : le corpus ne sera pas chargéTESTSRLF
Paramètres : /Users/so/TXM/corpora/testsrlf/import.xml
HTMLc: /Users/so/TXM/corpora/testsrlf/HTML/TESTSRLF : true
REGISTRYc: /Users/so/TXM/corpora/testsrlf/registry/testsrlf : false
DATAc: /Users/so/TXM/corpora/testsrlf/data/TESTSRLF : true
Moteur de recherche lancé en mode mémoire.
Moteur statistique lancé.connecté.
Rechargement des vues...
TXM prêt.

  • commandes exécutées : Edition, Description, Concordance, Index
  • messages d'exécution et erreurs détaillés
    • Edition :
       ** Échec de chargement de l'édition de TESTSRLF
      ** Erreur : MainCorpus.java: getStructuralUnits, l.263 -> org.txm.searchengine.cqp.clientExceptions.CqiClientException: java.lang.NullPointerException 
    • Description :
       java.lang.NullPointerException
      	at org.txm.searchengine.cqp.corpus.MainCorpus.getProperties(MainCorpus.java:236)
      	at org.txm.functions.diagnostic.Diagnostic.stepGeneralInfos(Diagnostic.java:144)
      	at org.txm.rcpapplication.commands.base.Diagnostique$1.run(Diagnostique.java:117)
      	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 
    • Concordances :
       Could not open the editor: An exception was thrown during initialization 
    • Index :
       org.txm.searchengine.cqp.clientExceptions.CqiClientException: java.lang.NullPointerException
      	at org.txm.searchengine.cqp.corpus.MainCorpus.getSize(MainCorpus.java:198)
      	at org.txm.rcpapplication.editors.vocabulary.VocabularyEditor.createPartControl(VocabularyEditor.java:887)
      	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670)
      	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)
      	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
      	at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289)
      	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945)
      	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850)
      	at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842)
      	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793)
      	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
      	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789)
      	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773)
      	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2756)
      	at org.txm.rcpapplication.commands.function.ComputeVocabulary.openEditor(ComputeVocabulary.java:79)
      	at org.txm.rcpapplication.commands.function.ComputeVocabulary.execute(ComputeVocabulary.java:64)
      	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
      	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
      	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
      	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
      	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
      	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
      	at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
      	at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
      	at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
      	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465)
      	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1270)
      	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3974)
      	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3613)
      	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
      	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
      	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
      	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
      	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
      	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
      	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
      	at org.txm.rcpapplication.Application.run(Application.java:114)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
      	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
      	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
      	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
      	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
      	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
      	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
      	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
      Caused by: java.lang.NullPointerException
      	at org.txm.searchengine.cqp.MemCqiClient.attributeSize(MemCqiClient.java:177)
      	at org.txm.searchengine.cqp.corpus.MainCorpus.getSize(MainCorpus.java:196)
      	... 57 more
      java.lang.ClassCastException: org.eclipse.ui.internal.ErrorEditorPart cannot be cast to org.txm.rcpapplication.editors.vocabulary.VocabularyEditor
      	at org.txm.rcpapplication.commands.function.ComputeVocabulary.openEditor(ComputeVocabulary.java:78)
      	at org.txm.rcpapplication.commands.function.ComputeVocabulary.execute(ComputeVocabulary.java:64)
      	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
      	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
      	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
      	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
      	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
      	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
      	at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
      	at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
      	at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
      	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480)
      	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465)
      	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1270)
      	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3974)
      	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3613)
      	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
      	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
      	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
      	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
      	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
      	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
      	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
      	at org.txm.rcpapplication.Application.run(Application.java:114)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
      	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
      	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
      	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
      	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
      	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
      	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
      	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
  • Remarques : Lors d'un précédant test, la description du corpus s'affichait, ainsi que l'Edition et aucun message d'erreur ne s'affichait pour la concordance, qui retournait seulement un résultat vide. C'est ainsi que j'ai obtenue l'information de la taille du corpus en “mots”. Je vais tenter de reproduire ce cas précédant.

SO (2013-03-12)

  • machine utilisée : idem
  • corpus utilisé : idem
  • TXM utilisé : idem
  • procédure d'import précise : idem
  • messages d'import et erreurs détaillés :

Chargement des paramètres d'import depuis le fichier : /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/import.xml
Sauvegarde des paramètres d'importation...
Execution du script : /Users/so/TXM/scripts/import/quickLoader.groovy
Trying to read metadatas from: /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/metadata.csv
-- IMPORTER - Reading source files with extension [txt, TXT]
Create simple XML files (22 files)
......................
Tokenizing 22 files
......................
Tagging sentences of 22 files
......................
Building xml-tei-txm (22 files)
......................
-- INJECTING METADATAS - from csv file: /Users/so/Sites/RLF_Expl/testsExplRLF/testsRLF/metadata.csv
Injecting metadata: [corpus] in texts of directory /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
-- ANNOTATE - Running NLP tools
Building TT source files (22) from directory /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
Applying TreeTagger on dir: /Users/so/TXM/corpora/testsrlf/treetagger (22 files)
......................
Building stdoff files (22) from dir:/Users/so/TXM/corpora/testsrlf/treetagger to /Users/so/TXM/corpora/testsrlf/annotations
......................
Injecting stdoff files (22) data from /Users/so/TXM/corpora/testsrlf/annotations to xml-txm files of /Users/so/TXM/corpora/testsrlf/txm/TESTSRLF
......................
-- COMPILING - Building Search Engine indexes
Compiling 22 files
......................
pAttrs : [id, lbid, frpos, frlemma]
sAttrs : [text:+name+id+type+path+corpus+base+project, s:+n, p:+id, txmcorpus:+lang]
-- EDITION - Building edition
......................
Importation terminée : 4h, 11 min et50 sec (15110412 ms)
Erreur : le corpus ne sera pas chargéTESTSRLF
Paramètres : /Users/so/TXM/corpora/testsrlf/import.xml
HTMLc: /Users/so/TXM/corpora/testsrlf/HTML/TESTSRLF : true
REGISTRYc: /Users/so/TXM/corpora/testsrlf/registry/testsrlf : false
DATAc: /Users/so/TXM/corpora/testsrlf/data/TESTSRLF : true
Moteur de recherche lancé en mode mémoire.
Moteur statistique lancé.connecté.
Rechargement des vues...
TXM prêt.

  • commandes exécutées : Edition, Description, Concordance, Index
  • messages d'exécution et erreurs détaillés :
    • Edition :
      Ouverture de l'édition de TESTSRLF
      Remarque : Tous les fichiers sont présents dans l'édition
    • Description : Aucun message. Remarque : il n'y a que 21 fichiers dans la description des propriétés de structures :

text
id (21) = CanardA, EstA, EstB, FrWacA, FrWacB, FrantextA, FrantextB, HBaudiovisuelA, HBaudiovisuelB, HBconvA, HBconvB, HBcourrierA, HBcourrierB, HBfabricationA, HBfabricationB, HBpubliA, HBpubliB, HBtempA, HBtempB, HBwebA.
name (21) = CanardA, EstA, EstB, FrWacA, FrWacB, FrantextA, FrantextB, HBaudiovisuelA, HBaudiovisuelB, HBconvA, HBconvB, HBcourrierA, HBcourrierB, HBfabricationA, HBfabricationB, HBpubliA, HBpubliB, HBtempA, HBtempB, HBwebA.
path (1) = "".
type (1) = txt.
* Concordance :
Concordance de <[frlemma="manger"]> dans le corpus TESTSRLF
Aucun résultat

  • Index :

Index de <[]> avec la propriété [word] dans le corpus TESTSRLF
Aucun résultat

  • La différence avec le cas SO (2013-03-12) : Dans le cas présent, j'avais précédemment importé une version plus légère du corpus testsRLF (11 fichiers au lieu de 22, pas de metadata.csv) et je n'avais pas supprimé ce corpus correctement importé avant d'effectuer un nouvel import.

AL (2013-08-09)

problème d'importation du corpus BFM2013, voir le ticket 299 sur la forge @ cbp.

AF ((2017-02-01)

Géométrie :

  • 2 000 fichiers
  • ??? mots

Calculs :

  • CAH text@id

Problématique d'import et de calculs.

J'ai tenté d'importer une grande quantité de texte mais j'ai dû, après 66h et 100% de l'importation faite, fermer TXM via le gestionnaire des taches. Je souhaite faire une classification d'un grand nombre d'ouvrages (2000 environ) par la fréquence des mots. Pensez-vous que cela soit faisable via TXM?

J'ai converti en .TXT au format Unicode UTF-8, grâce au logiciel Calibre, tous les ouvrages, et les ai importés dans TXM. Cela a pris plus de 4 jours et a planté à la fin mais mon corpus a tout de même été importé (message dans la console: “Error while logging event loop exception”). Après avoir attendu 24h sans avoir la main sur TXM, j'ai fermé l'application via le gestionnaire de tâches. Depuis, j'ai des messages d'erreur sur la description de mon corpus et ne peux pas faire de partition de mon corpus (TXM ne répond plus. Peut-être parce que le corpus est trop gros?) . J'ai joint à mon premier mail le journal des erreurs et ma configuration.

Je ne sais pas si je suis obligée de réimporter mes fichiers (mais c'est très long et j'ai le risque d'avoir le même problème au bout de 4 jours) ou si je peux travailler sur le corpus importé.

public/volumetrie_txm.txt · Dernière modification: 2017/02/02 16:39 par slh@ens-lyon.fr