我发现自己正在网上搜寻类似于URL的字符串生成器,该生成器类似于twitch的片段随机URL架构。有关我的意思的示例,请参见here。我碰巧发现了readable-url,但可惜的是npm
。所以...为了使这一功能对Python用户可用,我正在为我们做一个!实际上,我已经做到了,它在我的github now中。
我的难题是我想确保所有字符串对于每个生成的响应都是唯一的。完整代码如下。
from random import choice, sample
vowels = {'a', 'e', 'i', 'o', 'u'}
with open("words/adjectives.txt") as adjs_file:
adjectives = adjs_file.read().split()
with open("words/nouns.txt") as words_file:
nouns = words_file.read().split()
class SentenceURL:
def __init__(self, word_count = 3, capitalize = True, seperator = ''):
self.word_count = word_count
self.capitalize = capitalize
self.seperator = seperator
def generate():
"""Generates readable URLs like Twitch's clips"""
if self.word_count < 2:
raise ValueError('Minimum value expected: 2')
elif self.word_count > 10:
raise ValueError('Maximum value expected: 10')
noun = choice(nouns)
word_list = []
if self.word_count > 3:
if noun in vowels:
word_list = ['an']
else:
word_list = [choice(('a', 'the'))]
word_list.extend(sample(adjectives, k = self.word_count-1))
if self.word_count > 4:
word_list.insert(2, 'and')
word_list.append(noun)
if self.capitalize:
word_list = map(str.title, word_list)
return self.seperator.join(word_list)
所以我最初的想法是只保留一组运行中的先前使用过的字符串,看看是否有新字符串存在,然后再生成另一个,这很容易实现,但是效率很低。我还有什么其他选择?谢谢!