You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@uima.apache.org by Stephan Greene <sg...@coderyte.com> on 2012/03/16 17:30:26 UTC

DataResources

I am implementing a SharedResourceObject which requires a DataResource more involved than just a url to access the data the resource represents. I need something like the ParameterizedDataResource -- but I don't see how to instantiate this. The load() method of SharedResourceObject takes a DataResource object parameter. How do I configure my SharedResourceObject to use some other kind of DataResource? I know how to implement the data resource I need, but I can't figure out how to tell the framework that I want to use my own data resource with my own SharedResourceObject.

Does it involve a CustomResourceSpecifier? I can't figure out how to use that, either. Any help appreciated.

Stephan


Re: DataResources

Posted by Stephan Greene <sg...@coderyte.com>.
Thank you, Richard. This information was very helpful. I ended up having my resource implement DataResource, but it was also key to realize I needed to override the initialize() method and recognize that the ResourceSpecifier parameter there is an instance of CustomResourceSpecifier, from which I can get my parameter values.

On Mar 17, 2012, at 6:18 AM, Richard Eckart de Castilho wrote:

> Hi Stephan,
> 
> let's see if I can help you out here.
> 
> 1) For a resource with parameters set statically in the descriptor, your resource should extend 
>   from Resource_ImplBase (implements DataResource).
> 
> 2) For a resource that needs to load data from aURL, you resource class can be anything and
>   implement SharedResourceObject. It's also possible to set parameters statically in the
>   descriptor (see below).
> 
> 3) If you do not know the values of the parameters at the time you write the descriptor, then
>   you need to use a ParameterizedDataResource. You can get an instance of such a resource
>   within your AE using 
> 
>     getContext().getResourceObject("theResource", new String[] { param1, param2, param3... }).
> 
> 
> Resources of the type 1 and 2 are instantiated when the pipeline components are instantiated.
> The type 3 resource is instantiated when you try to access it using getResourceObject().
> 
> Now to the descriptors that we use for the different types in uimaFIT:
> 
> 1) CustomResourceSpecifier
> 
> 2) FileResourceSpecifier (if the resource does not need parameters), otherwise 
>   ConfigurableDataResourceSpecifier
> 
> 3) CustomResourceSpecifier
> 
> 
> If you are not bound to using XML descriptors, you might want to have a look at uimaFIT 
> for programmatically  creating component and resource descriptions. Here a little example
> binding an external resource to two different AEs:
> 
>  ExternalResourceDescription extDesc = createExternalResourceDescription(
>    SharedModel.class, new File("somemodel.bin"));
> 
>  // Binding external resource to each Annotator individually
>  AnalysisEngineDescription aed1 = createPrimitiveDescription(Annotator.class,
>    Annotator.MODEL_KEY, extDesc);
>    AnalysisEngineDescription aed2 = createPrimitiveDescription(Annotator.class,
>    Annotator.MODEL_KEY, extDesc);
> 
>  // Process something with the two AEs
>  AnalysisEngineDescription aaed = createAggregateDescription(aed1, aed2);
>  AnalysisEngine ae = createAggregate(aaed);
>  ae.process(ae.newJCas());
> 
> (Source: http://code.google.com/p/uimafit/wiki/uimaFitResources)
> 
> Cheers,
> 
> -- Richard
> 
> Am 16.03.2012 um 21:00 schrieb Stephan Greene:
> 
>> Well, to answer my own question, I see that I can set a CustomResourceSpecifier by editing my descriptor xml directly (thanks to a post by Adam Lally in 2008; http://www.mail-archive.com/uima-user@incubator.apache.org/msg01437.html )
>> 
>> I have this now:
>> 
>>     <externalResource>
>>       <name>theResource</name>
>>       <description>my resource</description>
>>       <customResourceSpecifier>
>>         <resourceClassName>com.my.resourcemanagers.MyDataResource</resourceClassName>
>>         <parameters>
>>           <parameter name="param1" value="paramval1"/>
>>           <parameter name="param2" value="paramval2"/>
>>         </parameters>
>>       </customResourceSpecifier>
>>     </externalResource>
>> 
>> 
>> I then implemented as
>> 
>> public class MyDataResource extends Resource_ImplBase implements ParameterizedDataResource, DataResource, SharedResourceObject
>> 
>> This actually works and does what I want. But I suspect I'm not really using the framework correctly. Does anyone knows the canonical way to use these various Resource classes?
>> 
>> 
>> Stephan
>> 
>> On Mar 16, 2012, at 12:30 PM, Stephan Greene wrote:
>> 
>>> I am implementing a SharedResourceObject which requires a DataResource more involved than just a url to access the data the resource represents. I need something like the ParameterizedDataResource -- but I don't see how to instantiate this. The load() method of SharedResourceObject takes a DataResource object parameter. How do I configure my SharedResourceObject to use some other kind of DataResource? I know how to implement the data resource I need, but I can't figure out how to tell the framework that I want to use my own data resource with my own SharedResourceObject.
>>> 
>>> Does it involve a CustomResourceSpecifier? I can't figure out how to use that, either. Any help appreciated.
>>> 
>>> Stephan
> 
> -- 
> ------------------------------------------------------------------- 
> Richard Eckart de Castilho
> Technical Lead
> Ubiquitous Knowledge Processing Lab (UKP-TUD) 
> FB 20 Computer Science Department      
> Technische Universität Darmstadt 
> Hochschulstr. 10, D-64289 Darmstadt, Germany 
> phone [+49] (0)6151 16-7477, fax -5455, room S2/02/B117
> eckart@ukp.informatik.tu-darmstadt.de 
> www.ukp.tu-darmstadt.de 
> Web Research at TU Darmstadt (WeRC) www.werc.tu-darmstadt.de
> ------------------------------------------------------------------- 
> 
> 
> 
> 
> 
> 


Re: DataResources

Posted by Richard Eckart de Castilho <ec...@ukp.informatik.tu-darmstadt.de>.
Hi Stephan,

let's see if I can help you out here.

1) For a resource with parameters set statically in the descriptor, your resource should extend 
   from Resource_ImplBase (implements DataResource).

2) For a resource that needs to load data from aURL, you resource class can be anything and
   implement SharedResourceObject. It's also possible to set parameters statically in the
   descriptor (see below).

