1 روانسازی
0.1.0 | 21 آوریل 2022 |
---|
#924 در Science
200KB
4K SLoC
درباره
این یک crate است (Schema-Based Random Data GENerator، به عنوان SBRD GEN) که میتواند دادههای поддاعی تصادفی بر اساس یک اسکیمای schema را تولید کند. این ابزار هم به عنوان یک کتابخانه و هم به عنوان ابزار فرمانلاین (CLI) موجود است.
برای اطلاعات بیشتر در مورد اسکیما و تولیدکنندگان اسکیما به درباره اسکیما و برای لیست تولیدکنندگان قابل تعیین و سازندگان آنها به لیست تولیدکنندگان قابل تعیین مراجعه کنید.
این برنامه از serde برای تجزیه و تحلیل اسکیما و فرمت نتایج تولید شده استفاده میکند.
وقتی به عنوان یک کتابخانه استفاده میشود
اگر میخواهید آن را به عنوان یک کتابخانه استفاده کنید، دو روش وجود دارد: چگونه از یک تولیدکننده به تنهایی استفاده کنید و چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید.
چگونه از یک تولیدکننده به تنهایی استفاده کنید
وقتی نتایج تولید شده به اندازه کافی خوب نیستند که نیاز به ترکیب باشند، میتوان از یک روش تولیدکننده به تنهایی استفاده کرد. البته، آنها میتوانند توسط چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید تولید شوند.
استفاده به شرح زیر است
- با استفاده از
new_xx
(که xx متغیر است) درGeneratorBuilder
یک سازنده (builder) آماده کنید; اگر میخواهید بتوانید nulls تولید کنید، توضیحاتnullable
را اضافه کنید. - سازنده را به یک تولیدکننده تبدیل کنید با استفاده از
build
. - دادههای поддاعی را با انتقال نوع دانه و محیط به تولیدکننده تولید کنید.
در زیر یک مثال از توصیف واقعی آورده شده است.
use rand::thread_rng;
use sbrd_gen::builder::GeneratorBuilder;
use sbrd_gen::value::DataValueMap;
fn main() {
let builder = GeneratorBuilder::new_int(Some((0..=100).into())).nullable();
let generator = builder.build().unwrap();
let generated_value = generator.generate(&mut thread_rng(), &DataValueMap::new()).unwrap();
println!("generated: {}", generated_value);
}
چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید
اگر میخواهید از چند تولیدکننده استفاده کنید، میتوانید از این روش استفاده کنید.
روند به شرح زیر است
- 准备一个
ParentGeneratorBuilder
列表,作为你想要使用的生成器的列表。注意,这个列表是从上到下用于生成的,所以如果你声明它们的顺序错误,脚本和格式,它们可以用生成的值替换键,将无法正常工作。 - 准备一个你希望从生成器中输出的键的列表。
- 使用你想要输出的键的列表和你想要使用的生成器列表作为参数来构建
SchemaBuilder
。 - 构建
SchemaBuilder
并将其转换为Schema
。 - 使用转换后的
Schema
生成generate
以生成示例数据,或者使用write_xx
(其中xx是变量)将数据写入GeneratedValueWriter
的跟踪中。
有关实际写入示例,请参阅all_builder.rs。
当用作CLI工具时
当用作CLI工具时,可以通过指定模式文件的文件路径来生成示例数据。CLI允许您指定模式文件的文件格式、输出的文件数量和输出的格式。有关详细信息,请参阅CLI帮助。
如何安装
有几种安装方法,最常见的是使用Cargo安装和从GitHub发行页面安装。
使用Cargo安装
有了cargo
命令,请运行以下命令。如果您收到sbrd-gen --help
的帮助信息,则安装成功。
cargo install sbrd-gen
sbrd-gen --help
从GitHub发行页面安装
要从GitHub发行页面安装,请从此处下载所需的版本。解压缩下载的文件夹后,通过二进制文件路径使其可用。如果您收到sbrd-gen --help
的帮助信息,则安装成功。
如何使用CLI工具
在Windows中,将可执行文件(例如sbrd-gen.exe
)传递给命令后,使用以下语法运行命令:sbrd-gen [OPTIONS] <SCHEMA_FILE_PATH>
。以下描述了可以指定的参数和选项,也可以在sbrd-gen --help
显示的帮助信息中查看。
参数
<SCHEMA_FILE_PATH>
: 包含要用于生成的模式的文件的文件路径。
选项
- 解析器
- 特定1 :
--parser <PARSER_TYPE>
- 特定2 :
-p <PARSER_TYPE>
- 描述 : 此选项指定要使用的解析器类型。指定用于
<PARSER_TYPE>
的解析器类型。 - 可用选项 : yaml, json
- 默认 : yaml
- 特定1 :
- 输出类型
- 具体1 :
--type <OUTPUT_TYPE>
- 具体2 :
-t <OUTPUT_TYPE>
- 描述 : 指定输出格式的选项。指定用于
<OUTPUT_TYPE>
的格式化器。 - 可用选项 : yaml, json, csv, tsv
- 默认 : json
- 具体1 :
- 输出数量
- 具体1 :
--num <COUNT>
- 具体2 :
-n <COUNT>
- 描述 : 指定模式中由
keys
指定的虚数据集的数量。在<COUNT>
中指定数量。 - 默认 : 10
- 具体1 :
- 表示键标题不应输出。
- 具体 :
--no-header
- 描述 : 指定是否要在输出结果中包含键。
- 具体 :
- 仅执行模式解析
- 具体 :
--dry-run
- 描述 : 指定仅执行模式解析,不输出虚数据并退出。
- 具体 :
- 帮助
- 具体1 :
--help
- 具体2 :
-h
- 描述 : 指定何时检查帮助。
- 具体1 :
- 版本
- 具体1 :
--version
- 具体2 :
-V
- 描述 : 指定何时检查版本。
- 具体1 :
关于模式
模式由一个Map(KVS)指定,该Map包含一个序列的键,这些键将与keys
一起输出,以及一个由generators
作为键的生成器构建器序列。支持的格式是Yaml和Json。
值上下文
从模式生成虚数据时,模式中指定的生成器从顶部执行。生成的值存储在称为值上下文的Map(KVS)数据结构中。换句话说,可以在值上下文中引用的键对是引用时成功生成的生成器的键/值对。此值上下文可用于从要输出的键检索与键关联的值,或将作为脚本或格式指定的"{key}"(括号和键之间没有空格)表示法替换为当前上下文中键的值,然后进行评估等。
父生成器的选项列表
父生成器由一个Map(KVS)指定,该Map包含键和构建器选项。结构为ParentGeneratorBuilder
。
键
使用key
作为键的字符串指定用于识别生成器的键。
构建器
您可以在指定生成器列表中指定生成器选项。要生成的生成器由类型确定,其他选项的解释方式相同。
指定生成器列表
可以作为模式或单个生成器指定的生成器如下。
字符串构造函数(build_string模块)
此模块由一组生成器组成,这些生成器根据其他生成器生成的结果组装字符串。
- 重复排列生成器
- 格式生成器
分布系统(distribution模块)
此模块由一组基于分布函数生成随机数的生成器组成。
- 正态分布生成器
评估系统(eval模块)
此模块由一组生成器组成,这些生成器评估给定的表达式并输出一个值。
- 评估生成器
顺序变更系统(增量模块)
本模块包含一系列按顺序变化的生成器,例如每次执行时增加一定量。
- 增量ID生成器
原语(原语模块)
本模块包含一系列生成基本值的生成器。
- int生成器
- real生成器
- bool生成器
- 日期时间生成器
- 日期生成器
- 时间生成器
- 总是null生成器
子生成器随机选择系统(random_children模块)
子生成器列表是一个生成值的生成器。
- case when生成器
- 随机子生成器
值替代系统(random_values模块)
本模块由一组生成器组成,这些生成器使用字符列表、值列表和外部文件路径生成值。
- 选择生成器
- 在生成器中获取值
- 获取值索引生成器
生成器选项列表
以下选项可以指定以构建生成器。可用选项因生成器而异,但其他所有选项都将被忽略。
类型
- 描述:在可指定生成器列表中列出的生成器类型,用于标识生成器的类型。
- 备注:无
- 结构:
GeneratorType
- 键名:
type
- 值类型:String
可空
- 描述:一个标志,指示除了生成器生成的值外,是否可以生成null;如果为true,则可以生成null;默认为false。
- 备注:无
- 结构:
bool
- 键名:
nulable
- 值类型:Boolean
格式
- 描述:此格式用于值上下文中的键/值对(假设这对是(键,值))。然后,在将格式中的"{key}"或"{key:
}"(括号、键和冒号之间没有空格)替换为格式化值后,将其评估为字符串。可以使用两个字符叠加来转义'{'和'}'字符,但请注意,'{'和'}'被优先解析为键指定,因此使用'{'和'}'作为键不会很好地识别键。请注意,您可以使用'{'和'}'作为输出键而不会遇到任何问题。 - 备注:有关语法的更多信息,请参阅此sbrd-gencrate中评估器的API文档。
- 结构:
String
- 键名:
format
- 值类型:String
脚本
- 描述:此脚本是在值上下文中的键/值对(假设这对是(键,值))。然后,在将其作为表达式评估之前,脚本中的"{key}"或"{key:
}"(括号、键和冒号之间没有空格)会被格式化值替换。可以使用两个字符叠加来转义'{'和'}'字符,但请注意,'{'和'}'被优先解析为键指定,因此使用'{'和'}'作为键不会很好地识别键。请注意,您可以使用'{'和'}'作为输出键而不会遇到任何问题。 - 备注:有关语法和表达式的更多信息,请参阅此sbrd-gencrate中评估器的API文档。
- 结构:
String
- 键名:
script
- 值类型:String
分隔符
- 描述:用于字符串构造等中的分隔字符串。
- 备注:无
- 结构:
String
- 键名:
separator
- 值类型:String
范围
- 描述:此选项用于指定迭代的数量范围和要生成的值范围。
- 备注:范围的六个可用值类型是整数、实数、字符串、日期时间字符串、日期字符串和时间字符串。有关指定日期/时间相关值的详细信息,请参阅各自的原始生成器。
- 结构:
ValueBound
- 键名:
range
- 值类型:由键
start
、值类型、键end
和键include_end
以及标志组成,后者指示end
的值是否包含在内,每个都是可选的。默认值include_end
为true。
增量
- 描述:指定每次生成器运行时将更新的值的初始值和变化量的选项。
- 备注:六个可用的值类型是整数、实数、字符串、日期时间字符串、日期字符串和时间字符串。指定值与指定范围相同。
- 结构:
ValueStep
- 键名:
increment
- 值类型:由键
initial
和值类型的初始值以及键step
和值类型组成,表示变化量,其中initial
是必需的,而step
是可选的。
子生成器列表
- 描述:此选项指定了在生成器选项列表中指定的生成器序列。此处指定的生成器称为子生成器,与父生成器不同,可以指定额外的子生成器选项列表。
- 备注:无
- 结构:
Vec<ChildGeneratorBuilder>
- 键名:
children
- 值类型:子生成器序列
字符列表
- 描述:选项用于列举用于随机选择的字符。
- 备注:无
- 结构:
String
- 键名:
chars
- 值类型:String
值列表
- 描述:选项用于列举用于随机选择的值。
- 备注:可用的值类型为整数、实数和字符串。
- 结构:
Vec<DataValue>
- 键名:
values
- 值类型:由整数、实数或字符串类型组成的序列
外部文件路径
- 描述:此选项指定了作为单行(每行一个值)列举要随机选择的值的文件路径。除了绝对路径外,还可以相对于架构文件指定。
- 备注:无
- 结构:
PathBuf
- 键名:
filepath
- 值类型:String
参数
- 描述:此选项用于指定构建分布函数所需的参数。请参阅分布系统中的每个生成器,了解要指定的键和值。
- 备注:无
- 结构:
DataValueMap<String>
- 键名:
parameters
- 值类型:KVS映射
子生成器选项列表
子生成器可以指定以下选项,除了生成器可以指定的选项。
条件
- 描述:选项用于指定要使用的子生成器的条件分支条件。如果指定了,它将像脚本一样评估为真/假,如果没有指定,则始终返回真。
- 备注:无
- 结构:
String
- 键名:
condition
- 值类型:String
权重
- 描述:选项用于指定子生成器的随机选择权重。权重越高,被选择的频率越高;默认权重为1。
- 备注:无
- 结构:
Weight
- 键名:
weight
- 值类型:整数(非负数)
许可证
MIT
依赖项
~13-23MB
~336K SLoC