Подтвердить что ты не робот

Как вы даже можете дать вход (FST) FST? Где идет выход?

Прежде чем начать, обратите внимание, что я использую оболочку linux (через using subprocess.call() из Python), и я использую openFST.

Я просматривал документы и вопросы о openFST, но я не могу найти ответа на этот вопрос: как он действительно дает вклад в OpenFST-определенный, скомпилированный и составленный FST? Где идет выход? Я просто выполняю 'fstproject'? Если да, то как я, скажем, передаю ему строку для трансдукции и напечатаю различные трансдукции, когда достигнуты конечные состояния?

Прошу прощения, если этот вопрос кажется очевидным. Я еще не очень хорошо знаком с openFST.

4b9b3361

Ответ 1

Один из способов - создать вашу машину, которая выполняет преобразование. Очень простой пример: верхний регистр строки.

M.wfst

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

Файл сопровождающих символов содержит строку для каждого символа алфавита. Примечание 0 зарезервировано для нулевых (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 может использоваться для извлечения n-строк с использованием флагов --unique -nshortest = n. Этот выход снова является преобразователем, вы можете либо отказаться от вывода fstprint, либо использовать код С++ и библиотеку 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