I wonder if it's better to make a generic >3gram collocation finder, for users to experiment with. (I expect that as one increases n, collocation is much more correlated with raw frequency.)

The counters correspond to `[''.join(tup) for tup in itertools.product(['x', 'i'], repeat=4) if tup[0] == 'i']`, in which `word_fd` is the first and `ngram_fd` the last. You could calculate this list of masks, and build a `FreqDist` for each. Many association measures only use `word_fd` and `ngram_fd`, so depending on a user option, you could just ignore the other masks when collecting frequencies.