vendredi 18 décembre 2009

Exécuter un traitement ou une chaîne de traitement sous UIMA (avec UIMAJ et en local)

Update 20100326: Définition de traitement et chaînes de traitement + précision de l'utilisation d'Eclipse pour l'exécution Update 20100212: Validé pour Apache UIMAJ 2.2.*-incubating et  UIMAJ 2.3.*-incubating

Apache UIMA ne distingue pas la notion de traitement de celle de chaîne de traitement. Il ne manipule que des chaînes de traitement qui a minima ne compte qu'un seul traitement/composant à exécuter. La description de la chaîne est réalisée à partir d'un fichier descripteur qui est
  • soit configuré comme primitif si il désigne un traitement élémentaire. La classe implémentant le traitement sera alors désignée.
  • soit configuré comme aggregate si il désigne une chaîne de traitement. Dans ce cas il référencera d'autres descripteurs de fichiers primitif ou Aggregate.
C'est de cette manière que l'on peut réaliser de l'encapsulation de traitement.

Les différentes manières d'exécuter un traitement sont illustrés avec des descripteurs présents dans les exemples de code fourni avec UIMAJ.
$UIMA_HOME/examples/descriptors/analysis_engine/
EN LIGNE DE COMMANDE
Le UIMA_HOME/README indique comment réaliser un test d'installation. Il s'agit d'exécuter un AnnotatorEngine et d'observer si le résultat correspond au traitement attendu à l'aide de l'outil $UIMA_HOME/bin/runAE.sh
  • Argument 1, on indique un descripteur d'AnnotatorEngine, par exemple : PersonTitleAnnotator.xml, SimpleTokenAndSentenceAnnotator.xml, SimpleNameRecognizer_RegEx_TAE.xml 
  • Argument 2, un répertoire source où se trouve des fichiers .txt à traiter
  • Argument 2, un répertoire de destination des résultats produits
$UIMA_HOME/bin/runAE.sh $UIMA_HOME/examples/descriptors/analysis_engine/SimpleTokenAndSentenceAnnotator.xml $UIMA_HOME/examples/data/ $UIMA_HOME/examples/data/processed
A TRAVERS UN GUI HORS ECLIPSE 
Par exemple à l'aide de la commande $UIMA_HOME/bin/documentAnalyzer.sh
  • InputDirectory doit diriger vers : applications/apache-uimaj/examples/data
  • OutputDirectory doit diriger vers : applications/apache-uimaj/examples/data/processed
  • Location of Analysis Engine XML Descriptor : applications/apache-uimaj/examples/descriptors/analysis_engine/SimpleTokenAndSentenceAnnotator.xml
