Parseur syntaxique développé au NLCT de la Dublin City University. Au LIPN on travaille avec la variante de LORG maintenue par Joseph Le Roux.
Sur ubuntu:
sudo apt-get install libboost-all-dev
Sur mageia (64-bit):
sudo urpmi lib64boost-devel
Voici les commandes la suite de commandes pour compiler les sources de LORG avec cmake:
$ cd LORG_Release $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release ..
Et si vous voulez changer le répertoire cible pour l'installation des binaires (normalement installés sur /usr/bin
):
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/lorg/LORG-Release/ ..
La réponse doit ressembler à:
-- The C compiler identification is GNU 4.7.2 -- The CXX compiler identification is GNU 4.7.2 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Boost version: 1.53.0 -- Found the following Boost libraries: -- regex -- program_options -- system -- filesystem -- thread -- unit_test_framework -- serialization -- /usr/include -- Found Intel TBB -- Configuring done -- Generating done -- Build files have been written to: /home/lorg/LORG-Release/build
Maintenant on peut complier:
$ make
Et si tout va bien, installer…
$ make install
Pour vérifier que tout s'est bien passé, on affiche l'aide de <tt>tb2gram</tt> et <tt>twostagelorgparser</tt> <code> $ cd .. $ ./bin/tb2gram –help $ ./bin/twostagelorgparser –help </code>
Le programme tb2gram lit un corpus annoté en format Penn Treebank (.ptb) pour produire une grammaire hors contexte probabiliste (PCFG). Cette grammaire sera utilisée par le parseur syntaxique twostage_lorgparser
.
Pour l'anglais, on va entraîner le parseur avec les sections 2-21 du Penn Treebank, qui se trouve sur /home/corpus/Treebank-3/parsed/mrg/wsj/
dans le serveur lipn-rcln. Avant de lancer l'entraînement, il faut créer un répertoire sur lipn-rcl où écrire la grammaire de sortie. À partir du répertoire racine de LORG (LORG-Resease), on envoie:
$ mkdir data/training/english/english_grammar.utilisateur.date
Maintenant on peut commencer l'entrainement, qui peut prendre quelques heures. La commande qui suit entraine avec les sections 2 à 21 du Penn Treebank avec l'option des messages explicites (-v) et elle produira six étapes de division/melange/lissage (option par défaut) avec 8 fils d'exécution (–nbthreads), tout en remplaçant les tokens qui avec occurrence=1 par les signatures ordonnées d'après son gain d'information en anglais (-w EnglishIG).
$ export WSJ=/home/corpus/Treebank-3/parsed/mrg/wsj/ $ export TB2OUTPUT=/home/lorg/LORG-Release/data/training/english/english_grammar.jorge.11dec13/ $ ./bin/tb2gram $WSJ/0[[2-9]] $WSJ/1* $WSJ/2[[01]] -v --nbthreads 8 -w EnglishIG -u 1 -o $TB2OUTPUT/english_grammar
Pour voir le détail des options de tb2gram
, voir l'option --help
où le README du code source.
Si tout s'est bien passé, le contenu du répertoire $TB2OUTPUT/englishgrammar
, mais elle ne marche que pour l'anglais.
doit contenir les fichiers de la grammaire:
<code>
$ ll $TB2OUTPUT
total 426352
-rw-r–r– 1 lorg lorg 1708005 déc. 11 17:59 englishgrammarbase
-rw-r–r– 1 lorg lorg 3043333 déc. 11 17:59 englishgrammarsmoothed1
-rw-r–r– 1 lorg lorg 5962637 déc. 11 17:58 englishgrammarsmoothed2
-rw-r–r– 1 lorg lorg 12551585 déc. 11 17:58 englishgrammarsmoothed3
-rw-r–r– 1 lorg lorg 26922814 déc. 11 17:58 englishgrammarsmoothed4
-rw-r–r– 1 lorg lorg 60927726 déc. 11 17:58 englishgrammarsmoothed5
-rw-r–r– 1 lorg lorg 133219576 déc. 11 17:59 englishgrammarsmoothed6
-rw-r–r– 1 lorg lorg 191847960 déc. 11 17:58 englishgrammarsmoothed6grammars.arc
-rw-r–r– 1 lorg lorg 382460 déc. 11 17:59 englishgrammarsmoothed6lexicon.arc
-rw-r–r– 1 lorg lorg 1056 déc. 11 17:58 englishgrammarsmoothed_6_nt.arc
</code>
==== Parsing ====
=== Préconditions ===
Le fichier d'entrée doit être déjà segmenté en phrase, une phase par ligne. Pour le présent exemple, on donnera en entrée les premières phrases d'un discours de Martin Luther King (sur lipn-rcln, on peut le trouver dans
/home/lorg/LORG-Release/data/parsing/input/dream.txt).
<code>
I say to you today, my friends, so even though we face the difficulties of today and tomorrow, I still have a dream.
It is a dream deeply rooted in the American dream.
I have a dream that one day this nation will rise up and live out the true meaning of its creed:
“We hold these truths to be self-evident: that all men are created equal.”
outils
</code>
=== Segmentation en unités lexicales (Tokenisation) ===
Le fichier d'entrée du parseur doit être segmenté en accord avec le corpus avec lequel le parseur a été entrainé. C'est à dire, si on a entrainé avec un Penn Treebank le texte à analyser devra être tokenisé de la même façon que le Penn Treebank.
Dans l'installation de lipn-rcln, le script
ptb.tokenizer.sed (répertoire
scripts) permet de segmenter avec les mêmes critères que le Penn Treebank. La commande suivante segmente le texte
dream.txt en unité lexicales distinctes séparées par un espace et écrire la sortie sur
dream.ptb.txt
<code>
LORG-Release$ ./scripts/ptb.tokenizer.sed data/parsing/input/dream.txt > data/parsing/input/dream.ptb.txt
</code>
L'étape de tokenisation peut être évité en passant l'option
-%%-%%input-mode raw à
twostagelorgparser
[[lorg@lipn-rcln|LORG-Release]]$ export TRAINING=/home/lorg/LORG-Release/data/training/english/english_grammar.9dec13/ [[lorg@lipn-rcln|LORG-Release]]$ export PARSING=/home/lorg/LORG-Release/data/parsing/ [[lorg@lipn-rcln|LORG-Release]]$ ./bin/twostage_lorgparser $PARSING/input/dream.ptb.txt \ -g $TRAINING/english_grammar_smoothed_6 -o $PARSING/output/dream.txt.tok.parsed \ -w EnglishIG --input-mode tok --parser-type kmax --k 1 --verbose
Cette commande appel twostage_lorg
avec les options suivantes:
Le résultat de la commande:
Setting ouput file to /home/lorg/LORG-Release/data/parsing//output/dream.txt.tok.parsed Setting test file to /home/lorg/LORG-Release/data/parsing//input/dream.ptb.txt Not removing punctuation from input. Input mode set to: tok creating the parser... using 1 thread(s) to parse using threshold 0.0001 for chart construction using standard c2f thresholds Setting grammar to /home/lorg/LORG-Release/data/training/english/english_grammar.9dec13//english_grammar_smoothed_6. Grammar set create intermediate grammars computing priors gram_conf contains lex_unknown_map info overwriting unknown_map from command-line (if you don't want this, edit the grammar) Setting unknown mapping type to English IG tests mapping ok Start parsing process. overall time: 6.51949s
Et le résultat de l'analyse sur le fichier dream.txt.tok.parsed
- ID: 1 - length: 27 - time: 0.640125 - solutions: 1 - sentence: I say to you today , my friends , so even though we face the difficulties of today and tomorrow , I still have a dream . -3.95993 : ( (S (S (NP (PRP I)) (VP (VBP say) (PP (TO to) (NP (PRP you))) (NP (NN today)) (, ,) (NP (PRP$ my) (NNS friends)))) (, ,) (RB so) (S (SBAR (RB even) (IN though) (S (NP (PRP we)) (VP (VBP face) (NP (NP (DT the) (NNS difficulties)) (PP (IN of) (NP (NN today) (CC and) (NN tomorrow))))))) (, ,) (NP (PRP I)) (ADVP (RB still)) (VP (VBP have) (NP (DT a) (NN dream)))) (. .))) - ID: 2 - length: 11 - time: 0.0734208 - solutions: 1 - sentence: It is a dream deeply rooted in the American dream . -4.14508 : ( (S (NP (PRP It)) (VP (VBZ is) (NP (NP (DT a) (NN dream)) (ADJP (RB deeply) (JJ rooted) (PP (IN in) (NP (DT the) (JJ American) (NN dream)))))) (. .)))