Skip to main content
 首页 » 编程设计

python之NLTK 文本生成()。使用不同的 ngram 模型执行此操作

2025年05月04日11xxx_UU

我必须使用 nltk 生成随机句子。然而,似乎 text.generate() 只给了我们带有三元组的句子。有什么办法可以将其扩展为包括一元字母和双字母字母组吗?

我当前的代码是:

exclude = set(string.punctuation) 
ln = ''.join(ch for ch in ln if ch not in exclude) 
 
 
words = nltk.word_tokenize(ln) 
my_bigrams = nltk.bigrams(words) 
my_trigrams = nltk.trigrams(words) 
 
 
tText = Text(words) 
tText1 = Text(my_bigrams) 
tText2 = Text(my_trigrams) 
print tText.generate() 
print tText1.generate() 
print tText2.generate() 

generate() 函数的变化:

def generate(self, length=100, c=3): 
    """ 
    Print random text, generated using a trigram language model. 
 
    :param length: The length of text to generate (default=100) 
    :type length: int 
    :seealso: NgramModel 
    """ 
    if '_trigram_model' not in self.__dict__: 
        print "Building ngram index..." 
        estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2) 
        self._trigram_model = NgramModel(c, self, estimator=estimator) 
    text = self._trigram_model.generate(length) 
    print tokenwrap(text) 

请您参考如下方法:

阅读您的代码后,有一些注意事项:

  • nltk.Text 仅将词作为参数,而不是元组(二元组、三元组)。

  • nltk.Text.generate() 专门使用三元组生成文本,如documentation will tell you

如果要使用一元组和二元组,则需要自己编写生成函数。应该很简单,以起点为起点generate()'s source .

您甚至可以将它动态附加到 nltk.Text 类,以便对象可以使用它:nltk.Text.generate_with_ngrams= my_generation_function(不要忘记将“self”作为第一个参数)