einen Sprachassistenten programmeren?
Hallo. Wie kann ich bei der Programmiersprache C# und C++ dafür sorgen, dass wenn ich bei einem laufendem Programm zum Beispiel "Hallo" schreibe, nicht immer "hallo" zurückkommt, sondern manchmal "Hallo", "Guten Tag", "Moin", usw. Weil ich würde gerne einen Sprachassistenten für mich programmieren und wenn ich z.B. sage "Hallo" soll er nicht immer hallo zurücksagen. Außerdem würde ich mich über Tipps, Vorschläge, Ideen und Ratschläge freuen. Ich glaube mit C++ kann man sogar gar keinen Sprachassistenten programmieren. Aber mit C# ganz sicher. Ich habe auch schon auf You Tube geguckt und alles genauso nachprogrammiert, aber es hat nicht geklappt. Der Sprachassistent hat zwar geredet und es wurde auch angezeigt, dass das Programm auf mein Mikro zugreift, aber die programmierten Komandos haben nicht funktioniert. Es liegt auch nicht am Mikro, da ich auch Videokonferenzen über meinem Leptop führen kann. Wie gesagt, wenn jemand Ideen hat, wie ich es schaffen kann, einen Sprachassistenten zu programmieren oder wie ich ein Programm etwas zufälliger gestalten kann (also dass z.B. nicht immer "Hallo" zurückkommt, sondern auch mal etwas anderes) , dann würde ich mich sehr freuen.
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).
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)