def selectname(self, name, num=10):
if not name:
return []
evalnum = int(num ** (1/len(name))) + 1
namechars = [sorted(filter(ig1, ((n, self.firstchar.get(n, 1e-10 if 0x4E00 <= ord(n) < 0x9FCD else 0)) for n in self.lookupchar(name[0]))), key=ig1, reverse=1)]
namechars.extend(sorted(filter(ig1, ((n, self.secondchar.get(n, 1e-10 if 0x4E00 <= ord(n) < 0x9FCD else 0)) for n in self.lookupchar(l))), key=ig1, reverse=1)[:evalnum] for l in name[1:])
namechars = list(filter(None, namechars))[:10]
if not namechars:
return []
candidates = []
for group in itertools.product(*namechars):
gz = tuple(zip(*group))
gname = ''.join(gz[0])
gfreq = functools.reduce(operator.mul, gz[1])
candidates.append((gname, gfreq))
candidates.sort(key=ig1, reverse=1)
return [x[0] for x in candidates][:num]
评论列表
文章目录