#generator #random #schema-file #cli #file-path #development #file-format

bin+lib سبرد-جین

crate برای تولید داده‌های تصادفی بر اساس اسکیمای Schema-Based Random Data GENerator

1 روان‌سازی

0.1.0 21 آوریل 2022

#924 در Science

MIT مجوز

200KB
4K SLoC

درباره

ژاپنی

crates.io

مستند API

این یک crate است (Schema-Based Random Data GENerator، به عنوان SBRD GEN) که می‌تواند داده‌های поддاعی تصادفی بر اساس یک اسکیمای schema را تولید کند. این ابزار هم به عنوان یک کتابخانه و هم به عنوان ابزار فرمان‌لاین (CLI) موجود است.

برای اطلاعات بیشتر در مورد اسکیما و تولیدکنندگان اسکیما به درباره اسکیما و برای لیست تولیدکنندگان قابل تعیین و سازندگان آن‌ها به لیست تولیدکنندگان قابل تعیین مراجعه کنید.

این برنامه از serde برای تجزیه و تحلیل اسکیما و فرمت نتایج تولید شده استفاده می‌کند.

وقتی به عنوان یک کتابخانه استفاده می‌شود

اگر می‌خواهید آن را به عنوان یک کتابخانه استفاده کنید، دو روش وجود دارد: چگونه از یک تولیدکننده به تنهایی استفاده کنید و چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید.

چگونه از یک تولیدکننده به تنهایی استفاده کنید

وقتی نتایج تولید شده به اندازه کافی خوب نیستند که نیاز به ترکیب باشند، می‌توان از یک روش تولیدکننده به تنهایی استفاده کرد. البته، آن‌ها می‌توانند توسط چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید تولید شوند.

استفاده به شرح زیر است

  1. با استفاده از new_xx (که xx متغیر است) در GeneratorBuilder یک سازنده (builder) آماده کنید; اگر می‌خواهید بتوانید nulls تولید کنید، توضیحات nullable را اضافه کنید.
  2. سازنده را به یک تولیدکننده تبدیل کنید با استفاده از build.
  3. داده‌های поддاعی را با انتقال نوع دانه و محیط به تولیدکننده تولید کنید.

در زیر یک مثال از توصیف واقعی آورده شده است.

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);
}

چگونه چند تولیدکننده را با یک اسکیما ترکیب کنید

اگر می‌خواهید از چند تولیدکننده استفاده کنید، می‌توانید از این روش استفاده کنید.

روند به شرح زیر است

  1. 准备一个ParentGeneratorBuilder列表,作为你想要使用的生成器的列表。注意,这个列表是从上到下用于生成的,所以如果你声明它们的顺序错误,脚本格式,它们可以用生成的值替换键,将无法正常工作。
  2. 准备一个你希望从生成器中输出的键的列表。
  3. 使用你想要输出的键的列表和你想要使用的生成器列表作为参数来构建SchemaBuilder
  4. 构建SchemaBuilder并将其转换为Schema
  5. 使用转换后的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 : --type <OUTPUT_TYPE>
    • 具体2 : -t <OUTPUT_TYPE>
    • 描述 : 指定输出格式的选项。指定用于<OUTPUT_TYPE>的格式化器。
    • 可用选项 : yaml, json, csv, tsv
    • 默认 : json
  • 输出数量
    • 具体1 : --num <COUNT>
    • 具体2 : -n <COUNT>
    • 描述 : 指定模式中由keys指定的虚数据集的数量。在<COUNT>中指定数量。
    • 默认 : 10
  • 表示键标题不应输出。
    • 具体 : --no-header
    • 描述 : 指定是否要在输出结果中包含键。
  • 仅执行模式解析
    • 具体 : --dry-run
    • 描述 : 指定仅执行模式解析,不输出虚数据并退出。
  • 帮助
    • 具体1 : --help
    • 具体2 : -h
    • 描述 : 指定何时检查帮助。
  • 版本
    • 具体1 : --version
    • 具体2 : -V
    • 描述 : 指定何时检查版本。

关于模式

模式由一个Map(KVS)指定,该Map包含一个序列的,这些键将与keys一起输出,以及一个由generators作为键的生成器构建器序列。支持的格式是Yaml和Json。

有关示例描述,请参阅all.yamlall.json

值上下文

从模式生成虚数据时,模式中指定的生成器从顶部执行。生成的值存储在称为值上下文的Map(KVS)数据结构中。换句话说,可以在值上下文中引用的键对是引用时成功生成的生成器的键/值对。此值上下文可用于从要输出的键检索与键关联的值,或将作为脚本格式指定的"{key}"(括号和键之间没有空格)表示法替换为当前上下文中键的值,然后进行评估等。

父生成器的选项列表

父生成器由一个Map(KVS)指定,该Map包含键和构建器选项。结构为ParentGeneratorBuilder

使用key作为键的字符串指定用于识别生成器的键。

它还用作评估脚本格式时的替换键。

构建器

您可以在指定生成器列表中指定生成器选项。要生成的生成器由类型确定,其他选项的解释方式相同。

