Utiliser l'analyseur FRMG

Une fois installée la chaîne de traitement Alpc, quatre modes d'utilisation sont disponibles, à savoir:

  • utilisation directe en ligne de commande
  • utilisation via le shell FRMG (frmg_shell)
  • utilisation d'un serveur de parseur (parserd)
  • utilisation d'un service Web (frmg_server.pl)

Mode ligne de commande

Ce mode est seulement présenté pour des raisons historiques et pour aider à l'intégration de FRMG.

Il s'appuie sur les commandes frmg_lexer et frmg_parser.

  1. > echo "il mange une pomme." | frmg_lexer | frmg_parser -loop -disamb -conll
  2. <latency_time> 102ms
  3. <token> E1F5 .
  4. <token> E1F4 pomme
  5. <token> E1F3 une
  6. <token> E1F2 mange
  7. <token> E1F1 il
  8. Answer:
  9. L = [-disamb,-conll]
  10. SId = E1
  11. N = 5
  12. A = 0
  13. ## sentence=E1 mode=full best=yes
  14. 1 il il CL CLS n=s|p=3|s=suj 2 suj _ _ R_subjectsubject 5
  15. 2 mange manger V V m=ind|n=s|p=3|t=pst 0 root _ _ R_root -1
  16. 3 une un D DET n=s 4 det _ _ R_detdet 2
  17. 4 pomme pomme N NC n=s|s=c 2 obj _ _ R_objectobject 4
  18. 5 . . PONCT PONCT _ 2 ponct _ _ R_ponctvoid 1

L'option '-loop' pour frmg_parser permet en fait de traiter un séquence de phrases. Il est donc possible de traiter le contenu d'un fichier

> cat myfile.txt | frmg_lexer | frmg_parser -loop -disamb -conll -multi

Par ailleurs, le lexer frmg_lexer accepte une chaîne de caractères en entrée et appelle le segmenteur sxpipe dessus. Mais il est également possible de passer au lexer le résultat d'une telle segmentation sous forme d'un DAG (ou treillis de mots).

> echo "il mange une pomme." | sxpipe | dag2udag | frmg_lexer | frmg_parser -loop -disamb -conll

Mode Shell

Le mode shell, avec la commande frmg_shell, est conseillé pour une première utilisation de l'analyseur FRMG.

  1. > frmg_shell
  2. Welcome on FRMG shell [type help for more information]
  3. (default: sentence 1)> help
  4. FRMG shell commands
  5. quit : exit this shell
  6. (alias: q | bye )
  7. ....
  8. (default: sentence 1)>:conll il mange une pomme
  9. ...
  10. ## sentence=E1 mode=full best=yes
  11. 1 il il CL CLS n=s|p=3|s=suj 2 suj _ _ R_subjectsubject 5
  12. 2 mange manger V V m=ind|n=s|p=3|t=pst 0 root _ _ R_root -1
  13. 3 une un D DET n=s 4 det _ _ R_detdet 2
  14. 4 pomme pomme N NC n=s|s=c 2 obj _ _ R_objectobject 4
  15. [1] il mange une pomme
  16. (default: sentence 1)>1:xml:|
  17. ...
  18. (default: sentence 1)> quit
  19. Goodbye ! à bientôt

La commande peut être aussi utilisée en mode batch

> echo ":xml:passage il mange une pomme." | ./frmg_shell --quiet > foo.xml

Elle peut également être utilisée pour traiter des corpus jouets. Par exemple, la commande suivante traite les phrases de mycorpus.txt pour produire des sorties en format CONLL (schéma FTB), stockées sous mycorpus/ à raison d'une phrase par fichier.

> echo "corpus mycorpus.txt mycorpus :conll" | frmg_shell --batch

ou (pour des sorties en format Passage/XML et mode robust) :

> echo "corpus mycorpus.txt mycorpus :passage:xml:robust" | frmg_shell --batch

Voici l'aide (à peu près à jour) des options de FRMG Shell

Mode Serveur

Ce mode, un peu plus compliqué à mettre en oeuvre, permet cependant le traitement de gros corpus sur des clusters de machines. Il repose sur l'utilisation du serveur parserd (qui devra tourner sur chaque noeud du cluster) et sur le contrôleur dispatch.pl qui a la charge d'envoyer les phrases du corpus aux noeuds, récupérer les résultats, et gérer les problèmes éventuels.

Le serveur parserd peut être lancé à l'aide de parserd_service, installé par alpi.

  1. > parserd_service status
  2. parserd is stopped
  3. > parserd_service start
  4. Starting parserd: Running the server user=clerger group=alpage [ OK ]

Le traitement d'un corpus peut alors être lancé, en précisant un certain nombre d'options dans un fichier de configuration (ou directement sur la ligne de commande)

  1. > cat mycorpus.conf
  2. ## path to dags (word lattices) for mycorpus built with SxPipe
  3. # using something along: cat mycorpus/file.txt | sxpipe -u -l=fr | dag2udag > mycorpus.dag/file.udag
  4. dagdir mycorpus.dag/
  5. # specify that that dag files use suffixes .udag or .udag.bz2 (compressed)
  6. dagext udag
  7. ## where and how to save the results
  8. ## the following will save everything under mycorpus.results with archives of the form <file>.tar.gz for each
  9. ## file of the corpus, and a file per sentence in the archive.
  10. results mycorpus.results
  11. collsave
  12. compress
  13. tar
  14. ## emits some statistics in <file>.log.bz2 where <file> is one of the corpus files
  15. time
  16. date
  17. stats
  18. ## output schema for the sentences
  19. #dis_xmldep
  20. #passage
  21. #udep
  22. conll
  23. # Control of the parser
  24. # partial analysis
  25. robust
  26. # timeout of 300s to kill parses that takes too long
  27. timeout 300
  28. # Specif of the hosts and of the number of workers per host
  29. # two instances on nodeA
  30. host nodeA_1@nodeA
  31. host nodeA_2@nodeA
  32. # alternatively, the following lines use a shortcut notation for 8 instances on nodeA and 8 on nodeB
  33. host nodeA_%i@nodeA^i=1..8
  34. host nodeB_%i@nodeB^i=1..12
  1. Et finalement,
  2. > dispatch.pl --config mycorpus.conf
  3. ....

Mode Service Web

Le package FRMG inclut le script frmg_server.pl qui permet de lancer un service Web sous Mojolicious, par exemple en lançant

morbo ./frmg_server.pl

Des réglages de configuration peuvent être fournis dans frmg_server.conf, (voir le modèle d'exemple frmg_server.conf.sample).

Il suffit ensuite d'ouvrir une fenêtre de navigateur sur l'adresse et port retourné lors du démarrage du service (par défaut: http://127.0.0.1:3000/process) . C'est ce genre de service WEB qui est utilisé par le visualisateur de sorties syntaxiques de ce site. Il est directement accessible ici. Dans l'interface WEB, le champ 'Options' peut être rempli par les mêmes options disponible pour le shell FRMG (mais séparées par des espaces plutôt que par ':').

NOTES: pour l'instant (Mars 2018), alpi m'installe pas de base tous les éléments nécessaires au service WEB. En particulier, il faut installer le module Perl DepXML

alpi --prefix=<prefix> --pkg=DepXML

La compilation de DepXML va requérir d'autres modules Perl (Devel::Declare, B::Hooks::EndOfScope), pouvant être installés via cpanm