【openfst样例1】Tokenization

Execise Data files

样例中需要的数据来源:
http://www.openfst.org/twiki/bin/view/FST/FstExamples

如果无法访问,可以在这里下载

Execise 1 Tokenization

第一个示例将ASCII字符序列转换为带有标点符号和去除空格的单词标记序列。 为此,我们将需要一个词典换能器,该词典换能器将从字母映射到其对应的单词标记。 一种简单的生成方式是使用OpenFst文本格式。 例如,“Mars”一词的格式为:

fstcompile --isymbols=ascii.syms --osymbols=wotw.syms >Mars.fst <<EOF
0 1 M Mars
1 2 a 
2 3 r 
3 4 s 
4
EOF

如果出现错误提示file = ascii.syms, line = 1Bad non-negative integer "0,可能的原因是ascii.syms文件和wotw.syms文件的格式是dos格式的。需要执行
set ff=unix

Mars.fst是二进制文件,是不可以直接阅读的。一般可以通过工具转成图像来看。

fstdraw --isymbols=ascii.syms --osymbols=wotw.syms -portrait Mars.fst | dot -Tjpg >Mars.jpg

官网上的dot可以直接转jpg,但是我的版本不是最新的,只能转ps格式。如果你也不能转jpg格式的,可以换成ps格式的试一下。

转成的fst图片如下,
Execise1

再来两个例子

“Martian”和“Man”按照上面的方法构建fst文件

Martian.fst

fstcompile --isymbols=ascii.syms --osymbols=wotw.syms >Martian.fst <<EOF
0 1 M Martian
1 2 a 
2 3 r 
3 4 t 
4 5 i 
5 6 a 
6 7 n 
7
EOF

Man.fst

fstcompile --isymbols=ascii.syms --osymbols=wotw.syms >Man.fst <<EOF
0 1 M Man
1 2 a 
2 3 n 
3
EOF

合并这三个fst,并生成lexicon.fst

fstunion man.fst Mars.fst | fstunion - Martian.fst | fstclosure >lexicon.fst

fstdraw --isymbols=ascii.syms --osymbols=wotw.syms -portrait lexicon.fst | dot -Tps >lexicon.ps

生成的图像如下,
【openfst样例1】Tokenization_第1张图片
去除epsilon的Arc

fstrmepsilon lexicon.fst | fstdeterminize | fstminimize >lexicon_opt.fst

fstdraw --isymbols=ascii.syms --osymbols=wotw.syms -portrait lexicon_opt.fst | dot -Tps >lexicon_opt.ps

生成等效的,确定的和最小的状态转换图
【openfst样例1】Tokenization_第2张图片

你可能感兴趣的:(Kaldi,openfst)