在Python中生成随机标题和描述

时间:2013-11-09 06:31:34

标签: python

是否有任何python库可以生成随机标题和随机描述。

随机标题:语法正确(但随机)的英语句子,少于5个单词。 随机描述:一个语法正确(但随机)的英语句子,少于20个单词。

我正在测试具有标题和说明字段的产品。我想用随机标题和随机描述创建多个对象,而不是“标题1”“描述1”。

1 个答案:

答案 0 :(得分:4)

对于一个相当简单的解决方案,只需找到像[A-Z][a-z'\-]+[, ]([a-zA-Z'\-]+[;,]? ){15,25}[a-zA-Z'\-]+[.?!]这样的正则表达式的匹配项(匹配大写单词后跟15-25个单词(可能用逗号或分号跟随它们),然后是最后一个单词和结尾标点符号)在一些大块文本中。要获得更短,类似标题的短语,您可以匹配任何大约5个单词的序列(可能没有标点符号): ([a-zA-Z'\-]+ ){4,6}


来自Generating pseudo random text with Markov chains using Python

您可以使用马尔可夫链来实现这一目标。为此,您需要执行以下步骤(从我链接的页面):

  
      
  1. 有一个文本作为我们选择的语料库   下一次过渡。
  2.   
  3. 从文本中连续两个单词开头。   最后两个词构成了现在的状态。
  4.   
  5. 下一步生成   这个词是马尔可夫过渡。要生成下一个单词,请查看   语料库,找到给定的两个词之后出现的词   话。随机选择其中一个。
  6.   
  7. 重复2,直到需要的文字   生成大小。
  8.   

他们提供的代码来实现这一目标:

import random

class Markov(object):

    def __init__(self, open_file):
        self.cache = {}
        self.open_file = open_file
        self.words = self.file_to_words()
        self.word_size = len(self.words)
        self.database()


    def file_to_words(self):
        self.open_file.seek(0)
        data = self.open_file.read()
        words = data.split()
        return words


    def triples(self):
        """ Generates triples from the given data string. So if our string were
                "What a lovely day", we'd generate (What, a, lovely) and then
                (a, lovely, day).
        """

        if len(self.words) < 3:
            return

        for i in range(len(self.words) - 2):
            yield (self.words[i], self.words[i+1], self.words[i+2])

    def database(self):
        for w1, w2, w3 in self.triples():
            key = (w1, w2)
            if key in self.cache:
                self.cache[key].append(w3)
            else:
                self.cache[key] = [w3]

    def generate_markov_text(self, size=25):
        seed = random.randint(0, self.word_size-3)
        seed_word, next_word = self.words[seed], self.words[seed+1]
        w1, w2 = seed_word, next_word
        gen_words = []
        for i in xrange(size):
            gen_words.append(w1)
            w1, w2 = w2, random.choice(self.cache[(w1, w2)])
        gen_words.append(w2)
        return ' '.join(gen_words)

使用此代码,您可以执行类似以下示例的操作,将您的jeeves.txt替换为您选择的一些种子文本(更长时间更好)。

In [1]: file_ = open('/home/shabda/jeeves.txt')

In [2]: import markovgen

In [3]: markov = markovgen.Markov(file_)

In [4]: markov.generate_markov_text()
Out[4]: 'Can you put a few years of your twin-brother Alfred,
who was apt to rally round a bit. I should strongly advocate
the blue with milk' 

在[1]到In [3]之后,您只需要使用正确的参数调用markov.generate_markov_text(),以根据需要生成5和20个单词的序列。