指定生成器列表

可以作为模式或单个生成器指定的生成器如下。

字符串构造函数(build_string模块)

此模块由一组生成器组成,这些生成器根据其他生成器生成的结果组装字符串。

分布系统(distribution模块)

此模块由一组基于分布函数生成随机数的生成器组成。

  • 正态分布生成器
    • 描述:根据正态分布生成随机数的生成器。
    • 备注:参数可以是实数(mean)和实数的标准差(std_dev)。默认值分别为0.0和1.0。
    • 结构:NormalGenerator
    • 类型:dist-normal
    • 必需选项:类型参数
    • 可用选项:类型可为空参数
    • 生成值类型:实数

评估系统(eval模块)

此模块由一组生成器组成,这些生成器评估给定的表达式并输出一个值。

  • 评估生成器
    • 描述:输出评估指定脚本的结果。
    • 备注:无
    • 结构:EvalGenerator
    • 类型:eval-int(整数),eval-real(实数),eval-bool(布尔),eval-string(字符串)
    • 必需选项: 类型脚本
    • 可用选项: 类型可空脚本
    • 生成值类型:整数(eval-int),实数(eval-real),布尔(eval-bool),字符串(eval-string)

顺序变更系统(增量模块)

本模块包含一系列按顺序变化的生成器,例如每次执行时增加一定量。

  • 增量ID生成器
    • 描述:在每次生成之前,向指定的 增量 的步数中添加生成器的生成器。初始值是指定 增量 的初始值。
    • 备注:增量 的默认值为从 1 开始增加 1。
    • 结构: IncrementIdGenerator
    • 类型:increment-id
    • 必需选项: 类型
    • 可用选项: 类型可空增量(整数)
    • 生成值类型:整数

原语(原语模块)

本模块包含一系列生成基本值的生成器。

  • int生成器
    • 描述:生成具有指定 范围 的整数的生成器,默认范围在 i16 的最小值(-32768)和最大值(32767)之间。
    • 备注:无
    • 结构: IntGenerator
    • 类型:int
    • 必需选项: 类型
    • 可用选项: 类型可空范围(整数)
    • 生成值类型:整数
  • real生成器
    • 描述:生成指定 范围 中的实数的生成器,默认范围在 i16 的最小值(-32768)和最大值(32767)之间。
    • 备注:生成的值的绝对值越大,小数点后的位数就越少,绝对值越小,小数点后的位数就越多。
    • 结构: RealGenerator
    • 类型:real
    • 必需选项: 类型
    • 可用选项: 类型可空范围(实数)
    • 生成值类型:实数
  • bool生成器
    • 描述:以 50% 的概率生成 true 或 false。
    • 备注:无
    • 结构: BoolGenerator
    • 类型:bool
    • 必需选项: 类型
    • 可用选项: 类型可空
    • 生成值类型:布尔
  • 日期时间生成器
    • 描述:此生成器以 格式 指定的格式生成日期和时间。
    • 备注:由 范围 指定的日期和时间的格式是 "%Y-%m-%d %H:%M:%S"。格式 的默认值格式具有相同的格式。有关格式的详细信息,请参阅此处。默认值 范围 为 1900-01-01 00:00:00 至 2151-01-01 00:00:00。未指定的边界假定具有默认值。
    • 结构: DateTimeGenerator
    • 类型:date-time
    • 必需选项: 类型
    • 可用选项: 类型可空范围(日期时间字符串)格式
    • 生成值类型:字符串
  • 日期生成器
    • 描述:本生成器生成指定格式的日期。
    • 备注:由范围指定的日期格式为"%Y-%m-%d"。默认值格式与格式相同。格式详情请见这里。默认值范围从1900-01-01至2151-01-01。未指定的边界假定使用默认值。
    • 结构:DateGenerator
    • 类型:日期
    • 必需选项: 类型
    • 可用选项:类型可空范围(日期字符串)格式
    • 生成值类型:字符串
  • 时间生成器
    • 描述:本生成器生成指定格式的日期。
    • 备注:由范围指定的时间格式为"%H:%M:%S"。默认值格式与格式相同。格式详情请见这里。默认值范围从00:00:00至23:59:59。未指定的边界假定使用默认值。
    • 结构:TimeGenerator
    • 类型:时间
    • 必需选项: 类型
    • 可用选项:类型可空范围(时间字符串)格式
    • 生成值类型:字符串
  • 总是null生成器
    • 描述:总是生成null的生成器。
    • 备注:无
    • 结构:AlwaysNullGenerator
    • 类型:总是null
    • 必需选项: 类型
    • 可用选项: 类型可空
    • 生成值类型:Null

子生成器随机选择系统(random_children模块)

子生成器列表是一个生成值的生成器。

  • case when生成器
    • 描述:通过评估声明顺序中的条件并使用为真条件所指定的子生成器来生成的生成器。
    • 备注:如果条件未捕获,则需要一个为默认条件(即,未指定条件)的子生成器。
    • 结构:CaseWhenGenerator
    • 类型: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