'Find contexts where the specified words can all appear; and
return a frequency distribution mapping each context to the
number of times that context was used.
:param words: The words used to seed the similarity search
:type words: str
:param fail_on_unknown: If true, then raise a value error if
any of the given words do not occur at all in the index.'

def common_contexts(self, words, fail_on_unknown=False):

    words = [self._key(w) for w in words]
    contexts = [set(self._word_to_contexts[w]) for w in words]
    empty = [words[i] for i in range(len(words)) if (not contexts[i])]
    common = reduce(set.intersection, contexts)
    if (empty and fail_on_unknown):
        raise ValueError(u'The    following    word(s)    were    not    found:', u'    '.join(words))
    elif (not common):
        return FreqDist()
    else:
        fd = FreqDist((c for w in words for c in self._word_to_contexts[w] if (c in common)))
        return fd
