<p>保罗·狄克逊的例子很好。由于OP使用Python,我想我应该添加一个关于如何使用<a href="http://www.openfst.org/twiki/bin/view/FST/PythonExtension" rel="nofollow noreferrer">Open FST's Python wrapper</a>来“运行”传感器的快速示例。遗憾的是,你不能用开放式FST创建“线性链自动机”,但它很容易实现自动化,如下所示:</p>
<pre><code>def linear_fst(elements, automata_op, keep_isymbols=True, **kwargs):
"""Produce a linear automata."""
compiler = fst.Compiler(isymbols=automata_op.input_symbols().copy(),
acceptor=keep_isymbols,
keep_isymbols=keep_isymbols,
**kwargs)
for i, el in enumerate(elements):
print >> compiler, "{} {} {}".format(i, i+1, el)
print >> compiler, str(i+1)
return compiler.compile()
def apply_fst(elements, automata_op, is_project=True, **kwargs):
"""Compose a linear automata generated from `elements` with `automata_op`.
Args:
elements (list): ordered list of edge symbols for a linear automata.
automata_op (Fst): automata that will be applied.
is_project (bool, optional): whether to keep only the output labels.
kwargs:
Additional arguments to the compiler of the linear automata .
"""
linear_automata = linear_fst(elements, automata_op, **kwargs)
out = fst.compose(linear_automata, automata_op)
if is_project:
out.project(project_output=True)
return out
</code></pre>
<p>让我们定义一个大写字母“a”的简单传感器:</p>
^{pr2}$
<p><a href="https://i.stack.imgur.com/wOBcO.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wOBcO.png" alt="enter image description here"/></a></p>
<p>现在我们可以简单地使用传感器:</p>
<pre><code>apply_fst(list("abab"), caps_A)
</code></pre>
<p>输出:
<a href="https://i.stack.imgur.com/ahgHF.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ahgHF.png" alt="enter image description here"/></a></p>
<p>要了解如何使用它作为接受者,请看我的<a href="https://stackoverflow.com/a/54067509/6232494">other answer</a></p>