Puis Run et double cliquer sur un fichier pour lancer le Java Viewer (en ligne de commande il s'agit du programme annotationViewer.sh)

L'exécution GUI hors eclipse peut aussi se faire avec le cpeGui.sh qui requiert de spécifier des descripteurs de composant d'import et d'export des données à traiter (à savoir un collection reader et des cas consummer). Des exemples sont disponibles dans le répertoire exemples de UIMA. Si vous exporter en XMI, il vous faudra aussi lancer à la main l'annotation viewer pour visualiser les résultats.

AU SEIN D'ECLIPSE
  1. Cela requiert de créer un projet Eclipse pour le développement d'un composant UIMA
  2. Pour exécuter les outils veiller à ajouter dans les libraries du projet en plus de uima-core et uima-tools, uima-cpe ! Tous ces packages se trouvent dans UIMA_HOME/lib
  3. Cliquer sur le projet avec le bouton droit dans la vue Package Explorer > Run as > Run Configurations > Java Application
  4. Puis
    1. Dans Name: donnez le nom que vous souhaitez à la place New_configuration, par exemple DocumentAnalyser
    2. Dans Project: vérifiez que vous êtes dans le bon projet Eclipse
    3. Dans Main Class: cherchez la classe DocumentAnalyzer, vous devez trouver (si vous avez bien ajouter le package uima-tools) org.apache.uima.tools.docanalyzer.DocumentAnalyzer
  5. Apply > Run ; le DocumentAnalyser exportera les résultats en XMI et exécutera l'Annotation Viewer
Pour visualiser les fichiers XMI préalablement générés
  1. réalisez la même démarche avec la classe Annotation Viewer

    Installer et utiliser OpenNLP au sein de UIMA (Version 1.3. sous linux)

    OpenNLP est à la fois
    • un regroupement de projets libres liés au traitement automatique des langues (TAL) 
    • et un ensemble d'outils de TAL développés en Java, qui utilisent la bibliothèque d'apprentissage automatique OpenNLP Maxent et qui permettent les traitements suivant : le découpage en phrases, la détection d'entités nommées, la résolution de la coréférence...
    Nous parlons ici de l'ensemble d'outils de TAL qui utilisent la bibliothèque Maxent.
    En dec 2009, avec la version apache uima java 2.2.2 en incubation, seuls des wrappers pour la version opennlp-1.3.0 sont disponibles malgré le fait que opennlp en soit à la version 1.4.3.
    Pour cette version seuls deux modèles de langue sont disponibles : anglais et espagnol. La version 1.4.3 possède en plus des modèles pour l'allemand et le thai. Les sources s'accompagnent de scripts qui montrent comment entrainer le POS tagger.

    1. Récupération et installation de OpenNLP
    Une documentation expliquant comment compiler, configurer, exécuter, entrainer... est disponible en version HTML dans l'archive docs/README.html ou en ligne). 
    Il faut d'une part récupérer les outils (opennlp-tools) et les modèles (opennlp-models). Les modèles doivent restés compressés, ils seront utilisés en l'état.
    wget http://prdownloads.sourceforge.net/opennlp/opennlp-tools-1.3.0.tgz?download
    wget -rc http://opennlp.sourceforge.net/models-1.3/
    find opennlp.sourceforge.net/models-1.3/ -name "index*" -exec rm {} + ;
    mv opennlp.sourceforge.net/models-1.3 opennlp-models-1.3.0
    zip -r opennlp-models-1.3.0.zip opennlp-models-1.3.0
    rm -r opennlp.sourceforge.net
    Ensuite il faut compiler les outils (requiert JAVA_HOME, ant est dispo dans lib/). Après avoir migrer les deux archives dans votre répertoire d'applications (ici $APPLI).
    tar -xvzf opennlp-tools-1.3.0.tgz
    ln -s opennlp-tools-1.3.0 opennlp
    cd opennlp
    ./build.sh
    Une bibliothèque java d'outils a été générée dans le répertoire output.
    Par la même occasion on désarchive les modèles dans le répertoire de opennlp
    export OPENNLP_HOME=$APPLI/opennlp
    unzip opennlp-models-1.3.0.zip -d $OPENNLP_HOME
    ln -s opennlp-models-1.3.0 $OPENNLP_HOME/models
    2. Utilisation en ligne de commande
    Il est nécessaire de rajouter cette nouvelle bibliothèque ainsi que d'autres utiles pour faire tourner les outils.
    Si ce n'est pas déjà fait rajouter à la fin de votre ~/.bashrc les lignes suivantes (n'oubliez pas ensuite de faire un "source ~/.bashrc" afin de rendre effectif ces changements pour votre terminal courant) .
    export OPENNLP_HOME=$APPLI/opennlp
    export CLASSPATH=${OPENNLP_HOME}/lib/ant.jar:${OPENNLP_HOME}/lib/jakarta-ant-optional.jar:${OPENNLP_HOME}/lib/jwnl-1.3.3.jar:${OPENNLP_HOME}/lib/maxent-2.4.0.jar:${OPENNLP_HOME}/lib/trove.jar:${OPENNLP_HOME}/output/opennlp-tools-1.3.0.jar:${CLASSPATH}
    Chaque outil de la bibliothèque opennlp-tools est décrit par une classe qui contient un "main" qui réalise le traitement correspondant. Certains de ces outils supposent le traitement d'autres pour pouvoir fonctionner. La plupart prennent un argument, le chemin vers le modèle qu'ils exploitent. Le parser requiert un répertoire de modèles et le namefinder une liste de modèles.
    Des exemples sont disponibles dans le fichier docs/README.html ou en ligne.
    echo "Jules Verne was a French author who helped pioneer the science-fiction genre. He was born in the bustling harbor city of Nantes in Western France in 1828." > /tmp/text ;
    java opennlp.tools.lang.english.SentenceDetector \
    ${OPENNLP_HOME}/models/english/sentdetect/EnglishSD.bin.gz < /tmp/text |
    java -Xmx400m opennlp.tools.lang.english.NameFinder \
    ${OPENNLP_HOME}/models/english/namefind/*.bin.gz
    3. Utilisation au sein d'Apache UIMA
    (dernière section en cours d'écriture)
    Les wrappers sont disponibles dans le répertoire UIMA_HOME/examples/oppennlp_wrappers/
    Dans Eclipse, il s'agit de donner accès aux descripteurs de ces wrappers et de déclarer les bibliothèques requises pour les exécuter
    1. Déclarer en répertoire source le répertoire oppennlp_wrappers/src en cliquant bouton droit et Build Path > Use As Source Folder
    2. Cliquer sur le projet examples avec le bouton droit puis Properties > Java Build Path > Add Variables > OPENNLP_HOME > Extend > et ajouter les bibliothèques

    mercredi 16 décembre 2009

    Installer l'implémentation Java d'Apache UIMA (uimaj)


    WARNING : The present information is out-of-date. Please consult this page for updates


    INTRODUCTION

    Cette page avait été écrit pour décrire l'installation de  l'implémentation Java d'Apache UIMA (uimaj)  Version Binary 2.2.2-incubating sous Linux.




    La documentation officielle référence deux guides 
    Jérôme Rocheteau décrit comment installer Apache UIMA Java en récupérant les sources sur le dépôts subversion et en les installant avec Maven.
      Ci-dessous nous rapportons une synthèse en français des grandes étapes pour la version d'Apache UIMA 2.2.2-incubating et d'Eclipse Galileo 3.5.1; cela comprend l'application du correctif hf1.


      1. Installation d'Eclipse et de ses plugins 
      Eclipse n'est pas nécessaire pour l'installation et l'utilisation du framework Apache UIMA ou du SDK. Les outils Apache sont utilisables hors IDE même si la tendance serait à privilégier leur intégration seulement au sein de celui-ci (voir le CAS Editor).
      Eclipse est néanmoins recommandé pour le développement de composants UIMA.
      Nous renvoyons au billet http://enicolashernandez.blogspot.com/2009/12/comment-installer-eclipse-galileo-351.html pour l'installation d'Eclipse et de ses plugins. Nous supposons l'installation de Eclipse Galileo 3.5.1

      2. Installation du framework Apache UIMA, de son SDK et des codes exemples


      1. Sur http://incubator.apache.org/uima/downloads.cgi récupérer les archives des versions binaires pour Linux des latest official releases de 
      • UIMA Java framework and SDK à savoir uimaj-2.2.2-incubating-bin.zip
      • UIMA core hotfix 1
      • UIMA Annotator Addons & Simple Server & Pear packaging tools
      2. Désarchiver l'archive "UIMA Java framework and SDK" dans le répertoire de votre choix. Pour ce qui suit nous supposons l'existance d'un répertoire d'applications désigné par la variable d'environnement $APPLI
      Au passage, je crée un lien symbolique pour me permettre de changer aisément de version à l'avenir.
      cd $APPLI
      unzip uimaj-2.2.2-incubating-bin.zip

      mv apache-uima apache-uimaj-2.2.2-incubating-bin
      ln -s apache-uimaj-2.2.2-incubating-bin apache-uimaj
      3. Fixer les variables d'environnement. Pour cela je suis les consignes du fichier README présent dans l'archive.
      • Set JAVA_HOME to the directory of your JRE installation you would like to use for UIMA.
      • Set UIMA_HOME to the apache-uima directory of your unpacked Apache UIMA distribution
      • Append UIMA_HOME/bin to your PATH
      • Please run the script UIMA_HOME/bin/adjustExamplePaths.sh (or .sh), to update emacs .bashrc
      #-- UIMA
      export UIMA_HOME=${APPLI}/apache-uimaj
      export PATH=${UIMA_HOME}/bin:$PATH
      #export UIMA_CLASSPATH=/dir/to/my/component.jar
      #export UIMA_LOGGER_CONFIG_FILE=$UIMA_HOME/config/myLoggerConfig.properties
      4. Un test d'installation
      Afin de réaliser ce test consulter la page "Comment exécuter des chaînes de traitement avec UIMA " notamment la section "Exécution d'une chaîne de traitement en ligne de commande".

      5. Désarchiver le UIMA core hotfix 1 (correctif sur la gestion mémoire) et placer la bibliothèque uima-core.jar fournie dans $UIMA_HOME/lib à la place de celle existante.

      6. Importer le répertoire de codes exemples UIMA_HOME/examples au sein d'Eclipse
      • Cliquer onglet File > Import ; Sélectionner "General/Existing Project into Workspace" ; Cliquer "Next" ; Cliquer "Browse" et naviguer jusqu'au répertoire UIMA_HOME
      7. Définir la variable UIMA_HOME au sein d'Eclipse
      • Cliquer onglet Window > Preferences > Java > Build Path > Classpath Variables > Faire New (Name: UIMA_HOME et Path: Folder... > vers "applications/apache-uima") > Ok > Ok > Yes (rebuild)
      8. Un test d'installation au sein d'Eclipse 
      Afin de réaliser ce test consulter la page "Comment exécuter des chaînes de traitement avec UIMA " notamment la section "Exécuter une chaîne de traitement au sein d'Eclipse".

      9. L'ajout des addons...
      est décrit dans ce post.

      Créer un projet sous GoogleCode

      Dernière mise à jour : 1 mars 2011

      La page "A quick guide to getting started with project hosting on Google Code" explique comment contribuer à ou créer un projet sous GoogleCode (par exemple comment choisir la licence d'un nouveau projet).

      En quelques cliques...
      1. Créer un projet en cliquant sur Create Project et remplir le formulaire
        • nom, résumé et description du projet, mais aussi des choix comme (ici avec des valeurs exemples que j'utilise en général) 
          • Project name: si votre nom est composé alors séparer chaque mot par un tiret (e.g. votre-nom-de-projet)
          • Version control system: Subversion
          • Source code license: Apache License v2.0
      2. Configurer le projet (à l'aide de l'onglet Administer de la barre de menu horizontale. Le fait de cliquer dessus fait apparaître un sous menu.)
        1. Définir les membres en cliquant sur Project Members (les owners ont tous les droits, les committers peuvent travailler sur le projet mais ne peuvent pas le configurer.)
        2. (Optionnel) Sous l'onglet Project Summary, spécifier la notification des modifications de la forge en déclarant le nom de votre liste de discussion ou google groupe (qui servira aussi d'alias dans nos échanges mails) dans la section Activity notifications de Administer puis Issue Tracking. (Pour créer un google groupe se rendre sur http://groups.google.fr/groups/create)
        3. (Optionnel) Sous l'onglet Project Summary, spécifier le Web Property ID de Google Analytics afin de pouvoir obtenir des statistiques de visistes via Google Analytics (la note Learn more, rappelé plus bas, vous indique la démarche).
      3. Services à disposition et menu de gestion du projet
        • La barre d'onglets horizontale offre différents services : Project Home, Downloads, Wiki, Issues, Source, Administer
        1. Downloads permet de uploader des fichiers avec le lien New download
        2. Wiki permet de rédiger des pages avec le lien New page
        3. Issues permet de signaler des observations sur le projet pour aider à son bon développement.  Elles émanent des utilisateurs comme des développeurs.
          1. Cela se fait avec New issue et en spécifiant entre autres le Type de l'issue -Defect (défaut du logiciel), -Enhancement (amélioration demandée sur quelque chose qui existe), -Task (quelque chose de nouveau à développer)... et sa priorité
          2. Par la suite, les développeurs consultent les issues et agissent en conséquence. Une issue peut recevoir plusieurs commentaires de différentes personnes. Suivant leurs traitements, les développeurs changeront leur Status (Accepté (le problème est confirmé), Fixed (defect réparée), Invalid (issue invalide), Done (task effectuée)...
        4. Source indique les commandes à taper pour récupérer avec un client subversion (svn) depuis un poste linux les sources du projets afin de contribuer ou seulement de les consulter.
          • si vous vous trouvez derrière un proxy, alors éditer le fichier ~/.subversion/servers et à la fin, décommenter les lignes suivantes en indiquant les bonnes valeurs
            • # http-proxy-host = defaultproxy.whatever.com
              # http-proxy-port = 7000
      4. Utiliser le dépot svn
        • Votre dépot svn est accessible à une adresse similaire à celle-ci https://votre-nom-de-projet.googlecode.com/svn ; où par défaut 3 sous répertoires sont disponibles : trunk (version principale en cours de développement), tags (précédentes versions stables), branches (évolutions différentes du tronc ou corrections de bugs).
        • L'onglet source vous indique comment récupérer le trunk...
        • Pour commencer à travailler, faites un checkout pour commencer à travailler sur votre projet. Bien entendu la première version récupérée sera vide mais s'accompagne de fichiers qui permettront de synchroniser votre copie locale avec le référentiel subversion. 
      5. Publier une Javadoc sous forge Google Code
        1. Mesurer le nombre de visites sur votre projet hébergé sous Google Code grâce à Google Analytics
          TODO Liens vers mon cours de svn, notamment pour faire des tags... Choisir sa licence...

            Installer Eclipse et ses plugins pour UIMA

            WARNING : The present information is out-of-date. Please consult this page for updates

            Mise à jour le 111130 : (lien update eclipse uima)


            INSTALLER ECLIPSE
            http://www.eclipse.org/downloads/   
            Récupération de la version suivante d'eclipse
            • Eclipse IDE for Java EE Developers (188 MB) Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn and others. More...
            • Eclipse 3.5.1. / Galileo / eclipse-jee-galileo-SR1-linux-gtk
            • http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/galileosr1
            INSTALLER LES PLUGINS ECLIPSE PAR L'IDE
            Installation des plugins de Maven, Subversion, et UIMA

            Le post suivant explique la manipulation générale :
            http://jerome.rocheteau.free.fr/index/post/2009/10/29/Comment-configurer-Eclipse-pour-UIMA
            Le présent post détaille la manipulation.

            1. Sites de téléchargement respectifs
            2. Démarche d'installation pour chaque plugin
            • Help > Software updates | Install New software > onglet "Software Available" > Add site location
            • Cocher le nouveau site ajouté et ceux qui sont apparus en même temps, éventuellement les autres aussi pour les mettre à jour.
            • Puis cliquer sur installer
            • Commence une étape de résolution de dépendances, il est possible qu'il faille cocher plus de sites afin de permettre cette résolution, il est possible qu'il faille faire des install un à un des sites, et il est possible qu'il faille commencer par ceux natifs d'eclipse. Quelques refresh.
            3. Vérifier l'installation en observant la présence de ...**
            •  SVN : cliquer sur package (fenêtre de gauche) avec bouton droit > New > Other > SVN
            •  MVN : cliquer sur package (fenêtre de gauche) avec bouton droit > Maven m2
            •  UIMA : cliquer sur un projet présent dans package (fenêtre de gauche) avec bouton droit > Add UIMA Nature
            INSTALLER LES PLUGINS ECLIPSE EN LIGNE DE COMMANDE
            Il est possible d'installer les plugins à la main, vous trouverez dans l'archive suivante un script qui se charge de l'installation des plugins Eclipse (attention il requiert le lancement d'eclipse -clean) entre chaque installation.

              CONFIGURATIONS D'INSTALLATION
              1. Eclipse Galileo 3.5.1 et Apache UIMA 2.2.2-incubating

              Plugin Eclipse Maven

              Maven requiert d'abord d'installer le site http://download.eclipse.org/tools/ajdt/35/update/

              (vu sur http://docs.codehaus.org/display/M2ECLIPSE/Installation+Requirements#InstallationRequirements-AJDT)

              Plugin UIMA
              Le site propose deux ressources
              •  Apache UIMA Eclipse tooling and runtime support   
              •  Apache UIMA-AS Eclipse tooling
              Installer d'abord le 1er

              Puis pour permettre l'install du second : http://www.mail-archive.com/uima-user@incubator.apache.org/msg02554.html
                Problem by using a new installation of Eclipse 3.5.1.
                I think the problem is that the Eclipse Update Manager cannot find the jar
                for the Deployment Descriptor Editor in the update site(s).
               
                To avoid this problem, Apache UIMA should provide an "archived" update site
                file so that the user can download and "locally" install the plug-ins
                instead of completely depend on the mirror/download sites.
               
                Here is an alternative way to install the Deployment Descriptor Editor:
                1. Download the UIMA-AS
                http://www.bizdirusa.com/mirrors/apache/incubator/uima/binaries/uima-as-2.2.2-incubating/uima-as-2.2.2-incubating-bin.zip
               
                2. Unzip and copy the following 2 jars to your Eclipse's "dropins" directory
                (like for example eclipse\dropins):
                 - eclipsePlugins/org.apache.uima.deployeditor_2.2.2.incubating.jar
                 - eclipsePlugins/org.apache.uima.runtime-deployeditor_2.2.2.incubating.jar
               
                3. Restart your Eclipse with -clean option.
              2. Eclipse Galileo 3.5.1 et Apache UIMA 2.3.0-incubating

              Même démarche sauf que cette fois-ci Maven ne requiert pas d'installer au préalable d'autres plugins


              A SUIVRE...
              • Déclarer la variable UIMA_HOME au sein d'Eclipse
              • Importer le projet UIMA_HOME/examples
              • Créer un projet d'Annotator Engine au sein d'Eclipse




              samedi 12 décembre 2009

              Démarrer avec UIMA

              Désormais une page statique dédiée a été créée http://enicolashernandez.blogspot.com/p/uima.html