lundi 4 octobre 2010

Réutiliser des outils externes via des commandes shell dans un composant UIMA

Parce que de nombreux outils de TAL non-natifs UIMA sont utilisés par la communauté, parce que ces outils ont souvent requis des investissements conséquents en fonds financiers et en temps de développement, il est  nécessaire de se poser la question de la possibilité de réutilisation de ces outils au sein de chaînes de traitement UIMA avant d'en développer des équivalents en natif.


Le présent composant UIMA shell a pour objet l'implémentation d'un Analysis Engine permettant l'exécution d'une commande shell sur un élément du CAS (Common Analysis Structure) et l'enrichissement du CAS avec le résultat du traitement. L'entrée de la commande peut être soit le SofaDataString d'une vue spécifiée, soit le texte couvert par un type d'annotation (lesquelles elles-même apparaîssent optionnellement dans certains contextes marqués par un autre type annotation). La sortie peut être produite soit sous la forme d'un SofaDataString d'une nouvelle vue créée pour l'occasion ou bien comme valeur d'une feature de type String d'une annotation spécifiée elle aussi créée pour l'occasion.



Son principal objectif est donc de permettre d'utiliser au sein d'une chaîne UIMA des outils accessibles en ligne de commande, lesquels réalisent leur traitement soit sur l'entrée standard (stdin) soit sur un fichier via son nom passé en argument et produisent leur résultat sur la sortie standard (stdout).

L'implémentation présente les caractéristiques suivantes :
  • utilisation de l'API shell de F Martini (distribuée sous licence CeCILL-C), laquelle permet de simplifier l'exécution de programme et de ligne de commande depuis Java
  • gestion de multiples formats des commandes à exécuter où la donnée à traiter peut aussi bien provenir de l'entrée standard ou constituer un fichier texte passé en argument, être récupéré du système de fichier, pipé, redirigé... 
  • traitement de la commande shell sous forme d'un thread
  • paramétrage libre et générique des éléments du CAS (view/annotation/feature) d'entrée (à traiter) et de sortie (à créer) notamment à l'aide de l'API java.lang.reflect (constitue des exemples de code générique)
La suite de ce travail pourra être la conception d'un composant type connecteur permettant de récupérer sous forme de types des informations structurées contenues dans des fichiers au format CSV-like (Comma Separated Value), XML... quelle que soit la sémantique de leur structure.

Le code source du composant est disponible sur http://code.google.com/p/uima-shell/ 

Aucun commentaire:

Enregistrer un commentaire