3) If you do not know the values of the parameters at the time you write the descriptor, then
   you need to use a ParameterizedDataResource. You can get an instance of such a resource
   within your AE using 

     getContext().getResourceObject("theResource", new String[] { param1, param2, param3... }).


Resources of the type 1 and 2 are instantiated when the pipeline components are instantiated.
The type 3 resource is instantiated when you try to access it using getResourceObject().

Now to the descriptors that we use for the different types in uimaFIT:

1) CustomResourceSpecifier

2) FileResourceSpecifier (if the resource does not need parameters), otherwise 
   ConfigurableDataResourceSpecifier

3) CustomResourceSpecifier


If you are not bound to using XML descriptors, you might want to have a look at uimaFIT 
for programmatically  creating component and resource descriptions. Here a little example
binding an external resource to two different AEs:

  ExternalResourceDescription extDesc = createExternalResourceDescription(
    SharedModel.class, new File("somemodel.bin"));
                
  // Binding external resource to each Annotator individually
  AnalysisEngineDescription aed1 = createPrimitiveDescription(Annotator.class,
    Annotator.MODEL_KEY, extDesc);
    AnalysisEngineDescription aed2 = createPrimitiveDescription(Annotator.class,
    Annotator.MODEL_KEY, extDesc);

  // Process something with the two AEs
  AnalysisEngineDescription aaed = createAggregateDescription(aed1, aed2);
  AnalysisEngine ae = createAggregate(aaed);
  ae.process(ae.newJCas());

