You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@uima.apache.org by Jérôme Rocheteau <je...@univ-nantes.fr> on 2010/01/19 14:16:49 UTC

How to create a feature path?

Hello everybody,

I'd like to know how to create and set up feature paths and, precisely, I would like
to know how to use the initialize method correctly. 

In the following example, I both use the initialize and addfeature methods to set up
feature paths: 

  private FeaturePath getFeaturePath(JCas cas,Feature feature) {
    FeaturePath path = cas.createFeaturePath();
    path.addFeature(feature);
    return path;
  }
	
  private FeaturePath getFeaturePath(JCas cas,String feature) throws CASException {
    FeaturePath path = cas.createFeaturePath(); 
    path.initialize(feature); 
    return path;
  }

  private FeaturePath getFeaturePath(JCas cas,Type type,String feat) {
    Feature feature = type.getFeatureByBaseName(feat);
    String alternative = type.getName() + ":" + feat;
    try {
      return this.getFeaturePath(cas,alternative);
    } catch (CASException e) {
      this.getContext().getLogger().log(Level.SEVERE,e.getMessage());
      return this.getFeaturePath(cas,feature);
    }
  }

However, I get this error message while processing an Analysis Engine that calls
such methods:

"Invalid featurePath syntax for featurePath "uima.tcas.Annotation:begin". 
"begin" is not allowed.

What am I doing wrong with the initialize method?


Thank in advance,
jérôme

Re: How to create a feature path?

Posted by Thilo Goetz <tw...@gmx.de>.
On 1/19/2010 14:16, Jérôme Rocheteau wrote:
> Hello everybody,
> 
> I'd like to know how to create and set up feature paths and, precisely, I would like
> to know how to use the initialize method correctly. 
> 
> In the following example, I both use the initialize and addfeature methods to set up
> feature paths: 
> 
>   private FeaturePath getFeaturePath(JCas cas,Feature feature) {
>     FeaturePath path = cas.createFeaturePath();
>     path.addFeature(feature);
>     return path;
>   }
> 	
>   private FeaturePath getFeaturePath(JCas cas,String feature) throws CASException {
>     FeaturePath path = cas.createFeaturePath(); 
>     path.initialize(feature); 
>     return path;
>   }

I did not try this, but from looking at the code: the
initialize method expects a string representation of a
feature path, e.g., "lemma/pos".  You're giving it a
Feature, so Java will invoke to toString() method.  This,
for a Feature, returns the fully qualified name of the
feature, in your case "uima.tcas.Annotation:begin".
That's not a valid feature path.  You can use Feature.getShortName()
if you want to go this route, or use your first version
(which I assume works fine).

--Thilo

> 
>   private FeaturePath getFeaturePath(JCas cas,Type type,String feat) {
>     Feature feature = type.getFeatureByBaseName(feat);
>     String alternative = type.getName() + ":" + feat;
>     try {
>       return this.getFeaturePath(cas,alternative);
>     } catch (CASException e) {
>       this.getContext().getLogger().log(Level.SEVERE,e.getMessage());
>       return this.getFeaturePath(cas,feature);
>     }
>   }
> 
> However, I get this error message while processing an Analysis Engine that calls
> such methods:
> 
> "Invalid featurePath syntax for featurePath "uima.tcas.Annotation:begin". 
> "begin" is not allowed.
> 
> What am I doing wrong with the initialize method?
> 
> 
> Thank in advance,
> jérôme