Nik*_*dra 13 python nltk n-gram
我试图生成一个给定句子的二元组列表,例如,如果我输入,
To be or not to be
Run Code Online (Sandbox Code Playgroud)
我希望程序生成
to be, be or, or not, not to, to be
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但只是给了我
<generator object bigrams at 0x0000000009231360>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import nltk
bigrm = nltk.bigrams(text)
print(bigrm)
Run Code Online (Sandbox Code Playgroud)
那我怎么得到我想要的?我想要一个上面的单词组合列表(be,be或be,not to,to).
Ilj*_*ilä 16
nltk.bigrams()返回一个bigrams的迭代器(特别是一个生成器).如果需要列表,请将迭代器传递给list().它还需要一系列项目来生成bigrams,因此你必须在传递之前拆分文本(如果你还没有这样做):
bigrm = list(nltk.bigrams(text.split()))
Run Code Online (Sandbox Code Playgroud)
要用逗号分隔打印出来,你可以(在python 3中):
print(*map(' '.join, bigrm), sep=', ')
Run Code Online (Sandbox Code Playgroud)
如果在python 2上,那么例如:
print ', '.join(' '.join((a, b)) for a, b in bigrm)
Run Code Online (Sandbox Code Playgroud)
请注意,仅用于打印,您不需要生成列表,只需使用迭代器.
以下代码生成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
Run Code Online (Sandbox Code Playgroud)