(Source: http://code.google.com/p/uimafit/wiki/uimaFitResources)

Cheers,

-- Richard

Am 16.03.2012 um 21:00 schrieb Stephan Greene:

> Well, to answer my own question, I see that I can set a CustomResourceSpecifier by editing my descriptor xml directly (thanks to a post by Adam Lally in 2008; http://www.mail-archive.com/uima-user@incubator.apache.org/msg01437.html )
> 
> I have this now:
> 
>      <externalResource>
>        <name>theResource</name>
>        <description>my resource</description>
>        <customResourceSpecifier>
>          <resourceClassName>com.my.resourcemanagers.MyDataResource</resourceClassName>
>          <parameters>
>            <parameter name="param1" value="paramval1"/>
>            <parameter name="param2" value="paramval2"/>
>          </parameters>
>        </customResourceSpecifier>
>      </externalResource>
> 
> 
> I then implemented as
> 
> public class MyDataResource extends Resource_ImplBase implements ParameterizedDataResource, DataResource, SharedResourceObject
> 
> This actually works and does what I want. But I suspect I'm not really using the framework correctly. Does anyone knows the canonical way to use these various Resource classes?
> 
> 
> Stephan
> 
> On Mar 16, 2012, at 12:30 PM, Stephan Greene wrote:
> 
>> I am implementing a SharedResourceObject which requires a DataResource more involved than just a url to access the data the resource represents. I need something like the ParameterizedDataResource -- but I don't see how to instantiate this. The load() method of SharedResourceObject takes a DataResource object parameter. How do I configure my SharedResourceObject to use some other kind of DataResource? I know how to implement the data resource I need, but I can't figure out how to tell the framework that I want to use my own data resource with my own SharedResourceObject.
>> 
>> Does it involve a CustomResourceSpecifier? I can't figure out how to use that, either. Any help appreciated.
>> 
>> Stephan

-- 
------------------------------------------------------------------- 
Richard Eckart de Castilho
Technical Lead
Ubiquitous Knowledge Processing Lab (UKP-TUD) 
FB 20 Computer Science Department      
Technische Universität Darmstadt 
Hochschulstr. 10, D-64289 Darmstadt, Germany 
phone [+49] (0)6151 16-7477, fax -5455, room S2/02/B117
eckart@ukp.informatik.tu-darmstadt.de 
www.ukp.tu-darmstadt.de 
Web Research at TU Darmstadt (WeRC) www.werc.tu-darmstadt.de
------------------------------------------------------------------- 







Re: DataResources

Posted by Stephan Greene <sg...@coderyte.com>.
Well, to answer my own question, I see that I can set a CustomResourceSpecifier by editing my descriptor xml directly (thanks to a post by Adam Lally in 2008; http://www.mail-archive.com/uima-user@incubator.apache.org/msg01437.html )

I have this now:

      <externalResource>
        <name>theResource</name>
        <description>my resource</description>
        <customResourceSpecifier>
          <resourceClassName>com.my.resourcemanagers.MyDataResource</resourceClassName>
          <parameters>
            <parameter name="param1" value="paramval1"/>
            <parameter name="param2" value="paramval2"/>
          </parameters>
        </customResourceSpecifier>
      </externalResource>


I then implemented as

public class MyDataResource extends Resource_ImplBase implements ParameterizedDataResource, DataResource, SharedResourceObject

This actually works and does what I want. But I suspect I'm not really using the framework correctly. Does anyone knows the canonical way to use these various Resource classes?


Stephan

On Mar 16, 2012, at 12:30 PM, Stephan Greene wrote:

> I am implementing a SharedResourceObject which requires a DataResource more involved than just a url to access the data the resource represents. I need something like the ParameterizedDataResource -- but I don't see how to instantiate this. The load() method of SharedResourceObject takes a DataResource object parameter. How do I configure my SharedResourceObject to use some other kind of DataResource? I know how to implement the data resource I need, but I can't figure out how to tell the framework that I want to use my own data resource with my own SharedResourceObject.
> 
> Does it involve a CustomResourceSpecifier? I can't figure out how to use that, either. Any help appreciated.
> 
> Stephan
>