#!/bin/bash

# Copyright 2018 Jarvan Wang Apache 2.0.

# Copyright 2016 Xiaohui Zhang Apache 2.0.

 
 

# This srcipt operates on lattice directories, such as exp/tri4a_lats

# the output is a new lat dir which has lattices from all the input lattice dirs

 
 

# Begin configuration section.

cmd=run.pl

extra_files=

num_jobs=4

# End configuration section.

echo "$0 $@" # Print the command line for logging

 
 

if [ -f path.sh ]; then . ./path.sh; fi

. parse_options.sh || exit 1;

 
 

if [[ $# -lt 3 ]]; then

echo "Usage: $0 [options] <data> <dest-lat-dir> <src-lat-dir1> <src-lat-dir2> ..."

echo "e.g.: $0 --num-jobs 32 data/train exp/tri3_lat_combined exp/tri3_lat_1 exp_tri3_lat_2"

echo "Options:"

echo " --extra-files <file1 file2...> # specify addtional files in 'src-lat-dir1' to copy"

echo " --num-jobs <nj> # number of jobs used to split the data directory."

echo " Note, files that don't appear in the first source dir will not be added even if they appear in later ones."

echo " Other than lattices, only files from the first src lat dir are copied."

exit 1;

fi

 
 

data=$1;

shift;

dest=$1;

shift;

first_src=$1;

 
 

mkdir -p $dest;

rm $dest/{lat.*.gz,num_jobs} 2>/dev/null

 
 

cp $first_src/phones.txt $dest 2>/dev/null

 
 

export LC_ALL=C

 
 

for dir in $*; do

if [ ! -f $dir/lat.1.gz ]; then

echo "$0: check if lattices (lat.*.gz) are present in $dir."

exit 1;

fi

done

 
 

for dir in $*; do

for f in tree; do

diff $first_src/$f $dir/$f 1>/dev/null 2>&1

if [ $? -ne 0 ]; then

echo "$0: Cannot combine lattice directories with different $f files."

fi

done

done

 
 

for f in final.mdl tree cmvn_opts num_jobs $extra_files; do

if [ ! -f $first_src/$f ]; then

echo "combine_lat_dir.sh: no such file $first_src/$f"

exit 1;

fi

cp $first_src/$f $dest/

done

 
 

src_id=0

temp_dir=$dest/temp

[ -d $temp_dir ] && rm -r $temp_dir;

mkdir -p $temp_dir

echo "$0: dumping lattices in each source directory as single archive and index."

for dir in $*; do

src_id=$((src_id + 1))

cur_num_jobs=$(cat $dir/num_jobs) || exit 1;

lats=$(for n in $(seq $cur_num_jobs); do echo -n "$dir/lat.$n.gz "; done)

$cmd $dir/log/copy_lattices.log \

lattice-copy "ark:gunzip -c $lats|" \

ark,scp:$temp_dir/lat.$src_id.ark,$temp_dir/lat.$src_id.scp || exit 1;

done

sort -m $temp_dir/lat.*.scp > $temp_dir/lat.scp || exit 1;

 
 

echo "$0: splitting data to get reference utt2spk for individual lat.JOB.gz files."

utils/split_data.sh $data $num_jobs || exit 1;

 
 

echo "$0: splitting the lattices to appropriate chunks according to the reference utt2spk files."

utils/filter_scps.pl JOB=1:$num_jobs \

$data/split$num_jobs/JOB/utt2spk $temp_dir/lat.scp $temp_dir/lat.JOB.scp

 
 

for i in `seq 1 $num_jobs`; do

lattice-copy scp:$temp_dir/lat.${i}.scp "ark:|gzip -c >$dest/lat.$i.gz" || exit 1;

done

 
 

echo $num_jobs > $dest/num_jobs || exit 1

 
 

echo "$0: checking the lattice files generated have at least 90% of the utterances."

for i in `seq 1 $num_jobs`; do

num_lines=`cat $temp_dir/lat.$i.scp | wc -l` || exit 1;

num_lines_tot=`cat $data/split$num_jobs/$i/utt2spk | wc -l` || exit 1;

python -c "import sys;

percent = 100.0 * float($num_lines) / $num_lines_tot

if percent < 90 :

print ('$dest/lat.$i.gz {0}% utterances missing.'.format(percent))" || exit 1;

done

rm -r $temp_dir 2>/dev/null

 
 

echo "Combined lattices and stored in $dest"

exit 0

combine_lat_dirs.sh的更多相关文章

  1. 数据库备份并分离日志表(按月)sh 脚本

    #!/bin/sh year=`date +%Y` month=`date +%m` day=`date +%d` hour=`date +%H` dir="/data/dbbackup/f ...

  2. Linux下如何查找.sh后缀的文件

    find / -name *.sh或locate *.shfind 与locate的区别:locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称

  3. sh 测试网段在线主机

    yum install nmap nmap -sP  192.168.21.1/24 查看网段在线主机 grep -vwf file1 file2 文件内容比较 #!/bin/bash # day=` ...

  4. Maven打包生成可运行bat/sh脚本文件

    利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台.   <plugin>      <groupId>org ...

  5. 记一个简单的保护if 的sh脚本

    真是坑爹,就下面的sh,竟然也写了很久! if [ `pwd` != '/usr/xx/bin/tomcat' ] then echo "rstall is not allowed in c ...

  6. 主机巡检脚本:OSWatcher.sh

    主机巡检脚本:OSWatcher.sh 2016-09-26更新,目前该脚本只支持Linux操作系统,后续有需求可以继续完善. 注意: 经测试,普通用户执行脚本可以顺利执行前9项检查: 第10项,普通 ...

  7. Oracle巡检脚本:ORAWatcher.sh

    Oracle巡检脚本:ORAWatcher.sh #!/usr/bin/ksh echo "" echo "ORAWatcher Version:1.0.1" ...

  8. 解决:/bin/sh: 1: /home/**/custom_app.sh: Permission denied错误

    出现如下错误,一般是执行权限不够. /bin/sh: : /home/custom_app.sh: Permission denied 解决方法是:cd 到此文件目录,对提示的文件赋予可执行权限或读写 ...

  9. SH Script Grammar

    http://linux.about.com/library/cmd/blcmdl1_sh.htm http://pubs.opengroup.org/onlinepubs/9699919799/ut ...

随机推荐

  1. Pycharm 常用快捷键

    常用快捷键 快捷键 功能 Ctrl + Q 快速查看文档 Ctrl + F1 显示错误描述或警告信息 Ctrl + / 行注释(可选中多行) Ctrl + Alt + L 代码格式化 Ctrl + A ...

  2. 12 Django Rest Swagger生成api文档

    01-简介 Swagger:是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新.当接口有变动时,对应的接 ...

  3. Java的基本类型和包装类型

    测试的JDK版本:java version "1.7.0_79".Java的9中基本类型:void.char.boolean.byte.short.int.long.float.d ...

  4. uniApp——v-for 动态class、动态style

    :class="i.themColor"  <view v-for="i in htmlJSON" class="column" :c ...

  5. iis设置默认文档,提示web.config配置xml格式不正确

    网站上传后,配置默认文档,提示web.config配置xml格式不正确,几经尝试,发现是sqlserver密码中的“&”符号惹的祸,web.config文件中不能使用该字符.分享出来,大家遇到 ...

  6. 二 Array 数组常用操作方法

    数组链接 Array 构造上的方法 一.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable) ...

  7. cocos 场景制作流程

    前面的话 本文将详细介绍 cocos 场景制作流程 节点和组件 Cocos Creator 的工作流程是以组件式开发为核心的,组件式架构也称作组件-实体系统,简单的说,就是以组合而非继承的方式进行实体 ...

  8. Ffmpeg使用

    ffmpeg官网 刚开始安装的推荐博客|--利用FFmpeg 开发音视频流:一.二.三 1.分辨率码率 主要视频格式与码率: 分辨率 200p——对应的码率是256kpbs,也就是说,一分钟需要流量1 ...

  9. [模板] tarjan/联通分量/dfs树

    //to update 边的分类 有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边. 上图: 判定 有向图 对图进行dfs, 不考虑已经遍历过的点, 得到dfs序 \(dfn_i\). ...

  10. 微信小程序之初探(常见语法 VS vue)常见问题(点击不生效,数据绑定)

    最近在调研微信小程序开发,对于一个前端小白来说,在各种框架都还用不熟的情况下,再来开发小程序确实还是不容易. 小程序出来之初,听过演讲,看过一点点儿视频,感觉和angular语法有点相似(PS:那是也 ...