aishell_data_prep.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # Copyright 2017 Xingyu Na
  3. # Apache 2.0
  4. #. ./path.sh || exit 1;
  5. if [ $# != 3 ]; then
  6. echo "Usage: $0 <audio-path> <text-path> <output-path>"
  7. echo " $0 /export/a05/xna/data/data_aishell/wav /export/a05/xna/data/data_aishell/transcript data"
  8. exit 1;
  9. fi
  10. aishell_audio_dir=$1
  11. aishell_text=$2/aishell_transcript_v0.8.txt
  12. output_dir=$3
  13. train_dir=$output_dir/data/local/train
  14. dev_dir=$output_dir/data/local/dev
  15. test_dir=$output_dir/data/local/test
  16. tmp_dir=$output_dir/data/local/tmp
  17. mkdir -p $train_dir
  18. mkdir -p $dev_dir
  19. mkdir -p $test_dir
  20. mkdir -p $tmp_dir
  21. # data directory check
  22. if [ ! -d $aishell_audio_dir ] || [ ! -f $aishell_text ]; then
  23. echo "Error: $0 requires two directory arguments"
  24. exit 1;
  25. fi
  26. # find wav audio file for train, dev and test resp.
  27. find $aishell_audio_dir -iname "*.wav" > $tmp_dir/wav.flist
  28. n=`cat $tmp_dir/wav.flist | wc -l`
  29. [ $n -ne 141925 ] && \
  30. echo Warning: expected 141925 data data files, found $n
  31. grep -i "wav/train" $tmp_dir/wav.flist > $train_dir/wav.flist || exit 1;
  32. grep -i "wav/dev" $tmp_dir/wav.flist > $dev_dir/wav.flist || exit 1;
  33. grep -i "wav/test" $tmp_dir/wav.flist > $test_dir/wav.flist || exit 1;
  34. rm -r $tmp_dir
  35. # Transcriptions preparation
  36. for dir in $train_dir $dev_dir $test_dir; do
  37. echo Preparing $dir transcriptions
  38. sed -e 's/\.wav//' $dir/wav.flist | awk -F '/' '{print $NF}' > $dir/utt.list
  39. paste -d' ' $dir/utt.list $dir/wav.flist > $dir/wav.scp_all
  40. utils/filter_scp.pl -f 1 $dir/utt.list $aishell_text > $dir/transcripts.txt
  41. awk '{print $1}' $dir/transcripts.txt > $dir/utt.list
  42. utils/filter_scp.pl -f 1 $dir/utt.list $dir/wav.scp_all | sort -u > $dir/wav.scp
  43. sort -u $dir/transcripts.txt > $dir/text
  44. done
  45. mkdir -p $output_dir/data/train $output_dir/data/dev $output_dir/data/test
  46. for f in wav.scp text; do
  47. cp $train_dir/$f $output_dir/data/train/$f || exit 1;
  48. cp $dev_dir/$f $output_dir/data/dev/$f || exit 1;
  49. cp $test_dir/$f $output_dir/data/test/$f || exit 1;
  50. done
  51. echo "$0: AISHELL data preparation succeeded"
  52. exit 0;