Jednym ze sposobów jest stworzenie maszyny, która wykonuje transformację. Bardzo prostym przykładem może być na przykład wielka litera.
M.wfst
0 0 a A
0 0 b B
0 0 c C
0
Plik symbole towarzyszący zawiera linię dla dla każdego symboli alfabetu. Uwaga 0 jest zarezerwowana dla przejść zerowych (epsilon) i ma specjalne znaczenie w wielu operacjach.
M.syms
<epsilon> 0
a 1
b 2
c 3
A 4
B 5
C 6
Następnie skompilować maszynę
fstcompile --isymbols=M.syms --osymbols=M.syms M.wfst > M.ofst
Dla ciągu wejściowego „abc” stworzyć automaty łańcuch liniowy, to jest od lewej do prawej łańcuch z łuku dla każdej postaci. To jest akceptor, więc potrzebujemy tylko kolumny dla symboli wejściowych .
I.wfst
0 1 a
1 2 b
2 3 c
3
kompilacji jako akceptora
fstcompile --isymbols=M.syms --acceptor I.wfst > I.ofst
następnie skomponuj maszyn i wydrukować
fstcompose I.ofst M.ofst | fstprint --isymbols=M.syms --osymbols=M.syms
To da wyświetlamy
0 1 a A
1 2 b B
2 3 c C
3
Dane wyjściowe fstcompose są siecią wszystkich transdukcji ciągu wejściowego. (W tym przypadku jest tylko jeden). Jeśli M.ofst jest bardziej skomplikowany, fstshortestpath może być użyty do wyodrębnienia n-strun za pomocą flag --unique -nshortest = n. To wyjście jest ponownie przetwornikiem, możesz albo zepsuć dane wyjściowe fstprint, albo użyć kodu C++ i biblioteki OpenFst, aby uruchomić pierwsze wyszukiwanie w celu wyodrębnienia ciągów.
Wstawienie fstproject --project_output zamieni dane wyjściowe na akceptor zawierający tylko etykiety wyjściowe.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --osymbols=M.syms
daje następujące
0 1 A A
1 2 B B
2 3 C C
3
to akceptora ponieważ etykiety wejściowe i wyjściowe są takie same, te opcje --acceptor mogą być wykorzystywane do generowania wyjścia bardziej zwięzły.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --acceptor
To jest świetna odpowiedź, a przykłady są bardzo przydatne! Dziękuję Ci! –
https://stackoverflow.com/questions/47235658/openfst-fstcompose-for-transducing –