1.首先将lat.1.gz和lat.2.gz解压出来
gunzip -c lat.1.gz >lat.1
gunzip -c lat.2.gz >lat.2
2.将lat.1通过lattice-copy转化为相应的ark和scp
lattice-copy --write-compact=true ark:lat.1 ark,scp:lat1.ark,lat1.scp
lattice-copy --write-compact=true ark:lat.2 ark,scp:lat2.ark,lat2.scp
3.将两个scp合并为一个scp
cat lat1.scp lat2.scp >lat.scp
4.filter_scp.pl对scp进行清洗,删除掉uut2speak没有出现过得语句
filter_scp.pl的脚本功能详细解释参照我的博客:传送门
./utils/filter_scp.pl utt2spk lat.scp >lat_clean.scp
5.lattice-copy生成新的ark
lattice-copy --write-compact=true scp:lat_clean.scp ark:lat.ark
6.将新得到的ark压缩成压缩包
gzip -c lat.ark >lat.gz
PS:4.5.6一般在脚本中会合并成一行代码
lattice-copy --write-compact=true \
"scp:utils/filter_scp.pl utt2spk lat.scp |" \
"ark:| gzip -c >lat.gz" ||exit 1
7.现在我们重新解压我们得到的lat.gz来比较一下我们得到的scp和之前合并的scp的区别:
gunzip -c lat.gz >lat
lattice-copy --write-compact=true ark:lat ark,scp:latcheck.ark,latcheck.scp
以下是我们之前合并清洗之后的scp,他上半部分的话语id指向的ark和下半部分的话语id所指向的ark是不同。
head lat_clean.scp
tail lat_clean.scp
G0001T0001G0001S01010002 lat1.ark:25
G0001T0001G0001S01010003 lat1.ark:4908
G0001T0001G0001S01010004 lat1.ark:7199
G0001T0001G0001S01010005 lat1.ark:11086
G0001T0001G0001S01010006 lat1.ark:14941
G0001T0001G0001S01010009 lat1.ark:18876
.....
.....
G0071T0055G0071S0497 lat2.ark:69946454
G0071T0055G0071S0498 lat2.ark:69949529
G0071T0055G0071S0499 lat2.ark:69951588
G0071T0055G0071S0500 lat2.ark:69953691
以下是新生成的scp,指向的都是我们刚新生成的ark:
head latcheck.scp
tail latcheck.scp
G0001T0001G0001S01010002 latcheck.ark:25
G0001T0001G0001S01010003 latcheck.ark:4908
G0001T0001G0001S01010004 latcheck.ark:7199
G0001T0001G0001S01010005 latcheck.ark:11086
G0001T0001G0001S01010006 latcheck.ark:14941
......
......
G0071T0055G0071S0497 latcheck.ark:139780929
G0071T0055G0071S0498 latcheck.ark:139784004
G0071T0055G0071S0499 latcheck.ark:139786063
G0071T0055G0071S0500 latcheck.ark:139788166
8.几个需要注意的重点
1.lattice-copy生成出来的两个文件,scp和ark。scp是我们用来操作的,可以进行删除,添加等等。
2.lattice-copy通过scp可以生成相应的ark。我对scp操作完之后,就通过lattice-copy来把scp生成ark文件,输入是scp,也就是我们通过scp中的内容信息,将指向的ark合并成一个新的ark。