2016-08-24 2 views
0

Ich benutze Sphinx4, um die Ausrichtung mit einem Text zu tun. Ich möchte das Timing für jedes Wort im Satz (Anfang, Ende) und auch das Timing jedes Phonems in den Wörtern erhalten. Dazu habe ich den Code des SpeechAligner geändert. Die von mir bearbeitete Methode ist:Sphinx4 Token Einheiten verschoben

Ich habe gerade eine Liste hinzugefügt, wo ich das Ergebnis in der Ergebnisklasse (nicht WordResult) bekomme.

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)); 
      } 

Dann folgte ich genau dieses Beispiel: Phonemes Timestamp

Für diesen Satz: "der adversaires" Ich erwarte haben: expected result

Aber das Ergebnis verschoben wird 1 Wort der der Anfang nimmt die Schreibweise des Wortes "des", und des nimmt die Schreibweise von "Adversaires" und so weiter (als ob die zweite Stille ignoriert wird). Ich erhalte diese: what i get

das Token anzuzeigen und die Einheiten Ich benutze:

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

Vielen Dank im Voraus,

+0

@NikolayShmyrev Die Änderung von "false" ändert leider nichts (trotzdem logger.info ("Uterance result" + result.getTimedBestResult (true));) ist nur eine Protokollzeile. – user1828433

Antwort

0

Es gibt zwei Arten von Linguisten in sphinx4 - FlatLingust anhängt Einheit Token vor tatsächliche Phonem Detektoren, lextree Linguist hängt sie nach. Es gibt einen Fall, dass in sphinx4 in Ergebnis Klasse zu handhaben:

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

Der Code auf der Wiki-Seite ist für lextree Linguist mit Einheit Token nach Detektor Token zur Verfügung gestellt. Der Aligner verwendet FlatLinguist zuvor mit Unit-Token. Sie müssen also den Beispielcode aus dem Wiki entsprechend umgestalten. Es ist nicht sehr trivial Chagne.