文件名有“ rxfilename”和“wxfilename” 两种类型
“ -” 或者“ ” 表示标准的输入;
filename:12345 定位到12345
Table 有两种形式: “ archive”和“ script”文件。 它们之间的差别在于:archive
包含实际的数据, 而 script
文件则指出数据的具体位置
从 Tabla中读数据的程序需要一个“ rspecifier” 输入, 该字符串指明了如何读取索引数据
写数据到Table 中的程序需要一个“ wspecifier” 输入, 该字符串指示如何写数据
常用的“rspecifiers” 有“ ark:-” , 表示从标准的输入中读取archive数据
“scp:foo.scp” 表示 script 文件“ foo.scp” 会告诉我们从哪里去读取数据
rspecifiers文件参数:
s:keys是有序的
cs:按顺序访问数据 (程序不满足会崩溃)
p :忽略错误
当Kaldi
程序有多个“ rspecifiers” 输入时, 程序会轮流访问相应的对象; 其中第一个使用顺序访问, 而后面的采用随机访问, 因此,第一个“rspecifier” 不需要“
s, cs” 选项
Table 有三种访问方式:
- TableWriter
- SequentialTableReader
- RandomAccessTableReader(RandomAccessTableReaderMapped)
访问表的代码可将表看作通用的映射或者列表。 数据的格式以及读过程中的其它方面( 例如误差容忍度) 可通过“rspecifiers” 和
“ wspecifiers” 中的选项来控制, 而不必在调用代码中处理; 在上述代码示例中,选项“t” 指明以文本形式进行写数据
Table的柏拉图式设计是将字符串映射为对象的一种映射。 但是, 若我们并不是进行随机访问一个特定的表, 并且该表包含重复的实体串时, 这种代码设计并
不好
例子:
ark,scp:/some/dir/foo.ark,/some/dir/foo.scp
会输出一个 archive 文件及一个script
文件
ark,t,f:data/my.ark
ark,scp,t,f:data/my.ark,|gzip -c > data/my.scp.gz
ark:o,s,cs:-
scp,p:data/my.scp