文件名有“ 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