NullPointerException


ivy
 
Edited

Hi,
I'm trying to count occurrences of a specific token in text and output the total number of that token. I get the nullPointer, even though I excluded the cases of data not present in text. Here's what I have:

Imports: {
  import static gate.Utils.*;
  import java.util.*;
  import java.util.stream.*;
  import java.util.HashMap;
  import java.util.Map;
}
 
Phase: DaysCount
Input: Days
Options: control = once
 
Rule: DCount
{Days}
-->
{
  Map<String, Integer> countByStringMap = new TreeMap<String, Integer>();
  
  for (Annotation annotation : inputAS.get("Days")) {
    if(annotation !=null){
    String string = (String) annotation.getFeatures().get("string");
    Integer count = (Integer) countByStringMap.get(string);
    if (count == null) {
      countByStringMap.put(string, 1);
    } else {
      countByStringMap.put(string, count + 1);
    }
  }
 
  for (Map.Entry entry : countByStringMap.entrySet()) {
     System.out.println( entry.getKey() + "," + entry.getValue());
  }
   }
}


Ian Roberts
 

Where exactly does the NPE happen?

You’re iterating over all annotations of type “Days”, and asking each one for a feature that is also named “Days”. The most likely case I can see that would cause a NPE would be if a particular Days annotation does not have a Days feature at all (since a TreeMap without a Comparator does not permit null keys) - could that be the case in your data?

Ian

On Tue, 3 Jan 2023 at 22:08, ivy via groups.io <ivy_swindall=yahoo.com@groups.io> wrote:
Hi,
I'm trying to count occurrences of a specific token in text and output the total number of that token. I get the nullPointer, even though I excluded the cases of data not present in text. Here's what I have:

Imports: {
  import static gate.Utils.*;
  import java.util.*;
  import java.util.stream.*;
  import java.util.HashMap;
  import java.util.Map;
}
 
Phase: DaysCount
Input: Days
Options: control = once
 
Rule: DCount
{Days}
-->
{
  Map<String, Integer> countByStringMap = new TreeMap<String, Integer>();
  
  for (Annotation annotation : inputAS.get("Days")) {
    if(annotation !=null){
    String string = (String) annotation.getFeatures().get("Days");
    Integer count = (Integer) countByStringMap.get(string);
    if (count == null) {
      countByStringMap.put(string, 1);
    } else {
      countByStringMap.put(string, count + 1);
    }
  }
 
  for (Map.Entry entry : countByStringMap.entrySet()) {
     System.out.println( entry.getKey() + "," + entry.getValue());
  }
   }
}


ivy
 

Thanks, Ian

I changed it to:
String string =  stringFor(doc, annotation);
which omits features. It solved the problem with NPE.