Start · Sprachen · JavaScript · Referenz · SpeechRecognition.unspokenPunctuation

SpeechRecognition.unspokenPunctuation

Eigenschaft

Boolesche Eigenschaft, die festlegt, ob die Spracherkennung Satzzeichen anhand von Sprechpausen und Betonung selbst ergänzt, auch wenn der Nutzer sie nicht ausspricht.

seit JavaScript Experimentell – kaum Browser-Unterstützung Kategorie: webapi

Signatur

SpeechRecognition.unspokenPunctuation

Beschreibung

Die Eigenschaft unspokenPunctuation der Schnittstelle SpeechRecognition legt fest, ob die Erkennungs-Engine Satzzeichen selbst ableiten soll. Grundlage dafür sind die natürlichen Sprechmuster des Nutzers, also Pausen, Satzmelodie und Betonung. Ist sie auf true gesetzt, kann das Transkript Punkte, Kommas oder Fragezeichen enthalten, obwohl der Nutzer nicht „Punkt“ oder „Komma“ gesagt hat.

Das ist vor allem bei Diktierfunktionen, Notiz-Apps, Chat-Eingaben und Untertiteln nützlich. Ohne automatische Zeichensetzung liefert die Erkennung oft einen langen, ungegliederten Textblock, den man mühsam nachbearbeiten muss. Für Sprachbefehle („Licht an“, „nächste Seite“) ist die Option dagegen eher hinderlich: Ein angehängter Punkt oder ein Großbuchstabe am Satzanfang kann einen exakten Textvergleich scheitern lassen.

Setze die Eigenschaft vor dem Aufruf von start(). Wird sie während einer laufenden Sitzung geändert, ist nicht garantiert, dass die Änderung wirkt. Wie gut die Zeichensetzung ausfällt, hängt stark von der Engine, der eingestellten Sprache (lang) und davon ab, ob lokal oder auf einem Server erkannt wird.

Parameter

Name Typ Default Beschreibung
$value boolean false (vermutlich; von der Implementierung abhängig) Beim Setzen: true schaltet die automatische Zeichensetzung ein, false schaltet sie aus. Andere Werte werden in einen booleschen Wert umgewandelt.

Beispiele

Diktierfunktion mit automatischer Zeichensetzung

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;

if (!SR) {
  console.warn('Web Speech API wird nicht unterstützt.');
} else {
  const recognition = new SR();
  recognition.lang = 'de-DE';
  recognition.continuous = true;
  recognition.interimResults = false;

  // Nur setzen, wenn der Browser die Eigenschaft kennt
  if ('unspokenPunctuation' in recognition) {
    recognition.unspokenPunctuation = true;
  }

  recognition.addEventListener('result', (event) => {
    const last = event.results[event.results.length - 1];
    console.log('Diktat:', last[0].transcript);
  });

  recognition.start();
}
Diktat: Hallo Anna, wie geht es dir? Wir sehen uns morgen.

Für Sprachbefehle abschalten und Text normalisieren

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';

if ('unspokenPunctuation' in recognition) {
  recognition.unspokenPunctuation = false;
}

// Zur Sicherheit trotzdem normalisieren
const normalize = (text) =>
  text.toLowerCase().replace(/[.,!?;:]/g, '').trim();

const commands = {
  'licht an': () => console.log('Licht wird eingeschaltet'),
  'licht aus': () => console.log('Licht wird ausgeschaltet')
};

recognition.onresult = (event) => {
  const spoken = normalize(event.results[0][0].transcript);
  (commands[spoken] ?? (() => console.log('Unbekannt:', spoken)))();
};

recognition.start();
Licht wird eingeschaltet

Unterstützung prüfen und aktuellen Wert auslesen

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;

const supportsUnspokenPunctuation = () => {
  if (!SR) return false;
  return 'unspokenPunctuation' in SR.prototype;
};

console.log('Unterstützt:', supportsUnspokenPunctuation());

if (supportsUnspokenPunctuation()) {
  const rec = new SR();
  console.log('Standardwert:', rec.unspokenPunctuation);
}
Unterstützt: false

// Wichtig · Fallstricke

  • Experimentell: Die Eigenschaft ist eine neue Erweiterung der Web Speech API und wird bisher kaum unterstützt. Prüfe die Unterstützung immer mit 'unspokenPunctuation' in recognition. Browser, die sie nicht kennen, legen beim Zuweisen stillschweigend eine normale JavaScript-Eigenschaft an, die keine Wirkung hat.
  • Präfix: Chromium-basierte Browser und Safari stellen den Konstruktor teils nur als webkitSpeechRecognition bereit. Firefox unterstützt SpeechRecognition standardmäßig nicht.
  • Keine Garantie: Auch bei true kann die Engine Satzzeichen weglassen oder falsch setzen, besonders bei Zwischenergebnissen (interimResults) und seltenen Sprachen. Umgekehrt können manche Engines auch bei false Satzzeichen oder Großschreibung liefern. Transkripte für Befehle solltest du deshalb immer normalisieren.
  • Zeitpunkt: Setze den Wert vor start(). Änderungen während einer laufenden Sitzung werden eventuell erst beim nächsten Start übernommen.
  • Datenschutz: Je nach Browser wird Audio zur Erkennung an einen Server übertragen. Die Spracherkennung erfordert eine sichere Umgebung (HTTPS) und die Freigabe des Mikrofons.