<p>一种方法是创建执行转换的机器。
一个非常简单的例子是将字符串大写。在</p>
<p>M.wfst公司</p>
<pre><code>0 0 a A
0 0 b B
0 0 c C
0
</code></pre>
<p>附带的符号文件包含一行,用于字母表中的每个符号。注0是为空(epsilon)转换保留的,在许多操作中有特殊的含义。在</p>
<p>M.syms公司</p>
^{pr2}$
<p>然后编译机器</p>
<pre><code>fstcompile isymbols=M.syms osymbols=M.syms M.wfst > M.ofst
</code></pre>
<p>对于输入字符串“abc”,创建一个线性链自动机,这是一个从左到右的链,每个字符都有一个弧。这是一个接受方,所以我们只需要
输入符号。在</p>
<p>I.wfst公司</p>
<pre><code>0 1 a
1 2 b
2 3 c
3
</code></pre>
<p>编译为接受程序</p>
<pre><code>fstcompile isymbols=M.syms acceptor I.wfst > I.ofst
</code></pre>
<p>然后组装机器并打印</p>
<pre><code>fstcompose I.ofst M.ofst | fstprint isymbols=M.syms osymbols=M.syms
</code></pre>
<p>这将产生输出</p>
<pre><code>0 1 a A
1 2 b B
2 3 c C
3
</code></pre>
<p>fstcompose的输出是输入字符串的所有传输的格。(在这种情况下只有一个)。如果M.ofst更复杂,FSTSLUTestTPATH可以使用标志唯一n-最短=n来提取n个字符串。这个输出又是一个转换器,您可以丢弃FSTPress输出,或者使用C++代码和OpenFST库来运行深度优先搜索来提取字符串。在</p>
<p>插入fstproject_output将把输出转换为只包含输出标签的接受程序。在</p>
<pre><code>fstcompose I.ofst M.ofst | fstproject project_output | fstprint isymbols=M.syms osymbols=M.syms
</code></pre>
<p>给出了以下内容</p>
<pre><code>0 1 A A
1 2 B B
2 3 C C
3
</code></pre>
<p>这是一个acceptor,因为输入和输出标签是相同的,acceptor选项可以用来生成更简洁的输出。在</p>
<pre><code> fstcompose I.ofst M.ofst | fstproject project_output | fstprint isymbols=M.syms acceptor
</code></pre>