Una forma es crear su máquina que realiza la transformación. Un ejemplo muy simple sería una cadena en mayúscula.
0 0 a A
0 0 b B
0 0 c C
0
El archivo de símbolos de acompañamiento M.wfst Contiene una línea para cada uno de los símbolos del alfabeto. La nota 0 está reservada para transiciones nulas (épsilon) y tiene un significado especial en muchas de las operaciones.
M.syms
<epsilon> 0
a 1
b 2
c 3
A 4
B 5
C 6
a continuación, compilar la máquina
fstcompile --isymbols=M.syms --osymbols=M.syms M.wfst > M.ofst
Para una cadena de entrada "abc" crear una autómatas cadena lineal, esto es una cadena de izquierda a derecha con un arco para cada personaje Este es un aceptador, por lo que solo necesitamos una columna para los símbolos de entrada .
I.wfst
0 1 a
1 2 b
2 3 c
3
los datos como un aceptor
fstcompile --isymbols=M.syms --acceptor I.wfst > I.ofst
continuación prepare las máquinas de impresión y
fstcompose I.ofst M.ofst | fstprint --isymbols=M.syms --osymbols=M.syms
Esto le dará a la salida
0 1 a A
1 2 b B
2 3 c C
3
La salida de fstcompose es un enrejado de todas las transducciones de la cadena de entrada. (En este caso solo hay uno). Si M.ofst es más complicado, se puede usar fstsestpath para extraer n-strings usando las marcas --unique -nshortest = n. Esta salida es de nuevo un transductor, puede eliminar la salida de fstprint o utilizar el código C++ y la biblioteca OpenFst para ejecutar la primera búsqueda de profundidad para extraer las cadenas.
Insertar fstproject --project_output convertirá la salida en un aceptador que solo contenga las etiquetas de salida.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --osymbols=M.syms
dicta la siguiente
0 1 A A
1 2 B B
2 3 C C
3
Este es un aceptor porque las etiquetas de entrada y salida son los mismos, las opciones --acceptor se pueden utilizar para generar una salida más sucinta.
fstcompose I.ofst M.ofst | fstproject --project_output | fstprint --isymbols=M.syms --acceptor
¡Esta es una gran respuesta y los ejemplos son muy útiles! ¡Gracias! –
https://stackoverflow.com/questions/47235658/openfst-fstcompose-for-transducing –