/**
   * Increment the count for the given word by the amount increment
   *
   * @param word the word to increment the count for
   * @param increment the amount to increment by
   */
  @Override
  public synchronized void incrementWordCount(String word, int increment) {
    if (word == null || word.isEmpty())
      throw new IllegalArgumentException("Word can't be empty or null");
    wordFrequencies.incrementCount(word, increment);

    if (hasToken(word)) {
      VocabWord token = tokenFor(word);
      token.increaseElementFrequency(increment);
    }
    totalWordOccurrences.set(totalWordOccurrences.get() + increment);
  }
  private void addTokenToVocabCache(String stringToken, Double tokenCount) {
    // Making string token into actual token if not already an actual token (vocabWord)
    VocabWord actualToken;
    if (vocabCache.hasToken(stringToken)) {
      actualToken = vocabCache.tokenFor(stringToken);
      actualToken.increaseElementFrequency(tokenCount.intValue());
    } else {
      actualToken = new VocabWord(tokenCount, stringToken);
    }

    // Set the index of the actual token (vocabWord)
    // Put vocabWord into vocabs in InMemoryVocabCache
    boolean vocabContainsWord = vocabCache.containsWord(stringToken);
    if (!vocabContainsWord) {
      vocabCache.addToken(actualToken);

      int idx = vocabCache.numWords();
      actualToken.setIndex(idx);
      vocabCache.putVocabWord(stringToken);
    }
  }