private static Set<Long> findNounHypernyms(Dictionary dic) throws SMatchException {
   log.info("Creating noun hypernyms array...");
   try {
     Set<Long> keys = new HashSet<>();
     int count = 0;
     Iterator<Synset> it = dic.getSynsetIterator(POS.NOUN);
     while (it.hasNext()) {
       count++;
       if (0 == count % 10000) {
         log.debug("noun hypernyms: " + count);
       }
       Synset source = it.next();
       long sourceOffset = source.getOffset();
       traverseTreeMG(keys, PointerUtils.getHypernymTree(source), sourceOffset);
       traverseTreeMG(keys, PointerUtils.getInheritedHolonyms(source), sourceOffset);
       traverseTreeMG(keys, PointerUtils.getInheritedMemberHolonyms(source), sourceOffset);
       traverseTreeMG(keys, PointerUtils.getInheritedPartHolonyms(source), sourceOffset);
       traverseTreeMG(keys, PointerUtils.getInheritedSubstanceHolonyms(source), sourceOffset);
       traverseListMG(keys, PointerUtils.getHolonyms(source), sourceOffset);
       traverseListMG(keys, PointerUtils.getMemberHolonyms(source), sourceOffset);
       traverseListMG(keys, PointerUtils.getPartHolonyms(source), sourceOffset);
       traverseListMG(keys, PointerUtils.getSubstanceHolonyms(source), sourceOffset);
     }
     log.info("Noun hypernyms: " + keys.size());
     return keys;
   } catch (JWNLException e) {
     throw new SMatchException(e.getClass().getSimpleName() + ": " + e.getMessage(), e);
   }
 }
 private static Set<Long> findAdjectiveAntonyms(Dictionary dic) throws SMatchException {
   log.info("Creating adjective antonyms array...");
   try {
     Set<Long> keys = new HashSet<>();
     int count = 0;
     Iterator<Synset> it = dic.getSynsetIterator(POS.ADJECTIVE);
     while (it.hasNext()) {
       count++;
       if (0 == count % 1000) {
         log.debug("adjective antonyms: " + count);
       }
       Synset current = it.next();
       traverseTree(keys, PointerUtils.getExtendedAntonyms(current), current.getOffset());
       traverseListSym(keys, PointerUtils.getAntonyms(current), current.getOffset());
     }
     log.info("Adjective antonyms: " + keys.size());
     return keys;
   } catch (JWNLException e) {
     throw new SMatchException(e.getClass().getSimpleName() + ": " + e.getMessage(), e);
   }
 }