たとえば、特定の文のバイグラムリストを作成しようとしています。入力した場合、
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)
それで、私が欲しいものをどうやって手に入れるのですか?上記のような単語の組み合わせのリストが必要です(be、be、または、not、not、to、be)。
nltk.bigrams()
は、バイグラムのイテレータ(具体的にはジェネレータ)を返します。リストが必要な場合は、イテレータをlist()
に渡します。また、バイグラムを生成するアイテムのシーケンスを想定しているため、テキストを渡す前に分割する必要があります(まだ行っていない場合)。
bigrm = list(nltk.bigrams(text.split()))
それらをコンマで区切って印刷するには、(in python 3):
print(*map(' '.join, bigrm), sep=', ')
On python 2の場合、たとえば:
print ', '.join(' '.join((a, b)) for a, b in bigrm)
印刷のためだけにリストを生成する必要はなく、イテレータを使用するだけです。
次のコードは、特定の文の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