5个版本
0.1.4 | 2023年4月25日 |
---|---|
0.1.3 | 2021年2月28日 |
0.1.2 | 2021年2月28日 |
0.1.1 | 2021年2月23日 |
0.1.0 | 2021年2月23日 |
编码类别下排名 872
70KB
1.5K SLoC
namegen
这个库提供了高性能的随机名称生成,即使在较旧的计算机上也能在亚微秒内生成完整的名称。我的使用场景是一个网站,但我将它设计得足够通用,以至于它可以适应其他程序生成系统。
特性
serde
支持,带有功能标志serde
wasm_bindgen
支持。GitHub仓库有一个用于构建它的项目。
示例
格式
名称格式具有特殊语法。它们描述了如何从部分构建完整的名称。这些标记在花括号内,它们的含义如下。
{first_name}
:生成名为first_name
的部分。{=stuff}
:返回单词 "stuff"。{first_name|=Unnamed}
:一个|
表示在项目之间随机选择。这里它将生成first_name
部分或仅生成单词 Unnamed。{:full_name}
::
前缀表示一个格式。它只能引用之前添加的格式,这既是为了优化,也是为了避免无限递归。
以下是一些示例。
{first_name} {last_name}
:带有空格分隔的引用名称部分。{first}'{clan} {=vas|=nar} {ship}
:第三个{...}
是这两个中的任意一个。{:full_name|:first_name}, the {title}
: 第一个{...}
在这两种格式之间进行选择。
生成器
markov
使用二阶马尔可夫链生成名称。这不是一个简单的实现,但为了生成更忠实于真实名称的名称,已经做出了一些限制。
- 开头、中间和结尾不被视为相同类型的节点,名称的长度在生成开始时选择。
- 可以对它施加一个标记频率限制,以防止生成的名称中的标记出现频率高于任何样本。
cfgrammar
使用上下文无关文法生成名称,并有一些限制以保持符号频率在可接受范围内并处理那些讨厌的 y
。
- 深度是固定的,因此结果规则分解成标记规则,然后获取标记。
wordlist
一个简单的词表生成器,适用于输出应为样本之一的场景。样本可以加权。
依赖关系
~0.5–1MB
~19K SLoC