Signatur
Beschreibung
Mit der Eigenschaft phrases eines SpeechRecognition-Objekts gibst du der Spracherkennung eine Liste von Begriffen vor, die in deinem Anwendungskontext wahrscheinlich vorkommen. Das nennt man kontextbezogenes Biasing. Jeder Eintrag ist ein SpeechRecognitionPhrase-Objekt. Es besteht aus einem Text (phrase) und einem Gewichtungsfaktor (boost). Je höher der boost-Wert, desto eher erkennt die Engine genau diese Phrase und nicht ein ähnlich klingendes Wort.
Das hilft vor allem bei Fachbegriffen, Produktnamen, Eigennamen oder Abkürzungen, die ein allgemeines Sprachmodell selten oder falsch erkennt. Beispiele sind Medikamentennamen in einer Medizin-App, Artikelbezeichnungen in einem Shop oder Befehle in einer Sprachsteuerung. Die Phrasen legst du fest, bevor du start() aufrufst. Änderungen während einer laufenden Sitzung wirken erst ab der nächsten Sitzung.
Laut Spezifikation funktioniert Biasing derzeit vor allem mit der Erkennung auf dem Gerät (processLocally = true). Unterstützt der Erkennungsdienst kein Biasing und ist phrases nicht leer, löst ein Aufruf von start() ein error-Ereignis mit dem Fehlercode "phrases-not-supported" aus. Standardmäßig ist das Array leer, es findet also kein Biasing statt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | Array<SpeechRecognitionPhrase> | [] (leeres Array) | Beim Setzen: ein Array von SpeechRecognitionPhrase-Objekten, erzeugt mit new SpeechRecognitionPhrase(phrase, boost). boost ist optional, Standardwert 1.0, laut Spezifikation erlaubt von 0.0 bis 10.0. |
Rückgabewert
Beispiele
Fachbegriffe für eine Medizin-App vorgeben
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.processLocally = true; // Biasing braucht meist Erkennung auf dem Gerät
recognition.phrases = [
new SpeechRecognitionPhrase('Ibuprofen', 5.0),
new SpeechRecognitionPhrase('Metformin', 5.0),
new SpeechRecognitionPhrase('Blutdruckmessung') // boost = 1.0
];
console.log(recognition.phrases.map(p => `${p.phrase} (${p.boost})`));
recognition.addEventListener('result', (event) => {
console.log('Erkannt:', event.results[0][0].transcript);
});
recognition.start();
Verfügbarkeit prüfen und Modell installieren
const setupRecognition = async () => {
const options = { langs: ['de-DE'], processLocally: true };
const status = await SpeechRecognition.available(options);
if (status === 'unavailable') {
console.warn('Erkennung auf dem Gerät nicht verfügbar – kein Biasing möglich.');
return null;
}
if (status !== 'available') {
// 'downloadable' oder 'downloading'
await SpeechRecognition.install(options);
}
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.processLocally = true;
recognition.phrases = [
new SpeechRecognitionPhrase('Warenkorb', 3.0),
new SpeechRecognitionPhrase('Zur Kasse', 3.0)
];
return recognition;
};
const recognition = await setupRecognition();
recognition?.start();
Fehler „phrases-not-supported“ abfangen und ohne Biasing weitermachen
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.phrases = [new SpeechRecognitionPhrase('programmierung.net', 8.0)];
recognition.addEventListener('error', (event) => {
if (event.error === 'phrases-not-supported') {
console.warn('Biasing nicht unterstützt – neuer Versuch ohne Phrasen.');
recognition.phrases = [];
recognition.start();
}
});
recognition.start();
// Wichtig · Fallstricke
- Experimentell:
phrasesundSpeechRecognitionPhrasegibt es bisher nur in neueren Chromium-Browsern. Firefox und Safari unterstützen sie nicht. Prüfe die Unterstützung vorher, z. B. mit'phrases' in SpeechRecognition.prototypeundtypeof SpeechRecognitionPhrase !== 'undefined'. - Präfix: Ältere Chromium-Versionen kennen nur
webkitSpeechRecognition. Dort fehltphraseshäufig ganz. - Gerät vs. Server: Biasing ist meist an
processLocally = truegebunden. Wird es nicht unterstützt, meldetstart()das Fehler-Ereignis"phrases-not-supported". - Wertebereich:
boost-Werte außerhalb von 0.0–10.0 bzw. ein leerer Phrasentext lösen laut Spezifikation beim Erzeugen desSpeechRecognitionPhrase-Objekts einen Fehler aus. - Nicht übertreiben: Viele Phrasen mit sehr hohem
boostverschlechtern die Erkennung normaler Sprache, weil die Engine dann ähnlich klingende Wörter fälschlich als Phrase erkennt. Nimm moderate Werte und nur wirklich relevante Begriffe. - Zeitpunkt: Setze die Phrasen vor
start(). Änderungen während einer laufenden Sitzung wirken nicht sofort.