kaldi I/O
来源:互联网 发布:mac 10.7.5怎么升级 编辑:程序博客网 时间:2024/05/18 20:37
kaldi中经常出现ark或者scp,今天就对kaldi I/O进行一下讨论,
archive(.ark) 和 script(.scp) 都是文件格式,这两种格式都被映成table的格式,一个table是一组有规则的表,前面是比如utt2spk中,前面一列是uid,后面一列是speaker,如下所示:
utt1 spk_of_utt1
utt2 spk_of_utt2
…
或者比如spk2utt 前面一列是spk,后面一串是数据,如下所示:
spk1 utt1_of_spk1 utt2_of_spk1 utt3_of_spk1
spk2 utt2_of_spk2 utt2_of_spk2
…
这种table前面都是一个可识别的字符串,后面跟着一个数据或者一串数据,这里的一个table不是一个C++的类或者对象,而是对于不同的需求,有不同的C++对象进行读写。
ark和scp区别在于如下:
1)archive文件和script文件的真正区别在于是否真实包含数据,
2)script文件指向了文件的位置,而archive包含真实的数据;
3)scp格式是text-only的格式,每行是个key(一般是句子的标识符(id))后接空格,接这个句子特征数据的路径。
ark格式可以是text或binary格式,(你可以写为text格式,命令行要加’t’,binary是默认的格式)文件里面数据的格式是:key(如句子的id)空格后接数据。
kaldi中还有“rspecifier”和“wspecifier”,其中
“rspecifier”用于说明如何读表的字符串;而“wspecifier”
用于说明如何写入表的字符串
需要注意的是 “rspecifier”和“wspecifier”并不是C++中的类或者对象,他们只是为了方便使用,对变量的描述名称,
“rspecifier”类型有如下方式:
1)“-”或者“” 表示标准输入
2)管道“|”输入 通过popen()得到管道输入的字符串
3)文件偏移输入,比如“/some/filename:123456”,打开文件并定位到行12345
4)没有比配以上模式的话,认为输入为一个文件名,当然如果显然随便写一个串,当试图当文件打开的话,如果文件不存在就会报错
5)没有输入,如:一长串的空格“ |”
“wspecifier”类型有如下方式:
1)“-”或者“”表示标准输出
2)管道“|”输出,通过popen打开文件并输出
3)普通文件,如“/some/filename”
4)没有输出,不合法的文件名称,如:一串的空格“| ”
今天顺便看了一下kaldi的代码,方便理解rspecifier如何对上述提到的5中类型进行解析,其代码如下:
分析了一下代码,虽然kaldi是个很给力的工具,但是仔细看其代码,真心感觉kaldi的代码太差了(见标红的两处)。
参考地址:
http://kaldi-asr.org/doc/io_tut.html
http://kaldi-asr.org/doc/io.html#io_sec_tables
http://kaldi-asr.org/doc/group__io__group.html#gga5fc772c800c3d40d2b95564e8a839baba8d445a74e5988adcc38570c156ea2dfc
- kaldi I/O机制
- kaldi I/O
- Kaldi学习手记(三): Kaldi 的I/O机制
- I/O
- I/O
- I/O
- I/O
- I/O
- I/O
- I/O
- I/O
- I/O
- i/o
- I/O
- I/O
- I/O
- I/O
- I/O
- Ubuntu环境下OpenCV 3.2版本中CMake error the source directory does not exist
- 点到线段距离(加样例 “玲珑杯”郑州轻工业学院第九届ACM程序设计大赛暨河南高校邀请赛-正式赛)
- Ionic 自动生成启动图标
- 【学习】 区间消除类dp
- 字符串
- kaldi I/O
- 直接插入排序
- 【Android】Menu详解
- 堆栈练习2:HDOJ1870
- strom ack 机制二
- mongo的启动和终止
- ATM的面向对象设计
- [数据结构]Hash Table(哈希表)
- 轮子和车的故事