einen Sprachassistenten programmeren?

2 Antworten

Wie kann ich (...) dafür sorgen, dass (...) nicht immer "hallo" zurückkommt, (...)

Du brauchst zunächst eine Datenstruktur, die solche ähnlichen Wörter miteinander verbindet, sodass dem Programm überhaupt ein Vokabular zur Verfügung steht, auf welches es sicher zugreifen kann.

Vielleicht reicht dir schon eine einfache Map (in C#: Dictionary), die dann aber wirklich nur auf hallo eine Varianz zurückgibt.

Ein kurzes Beispiel mit C#:

var synonymsForWord = new Dictionary<string, List<string>>
{
  { "hallo", new List<string> { "Guten Tag", "Moin", "Moin moin", /* ... */ } }
  // ...
};    

Besser wäre wohl etwas wie ein Graph, der es auch andersherum schafft (auf "Moin" z.B. mit "Hallo" zu antworten). Dazu müsstest du jedenfalls eine größere Datenstruktur durchsuchen.

Generell geht es aber erst einmal nur darum, alle vorhandenen Synonyme zu finden. Ausgehend vom obigen Snippet suchst du nach dem gegebenen Wort hallo, holst dir die Liste an Synonymen und nun könntest du dir einfach einen zufälligen Index berechnen lassen.

Random random = new Random(); 

if (synonymsForWord.TryGetValue("hallo", out var synonyms))
{
  var randomIndex = random.Next(0, synonyms.Count);
  var randomGreeting = synonyms[randomIndex];
}

Das Random-Objekt sollte als Feld angelegt werden, welches einmal initial erstellt wird.

Wenn du vermeiden möchtest, dass das Programm zweimal das gleiche Ergebnis zurückgibt (das kann ja durchaus noch vorkommen), dann merke dir das zuvor generierte Ergebnis und würfel so lange, bis du ein neues bekommst. Es gibt noch andere Lösungsansätze dazu, aber dazu kannst du dich selbst einmal vertiefen.

Ich glaube mit C++ kann man sogar gar keinen Sprachassistenten programmieren.

Doch, kann man.

Es gibt auch Tools, die dabei unterstützen. Bspw. das Speech SDK von Microsoft (ebenso für C# verfügbar) oder VOCE (nur zur Spracherkennung).


yypsiloolo 
Beitragsersteller
 31.05.2020, 19:31

Vielen Dank für diese ausführliche Antwort : )

Um Nicht nur hallo zurückzubekommen, erstelle ein Array Mit Begrüßungen und lasse, nach dem das Programm ein Hallo erkennt, einen zufälligen Wert aus der Liste zurückzugeben. Ich programmiere zwar kein C++/C#, aber du brauchst Header dateien mit Spracherkennung und Mikrofon Zugriff, sowohl als auch text2speech. Für sowelche Art von Programmen empfehle ich dir Python, mit ihm ist alles einfacher. Python Module für Sprachassistenten:1. gTTS oder pyttsx3 2. SpeechRecognition 3. fuzzywuzzy(um zu erkennen, das zb Hi und hey dasselbe bedeutet)

Woher ich das weiß:Hobby

yypsiloolo 
Beitragsersteller
 31.05.2020, 19:32

Ich glaube ich werde aber nicht mit Phython arbeiten