docs: private static synchronized SmartForest<List<String>> init(String key, KV<String, SmartForest<List<String>>> kv,
                      boolean reload) {
  
          SmartForest<List<String>> forest = kv.getV();
  
          if (forest != null) {
              if (reload) {
                  forest.clear();
              } else {
                  return forest;
              }
          } else {
              forest = new SmartForest<>();
          }
  
          LOG.debug("begin init synonyms " + kv.getK());
          long start = System.currentTimeMillis();
  
          try (BufferedReader reader = IOUtil.getReader(PathToStream.stream(kv.getK()), IOUtil.UTF8)) {
              String temp = null;
              while ((temp = reader.readLine()) != null) {
                  if (StringUtil.isBlank(temp)) {
                      continue;
                  }
                  String[] split = temp.split("\t");
  
                  List<String> list = new ArrayList<>();
                  for (String word : split) {
                      if (StringUtil.isBlank(word)) {
                          continue;
                      }
                      list.add(word);
                  }
  
                  if (split.length <= 1) {
                      LOG.warn(temp + " in synonymsLibrary not in to library !");
                      continue;
                  }
  
                  for (int i = 0; i < split.length; i++) {
                      forest.add(split[i], list);
                  }
              }
              kv.setV(forest);
              LOG.info("load synonyms use time:" + (System.currentTimeMillis() - start) + " path is : " + kv.getK());
              return forest;
          } catch (Exception e) {
              LOG.error("Init synonyms library error :" + e.getMessage() + ", path: " + kv.getK());
              SYNONYMS.remove(key);
              return null;
          }
      }