Signatur
Beschreibung
Das Interface SpeechRecognitionPhrase gehört zur Web Speech API. Ein Objekt dieses Typs steht für einen einzelnen Ausdruck, etwa einen Fachbegriff, Produktnamen oder Eigennamen, und für einen Gewichtungsfaktor (boost). Solche Ausdrücke übergibt man über die Eigenschaft SpeechRecognition.phrases an die Spracherkennung. Die Erkennung bevorzugt diese Wörter dann, wenn sie ähnlich klingende Alternativen gegeneinander abwägt. Dieses Verfahren heißt kontextuelle Bevorzugung (engl. contextual biasing).
Das lohnt sich überall dort, wo das allgemeine Sprachmodell schwächelt: bei Namen in einem Adressbuch, Medikamentennamen, Befehlen in einer Sprachsteuerung oder Markennamen. Ein Beispiel: Ohne Bevorzugung versteht die Erkennung „Kubernetes“ oft als „Kuba Netties“. Hinterlegt man den Begriff als Phrase mit höherem boost, sinkt die Fehlerquote deutlich.
Man erzeugt ein Objekt mit new SpeechRecognitionPhrase(phrase, boost). Beide Eigenschaften, phrase und boost, sind danach schreibgeschützt. Um die Liste zu ändern, weist man recognition.phrases ein neues Array zu, und zwar vor dem Aufruf von start().
Bisher unterstützen Browser die kontextuelle Bevorzugung in der Praxis nur bei der Erkennung auf dem Gerät (processLocally = true). Kann die Erkennung keine Phrasen verarbeiten, löst sie ein error-Ereignis mit dem Fehlercode "phrases-not-supported" aus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $phrase Pflicht | string | Das Wort oder die Wortfolge, die bevorzugt erkannt werden soll. Später lesbar über die schreibgeschützte Eigenschaft phrase. |
|
| $boost | number | 1.0 | Gewichtung von 0.0 bis 10.0 (Grenzen eingeschlossen). Je höher der Wert, desto stärker wird der Ausdruck bevorzugt. Liegt der Wert außerhalb dieses Bereichs, wirft der Konstruktor einen Fehler. Später lesbar über die schreibgeschützte Eigenschaft boost. |
Rückgabewert
phrase (string) und boost (number). Man übergibt es in einem Array an SpeechRecognition.phrases.Beispiele
Phrase erzeugen und Eigenschaften lesen
if ('SpeechRecognitionPhrase' in window) {
const phrase = new SpeechRecognitionPhrase('Kubernetes', 5.0);
console.log(phrase.phrase, phrase.boost);
// Ohne zweites Argument gilt boost = 1.0
const standard = new SpeechRecognitionPhrase('Docker');
console.log(standard.boost);
} else {
console.log('Kontextuelle Bevorzugung wird nicht unterstützt');
}
Fachbegriffe an die Spracherkennung auf dem Gerät übergeben
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new Recognition();
recognition.lang = 'de-DE';
recognition.processLocally = true; // Bevorzugung klappt bisher nur auf dem Gerät
const begriffe = [
['Ibuprofen', 4.0],
['Paracetamol', 4.0],
['Dr. Wojciechowski', 8.0]
];
recognition.phrases = begriffe.map(
([text, boost]) => new SpeechRecognitionPhrase(text, boost)
);
recognition.addEventListener('result', (event) => {
console.log('Erkannt:', event.results[0][0].transcript);
});
recognition.addEventListener('error', (event) => {
if (event.error === 'phrases-not-supported') {
console.warn('Phrasen werden hier nicht unterstützt – Start ohne Bevorzugung');
recognition.phrases = [];
}
});
recognition.start();
Ungültigen boost-Wert abfangen
const erstellePhrase = (text, boost) => {
try {
return new SpeechRecognitionPhrase(text, boost);
} catch (err) {
console.error(`Ungültige Phrase "${text}":`, err.name);
return null;
}
};
erstellePhrase('Mehrwertsteuer', 12); // außerhalb von 0.0–10.0
Phrasen je nach Kontext austauschen
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new Recognition();
recognition.processLocally = true;
const kontexte = {
musik: ['Rammstein', 'Die Ärzte', 'Kraftklub'],
navigation: ['Hauptbahnhof', 'Alexanderplatz', 'Ostkreuz']
};
const starteMitKontext = (name) => {
// phrases ist nicht veränderbar im Sinne von push – neues Array zuweisen
recognition.phrases = kontexte[name].map((t) => new SpeechRecognitionPhrase(t, 3));
recognition.start();
};
starteMitKontext('navigation');
console.log(recognition.phrases.map((p) => p.phrase));
// Wichtig · Fallstricke
- Experimentell: Das Interface ist bisher nur in Chromium-basierten Browsern verfügbar, und das erst seit kurzem. Firefox und Safari unterstützen es nicht. Vor der Nutzung sollte man mit
'SpeechRecognitionPhrase' in windowprüfen, ob es vorhanden ist. - Nur auf dem Gerät: Chrome wertet Phrasen bisher nur bei
processLocally = trueaus. Das lokale Sprachpaket muss dafür vorhanden sein oder zuerst installiert werden, sieheSpeechRecognition.available()undSpeechRecognition.install(). Andernfalls gibt es einerror-Ereignis mit"phrases-not-supported". - Wertebereich:
boostmuss zwischen0.0und10.0liegen, sonst wirft der Konstruktor einen Fehler. Sehr hohe Werte können dazu führen, dass die Erkennung die bevorzugten Wörter auch dort „hört“, wo sie gar nicht gesagt wurden. Am besten beginnt man mit moderaten Werten zwischen 1 und 5. - Schreibgeschützt:
phraseundboostlassen sich nach dem Erzeugen nicht ändern. Man legt stattdessen neue Objekte an und weistrecognition.phrasesneu zu, und zwar vorstart(). - Die Spracherkennung setzt einen sicheren Kontext (HTTPS) und die Mikrofonfreigabe durch den Nutzer voraus.