Nouvelles arrivées

La sortie de la sandbox du CAS Editor a été soumise au vote fin Mai et acceptée. Nous devrions donc voir prochainement arriver le CAS Editor dans la distribution standard d'Apache UIMA (la 2.3.1 ?). En attendant, le plugin est déjà disponible dans le dépôt.

Lucas, contraction de Lucene et de CAS, fait son entrée dans la sandbox sous la forme d'une toute nouvelle version. Il s'agit d'un composant permettant d'indexer le contenu d'un CAS avec Lucene.

Descripteurs XML

Une longue discussion a eu lieu concernant l'utilisation des descripteurs XML pour les composants (ici, ici et ici). Les argumentations étant assez diverses autour du maintient de ces descripteurs, les seuls arguments positifs en faveur proviennent des développeurs (Thilo notamment) et tournent autour de la réutilisabilité et de la portabilité. Les opposants mettent en avant la difficulté à maintenir ces fichiers et l'impossibilité de fournir tous les descripteurs étant donné la complexité de certains composants et la forte combinaison de paramètres envisageables.

Sérialisation

Lors de l'exploration d'un problème de sérialisation de TypeSystem, il s'est avéré que deux implémentations différentes sont présentes dans le code pour réaliser la même chose : TypeSystem2Xml.typeSystem2Xml et TypeSystemUtil.typeSystem2TypeSystemDescription, l'une des deux approches devrait disparaître par la suite (TypeSystem2Xml très certainement). En attendant, voici comment sérialiser CAS et TypeSystem, d'après les propositions de Thilo et Tong :

  1. // Sérialisation du CAS
  2. TypeSystemDescription tsDesc = TypeSystemUtil.typeSystem2TypeSystemDescription (your_TypeSystem);
  3. FileOutputStream outTs;
  4. try {
  5. outTs = new FileOutputStream (fileName);
  6. tsDesc.toXML(outTs);
  7. outTs.close();
  8. } catch (FileNotFoundException e) {
  9. e.printStackTrace();
  10. } catch (SAXException e) {
  11. e.printStackTrace();
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. }
  15. // Chargement du TS sérialisé
  16. Object descriptor = UIMAFramework.getXMLParser().parse(new XMLInputSource(tsFile));
  17. TypeSystemDescription tsDesc = (TypeSystemDescription) descriptor;
  18. tsDesc.resolveImports();
  19. CAS cas = CasCreationUtils.createCas(tsDesc, null, new FsIndexDescription[0]);

Collection reader

Radwen se demandait sur la liste si il était possible pour un collection reader de se charger à partir d'un descripteur distant, en d'autres termes si l'on pouvait créer un tel collection reader à partir uniquement de l'url d'un descripteur. Girish propose la solution suivante :

  1. XMLInputSource in = new XMLInputSource(collectionReaderDescURL);
  2. ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in);
  3. CollectionReader collectionReader =UIMAFramework.produceCollectionReader(specifier);

... simple et efficace ! Ceci offre également une vue interne sur l'instanciation des composants au sein d'une chaîne UIMA.