code: private void annotateOptions(Properties properties) throws IOException {
  
      String ruleBasedOption = properties.getProperty("ruleBasedOption");
      String dictOption = properties.getProperty("dictTag");
      String dictPath = properties.getProperty("dictPath");
  
      if (!dictOption.equals(Flags.DEFAULT_DICT_OPTION)) {
        if (dictPath.equals(Flags.DEFAULT_DICT_PATH)) {
          Flags.dictionaryException();
        }
        if (!ruleBasedOption.equals(Flags.DEFAULT_LEXER)) {
          lexerTagger = true;
        }
        if (!dictPath.equals(Flags.DEFAULT_DICT_PATH)) {
          if (dictionaries == null) {
            dictionaries = new Dictionaries(dictPath);
            nerTaggerDict = new DictionariesNERTagger(dictionaries);
          }
          if (dictOption.equalsIgnoreCase("tag")) {
            dictTag = true;
            postProcess = false;
            statistical = false;
          } else if (dictOption.equalsIgnoreCase("post")) {
            nerTagger = new StatisticalSequenceLabeler(properties);
            statistical = true;
            postProcess = true;
            dictTag = false;
          } else {
            nerTagger = new StatisticalSequenceLabeler(properties);
            statistical = true;
            dictTag = false;
            postProcess = false;
          }
        }
      } else if (!ruleBasedOption.equals(Flags.DEFAULT_LEXER)) {
        lexerTagger = true;
        statistical = true;
        dictTag = false;
        postProcess = false;
        nerTagger = new StatisticalSequenceLabeler(properties);
      } else {
        lexerTagger = false;
        statistical = true;
        dictTag = false;
        postProcess = false;
        nerTagger = new StatisticalSequenceLabeler(properties);
      }
    }
docs: TODO surely we can simplify this?