Я использую грамматику формата jsgf с pocketsphinx. Я хочу иметь возможность сопоставлять / распознавать только конечное число возможных входных предложений (то есть интерфейс типа команд и элементов управления).
Тем не менее, из-за характера этих «действительных» предложений, фрагмент предложения (под-предложение) с тремя или более словами также является допустимым вводом.
Например, если допустимые предложения:
- Это правильное предложение
- Так вот этот
тогда грамматика должна содержать:
- Это
- Это действительный
- Это верное предложение
- является действительным
- является верным предложением
- правильное предложение
- Так и это
- Так вот этот
- это
[Очевидно, в этом примере эта грамматика кажется несколько странной, но она имеет смысл в используемом языке / контексте.]
Есть ли способ, которым это можно сделать автоматически с использованием синтаксиса грамматики jsgf или любого инструмента Pocketsphinx / CMU Sphinx. Конечно, я мог бы программно сгенерировать файл грамматики, задав набор допустимых полных предложений, но это кажется немного затянутым и делает файл грамматики длинным и трудным для непосредственного редактирования (или даже просто для определения того, какие допустимые полные предложения).
Лучшее, что я могу придумать, просто используя правила формата jsgf (о котором я знаю), это следующее. (Для примера выше:)
<a> = this is a;
<valid> = (<a> | is a) valid;
<sentence> = (<valid> | a valid) sentence;
<this> = so is this;
<one> = (<this> | is this) one;
(Например, правило соответствует любому подпункту длиной три или более, который заканчивается словом «действительный».)
Эта грамматика содержит в точности правильные строки, перечисленные выше. Тем не менее, эта грамматика все еще должна быть сгенерирована программно из набора допустимых полных предложений, поэтому я также могу явно перечислить все под предложения. Этот формат, однако, немного упрощает непосредственное просмотр из файла jsgf действительных полных предложений.
По сути, мой вопрос таков: есть ли лучший способ достичь вышеуказанной грамматики с помощью pocketsphinx?