Un modo è quello di creare la macchina che esegue la trasformazione. Un esempio molto semplice sarebbe una stringa in maiuscolo.
M.wfst
0 0 a A
0 0 b B
0 0 c C
0
Il file di simboli di accompagnamento contiene una riga per per ogni simboli dell'alfabeto. Nota 0 è riservata alle transizioni null (epsilon) e ha un significato speciale in molte delle operazioni.
M.syms
<epsilon> 0
a 1
b 2
c 3
A 4
B 5
C 6
Poi compila la macchina
fstcompile --isymbols=M.syms --osymbols=M.syms M.wfst > M.ofst
Per una stringa di input "abc" creare un automa a catena lineare, questa è una catena da sinistra a destra con un arco per ogni personaggio. Si tratta di un accettore, pertanto è necessaria una colonna per i simboli di input .
I.wfst
0 1 a
1 2 b
2 3 c
3
Compilare come accettore
fstcompile --isymbols=M.syms --acceptor I.wfst > I.ofst
Poi compongono le macchine e stampare
fstcompose I.ofst M.ofst | fstprint --isymbols=M.syms --osymbols=M.syms
Questo darà l'uscita
0 1 a A
1 2 b B
2 3 c C
3
L'output di fstcompose è un reticolo di tutte le trasduzioni della stringa di input. (In questo caso ce n'è solo uno). Se M.ofst è più complicato, è possibile utilizzare fstshortestpath per estrarre stringhe di n usando i flag --unique -nshortest = n. Questo output è di nuovo un trasduttore, è possibile eliminare l'output di fstprint oppure utilizzare il codice C++ e la libreria OpenFst per eseguire la prima ricerca di profondità per estrarre le stringhe.
L'inserimento di fstproject --project_output converte l'output in un accettore contenente solo le etichette di uscita.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --osymbols=M.syms
pronunciato la seguente
0 1 A A
1 2 B B
2 3 C C
3
Questo è un accettore perché le etichette di ingresso e uscita sono uguali, le opzioni --acceptor possono essere usate per generare output più succinta.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --acceptor
Questa è un'ottima risposta e gli esempi sono molto utili! Grazie! –
https://stackoverflow.com/questions/47235658/openfst-fstcompose-for-transducing –