Сплит гипотеза на отдельные ключевые фразы

Я использую Pocketsphinx в моем приложении для Android. У меня относительно небольшой набор команд, которые нужно распознавать независимо, поэтому я использовал поиск по ключевым словам из файла, который выглядит следующим образом:

one/1.0/
done/1.0/
recognition on/1e-10/
recognition off/1e-10/

Фактический список не на английском языке, поэтому эти ключевые слова выбраны произвольно для примера. Я понимаю, что эти пороговые значения могут быть несколько ниже оптимальных, и что короткие слова могут не соответствовать друг другу.

Проблема возникает в этом методе:

@Override
public void onPartialResult(Hypothesis hypothesis) {
    if (hypothesis != null) {
        Log.d(
                "Sphinx",
                "\"" + hypothesis.getHypstr() + "\" recognized"
        );
    }
}

Обратите внимание, что некоторые слова звучат очень похоже. Дело в том,

  • "Один" приводит к "done one" recognized
  • "Готово" приводит к "one done" recognized

К сожалению, я не смог найти никакой документации по hypstr_get (Я был бы признателен, если бы вы могли направить меня к этому), но, по-видимому, фактически он возвращает объединенную строку вероятных совпадений в порядке возрастания вероятности.

Как я могу получить актуальные команды из hypothesis? Я не могу просто разделить hypothesis.getHypstr() пробелами, так как некоторые команды являются ключевыми фразами, а не ключевыми словами. Я хочу только один, наиболее вероятный результат.

Благодарю.

1 ответ

Решение

Вы можете перебирать сегменты, каждый из которых будет ключевым словом

    for (Segment seg : recognizer.getDecoder().seg()) {
        System.out.println(seg.getWord() + " " + seg.getProb());
    }
Другие вопросы по тегам