code: private void thresholdColumns(double threshold) {
          LOGGER.info("Computing the columns which are equal to or above the " +
                      "specified threshold");
  
          int words = termToIndex.numDimensions();
          Set<Integer> colsToRetain = new HashSet<Integer>();
  
          // Compute the entropy of each row and column.
          EntropyStats stats = MatrixEntropy.entropy(cooccurrenceMatrix);
  
          // Compare the entropy of each column to the threshold and save and
          // indices that pass the threshold. Since the rows will be concatenated
          // as columns, they represent currently non-existing columns beyond the
          // number of words.
          for (int col = 0; col < words; ++col)
              if (stats.colEntropy[col] >= threshold)
                  colsToRetain.add(col);
  
          for (int row = 0; row < words; ++row)
              if (stats.rowEntropy[row] >= threshold)
                  colsToRetain.add(row+words);
  
          LOGGER.info("Retaining " + colsToRetain.size() + "/" + (words*2) +
                      " columns, which passed the threshold of " + threshold);
  
          reduced = retainColumns(colsToRetain);
          cooccurrenceMatrix = null;
      }
docs: Calculates the entropy of all the columns in the co-occurrence matrix and
  removes those columns that are below the threshold, setting {@link
  #reduced} to the remaining columns.
  
  @param threshold