Hi Thomas, thanks for your answer. Using HashMap, does the n-th element of keySet() always corresponds to the n-th element of values()? Is this a defined behavior in Java?
Cheers, Armin -----Ursprüngliche Nachricht----- Von: Thomas Ginter [mailto:thomas.gin...@utah.edu] Gesendet: Mittwoch, 16. Oktober 2013 18:53 An: <user@uima.apache.org> Betreff: Re: HashMap as type feature Armin, Our team does this with an annotation type designed to store feature vectors for Machine Learning applications. In this case we use a StringArray feature for the keys and a StringArray feature for the values. The StringArrays are pulled from a HashMap<String, String> vector variable and inserted into the features with the following code: int size = vector.size(); StringArray keys = new StringArray(jcas, size); StringArray values = new StringArray(jcas, size); keys.copyFromArray(vector.keySet().toArray(new String[size]), 0, 0, size); values.copyFromArray(vector.values().toArray(new String[size]), 0, 0, size); Retrieving the values is fairly straightforward. If you are using a static annotation type it can be as simple as: StringArray keys = vector.getKeysArray(); If you parameterize our annotation type in the annotator you can use the name of the feature to get a Feature object reference then pull the StringArrays like so: Type annotationTypeObj = aJCas.getRequiredType("com.my.Annotation"); //parameter is the canonized name of the Annotation type Feature keyFeature = annotationTypeObj.getFeatureByBaseName("keyFeatureName"); //the actual name of the feature storing the key StringArray reference Feature valuesFeature = annotationTypeObj.getFeatureByBaseName("valuesFeatureName"); //the name of the values feature //Get a list of the annotation objects in the CAS then iterate through the list, for each annotation 'a' do the following to retrieve the keys and values StringArray keys = (StringArray) vector.getFeatureValue(keysFeature); StringArray values = (StringArray) vector.getFeatureValue(valuesFeature); If necessary you can retrieve a String[] from the StringArray FeatureStructure by calling the .toArray() method such as: String[] keysArray = keys.toArray(); Let me know if you have any questions. Thanks, Thomas Ginter 801-448-7676 thomas.gin...@utah.edu<mailto:thomas.gin...@utah.edu> On Oct 16, 2013, at 9:55 AM, Dr. Armin Wegner <arminweg...@googlemail.com<mailto:arminweg...@googlemail.com>> wrote: Hi, I'd like to have a type feature that is a list of key-value pairs. The number of pairs is unknown. What's best for this? Is it even possible? Thanks, Armin
pgpVY4M54krci.pgp
Description: PGP signature