2016-06-06 3 views
6

Я пытаюсь получить список Биграммного данного предложения, например, если я печатаю,Сформировать биграммы с NLTK

To be or not to be 

Я хочу, чтобы программа для создания

 to be, be or, or not, not to, to be 

Я попытался следующим код, но только дает мне

<generator object bigrams at 0x0000000009231360> 

Это мой код:

import nltk 
    bigrm = nltk.bigrams(text) 
    print(bigrm) 

Итак, как мне получить то, что я хочу? Я хочу список комбинаций слов, подобных выше (быть, быть или, или нет, а не быть).

+0

Try: 'список (bigrm)' – alvas

+0

Просто потому что я люблю код: [Здесь] (http://locallyoptimal.com/blog/2013/01/20/elegant-n-gram-generation-in-python /) - это отличный независимый от NLTK файл bigram-oneliner. – patrick

ответ

6

nltk.bigrams() возвращает итератор (генератор специально) из числа биграмм. Если вы хотите получить список, передайте итератору list(). Он также ожидает, что последовательность элементов для генерации биграмм из, так что вы должны разделить текст перед передачей его (если вы еще не сделали это):

bigrm = list(nltk.bigrams(text.split())) 

Чтобы распечатать их через запятую, вы могли бы (в питон 3):

print(*map(' '.join, bigrm), sep=', ') 

Если на Python 2, то, например:

print ', '.join(' '.join((a, b)) for a, b in bigrm) 

Обратите внимание, что только для печати вам не нужно, чтобы создать список, просто использовать итератор.

+0

Спасибо! работает отлично! –

1

Следующий код производят bigram список для данного предложения

>>> import nltk 
>>> from nltk.tokenize import word_tokenize 
>>> text = "to be or not to be" 
>>> tokens = nltk.word_tokenize(text) 
>>> bigrm = nltk.bigrams(tokens) 
>>> print(*map(' '.join, bigrm), sep=', ') 
to be, be or, or not, not to, to be 
Смежные вопросы