Сплит гипотеза на отдельные ключевые фразы
Я использую 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());
}