class_docstr: Ngram Smoothing Interface
  
  Implements Chen & Goodman 1995's idea that all smoothing algorithms have
  certain features in common. This should ideally allow smoothing algorithms to
  work both with Backoff and Interpolation.
docstr: :param vocabulary: The Ngram vocabulary object.
  :type vocabulary: nltk.lm.vocab.Vocabulary
  :param counter: The counts of the vocabulary items.
  :type counter: nltk.lm.counter.NgramCounter
docstr_tok: [":","param","vocabulary",":","The","Ngram","vocabulary","object",".",":","type","vocabulary",":","nltk.lm.vocab.Vocabulary",":","param","counter",":","The","counts","of","the","vocabulary","items",".",":","type","counter",":","nltk.lm.counter.NgramCounter"]
code: def __init__(self, vocabulary, counter):
      """
      :param vocabulary: The Ngram vocabulary object.
      :type vocabulary: nltk.lm.vocab.Vocabulary
      :param counter: The counts of the vocabulary items.
      :type counter: nltk.lm.counter.NgramCounter
      """
      self.vocab = vocabulary
      self.counts = counter
  
imports: import random
  import warnings
  from abc import ABCMeta, abstractmethod
  from bisect import bisect
  from itertools import accumulate
  from nltk.lm.counter import NgramCounter
  from nltk.lm.util import log_base2
  from nltk.lm.vocabulary import Vocabulary
label_desc: Use image node_id 1 to create a new Smoothing object  with example: obj = Smoothing(vocabulary, counter)