0

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

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

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

4

1 回答 1

5

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


使用 Python 生成带有马尔可夫链的伪随机文本

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

  1. 有一个文本将作为我们从中选择下一个转换的语料库。
  2. 从文本中的两个连续单词开始。最后两个词构成了当前状态。
  3. 生成下一个单词是马尔可夫转换。要生成下一个单词,请查看语料库,并找出给定两个单词之后出现的单词。随机选择其中之一。
  4. 重复 2,直到生成所需大小的文本。

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

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' 

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

于 2013-11-09T06:52:17.320 回答