是否有任何python库可以生成随机标题和随机描述。
随机标题:语法正确(但随机)的英语句子,少于5个单词。 随机描述:一个语法正确(但随机)的英语句子,少于20个单词。
我正在测试具有标题和说明字段的产品。我想用随机标题和随机描述创建多个对象,而不是“标题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:
您可以使用马尔可夫链来实现这一目标。为此,您需要执行以下步骤(从我链接的页面):
- 有一个文本作为我们选择的语料库 下一次过渡。
- 从文本中连续两个单词开头。 最后两个词构成了现在的状态。
- 下一步生成 这个词是马尔可夫过渡。要生成下一个单词,请查看 语料库,找到给定的两个词之后出现的词 话。随机选择其中一个。
- 重复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'
在[1]到In [3]之后,您只需要使用正确的参数调用markov.generate_markov_text()
,以根据需要生成5和20个单词的序列。