gpt4 book ai didi

python - 您甚至如何提供(openFST 制作的)FST 输入?输出到哪里去?

转载 作者:IT老高 更新时间:2023-10-28 21:02:05 34 4
gpt4 key购买 nike

在开始之前,请注意我使用的是 linux shell(通过 Python 中的 using subprocess.call()),并且我使用的是 openFST。

我一直在筛选有关 openFST 的文档和问题,但我似乎无法找到这个问题的答案:实际上如何为 openFST 定义、编译和组合的 FST 提供输入?输出到哪里去?我只是执行'fstproject'吗?如果是这样,我将如何给它一个字符串来转换,并在达到最终状态时打印各种转换?

如果这个问题看起来很明显,我深表歉意。我对openFST还不是很熟悉。

最佳答案

一种方法是创建执行转换的机器。一个非常简单的例子是将字符串大写。

M.wfst

0 0 a A
0 0 b B
0 0 c C
0

随附的符号文件包含字母表中每个符号的一行。注意 0 保留用于 null (epsilon) 转换,在许多操作中具有特殊含义。

M.syms

<epsilon> 0
a 1
b 2
c 3
A 4
B 5
C 6

然后编译机器

fstcompile --isymbols=M.syms --osymbols=M.syms M.wfst > M.ofst

对于输入字符串“abc”,创建一个线性链自动机,这是一个从左到右的链,每个字符都有一条弧线。这是一个接受器,所以我们只需要一个列输入符号。

I.wfst

0 1 a
1 2 b
2 3 c
3

作为接受者编译

fstcompile --isymbols=M.syms --acceptor I.wfst > I.ofst

然后组装机器并打印

fstcompose I.ofst M.ofst | fstprint --isymbols=M.syms --osymbols=M.syms 

这将给出输出

0   1   a   A
1 2 b B
2 3 c C
3

fstcompose 的输出是输入字符串的所有转换的格。 (在这种情况下只有一个)。如果 M.ofst 更复杂,则 fstshortestpath 可用于使用标志 --unique -nshortest=n 提取 n 字符串。这个输出又是一个转换器,你可以废弃 fstprint 的输出,或者使用 C++ 代码和 OpenFst 库运行深度优先搜索来提取字符串。

插入 fstproject --project_output 会将输出转换为仅包含输出标签的接受器。

fstcompose I.ofst M.ofst | fstproject --project_output |  fstprint --isymbols=M.syms --osymbols=M.syms 

提供以下内容

0  1  A  A
1 2 B B
2 3 C C
3

这是一个接受器,因为输入和输出标签是相同的,--acceptor 选项可以用来生成更简洁的输出。

 fstcompose I.ofst M.ofst | fstproject --project_output |  fstprint --isymbols=M.syms --acceptor

关于python - 您甚至如何提供(openFST 制作的)FST 输入?输出到哪里去?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9390536/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com