2016-08-24 2 views
0

Я использую Sphinx4 для выравнивания текста. Я хочу получить время для каждого слова в предложении (начало, конец), а также время каждой фонемы в словах. Для этого я изменил код SpeechAligner. Метод, который я отредактировал это:Сменные блоки маркеров Sphinx4 смещены

public List<WordResult> align(URL audioUrl, List<String> sentenceTranscript) throws IOException {...} 

Я просто добавил список, где я получаю результат в классе результат (не WordResult).

List<WordResult> hypothesis = new ArrayList<WordResult>(); 
      Result result; 
      while (null != (result = recognizer.recognize())) { 

       alignResult.add(result);// I am filling the results here 

       logger.info("Utterance result " + result.getTimedBestResult(true)); 
       hypothesis.addAll(result.getTimedBestResult(false)); 
      } 

Тогда я следовал именно этот пример: Phonemes Timestamp

Для этого предложения: "дез adversaires" Я ожидаю иметь: expected result

Но результат сдвигается 1 слово в начиная с написания слова «des», а des берет написание «противников» и т. д. (как будто второе молчание игнорируется). Я получаю это: what i get

, чтобы отобразить маркер и блоки я использую:

System.out.println("token : " + token.getWordPath() + " - unit : " + unit.toString()); 

Спасибо заранее,

+0

@NikolayShmyrev К сожалению, изменение true на false ничего не меняет (в любом случае logger.info («Результат результата» + result.getTimedBestResult (true));) - это всего лишь строка журнала. – user1828433

ответ

0

Есть два типа лингвистов в sphinx4 - FlatLingust добавляет единицу токенов фактические детекторы фонем, lextree лингвист добавляет их после. Существует случай, чтобы справиться с этим в классе Результат в sphinx4:

if (wordTokenFirst) { 
     return getTimedWordPath(token, withFillers); 
    } else { 
     return getTimedWordTokenLastPath(token, withFillers); 
    } 

код на странице вики предоставляется lextree лингвиста с единичными лексем после лексемы детектора. Выравниватель использует FlatLinguist с токенами блока раньше. Таким образом, вам необходимо реорганизовать пример кода из вики. Это не очень тривиальный чан.