これを virtualenv でテストしたところ、動作しました。
In [20]: from nltk import bigrams
In [21]: bigrams('This is a test')
Out[21]:
[('T', 'h'),
('h', 'i'),
('i', 's'),
('s', ' '),
(' ', 'i'),
('i', 's'),
('s', ' '),
(' ', 'a'),
('a', ' '),
(' ', 't'),
('t', 'e'),
('e', 's'),
('s', 't')]
それはあなたが得ている唯一のエラーですか?
ところで、2 番目の質問については、
from collections import Counter
In [44]: b = bigrams('This is a test')
In [45]: Counter(b)
Out[45]: Counter({('i', 's'): 2, ('s', ' '): 2, ('a', ' '): 1, (' ', 't'): 1, ('e', 's'): 1, ('h', 'i'): 1, ('t', 'e'): 1, ('T', 'h'): 1, (' ', 'i'): 1, (' ', 'a'): 1, ('s', 't'): 1})
単語の場合:
In [49]: b = bigrams("This is a test".split(' '))
In [50]: b
Out[50]: [('This', 'is'), ('is', 'a'), ('a', 'test')]
In [51]: Counter(b)
Out[51]: Counter({('is', 'a'): 1, ('a', 'test'): 1, ('This', 'is'): 1})
この単語による分割は明らかに非常に表面的なものですが、アプリケーションによってはそれで十分な場合があります。明らかに、はるかに洗練された nltk のトークン化を使用できます。
最終的な目標を達成するために、次のようなことができます。
In [56]: d = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
In [56]: from nltk import trigrams
In [57]: tri = trigrams(d.split(' '))
In [60]: counter = Counter(tri)
In [61]: import random
In [62]: random.sample(counter, 5)
Out[62]:
[('Ipsum', 'has', 'been'),
('industry.', 'Lorem', 'Ipsum'),
('Ipsum', 'passages,', 'and'),
('was', 'popularised', 'in'),
('galley', 'of', 'type')]
出力が不必要に大きかったため、出力をトリミングしましたが、おわかりいただけたでしょうか。