Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Codename ZARA: Sprachassistent (https://www.delphipraxis.net/167024-codename-zara-sprachassistent.html)

InitializationError 9. Mär 2012 18:08

Codename ZARA: Sprachassistent
 
Guten Tag liebe Progger :)

Also ich habe für ein Schulprojekt einen Sprachassistenten geschrieben.
Der funktioniert auch soweit ganz okay, aber der Erkennungsalgorithmus ist nicht 100% sicher.

Ich wollte einfach mal fragen ob hier im Forum jemand lust hätte gemeinsam mit mir einen kleveren Algorithmus auszudenken.

Ich beschreibe mal was ich bisher gemacht habe.

Mein Programm besitzt zwei WISSENSBASEN. Die eine beinhaltet Strings der möglichen Fragestellung (z.B. wer bist du kannst du mir sagen wie heißt). <-- JA genau so, ich erkläre gleich warum.
Und die zweite Wissensbasis beinhaltet die möglichen Antworten die das Programm zurückliefert.

So nun wird ein String eingegeben und ausgewertet. Das Problem hier ist, die UNNÖTIGEN LEERZEICHEN. Diese werden am Anfang/Ende und zwischen den Wörtern gesucht und gelöscht, sodass maximal nur ein Leerzeichen übrig bleibt (zwischen den Wörtern). Als nächstes wird diese Stringkette in einzelne Strings zerteilt (einzelne Wörter) und in je ein Array zwischengespeichert.

Nun greift sich das Programm alle einzelne Wörter und geht die erste Wissensbasis durch. (Anmerkung: Beide Wissensbasen befinden sich in einer einzelnen Listbox.) Es wird dann eine TREFFERQUOTE berechnet. Damit wird die Zeile in der Listbox mit der höchsten Trefferquote ermittelt. Je nach dem in welcher Zeile die höchste Trefferquote war, greift sich das Programm aus der zweiten Wissensbasis den String in der gleichen Zeile und liefert eine Antwort.

Dieser Algorithmus ist wie gesagt nicht 100%ig sicher, da in den Zeilen der ersten Wissensbasis sich einige Wörter wiederholen und bei einer falschen oder unerwarteten Fragestellung liefert das Programm vielleicht eine falsche Antwort.

LANGE REDE, KURZER SINN. Ich würde mich über eure Meinung bzw. Ideen freuen :)

Das ganze ist eine Art SIRI nur für Windows ;)

Hier das ganze noch einmal etwas anders:

Eingabe ("_" sollen Leerzeichen darstellen):

"___Wer_____bist_du" --Korrektur zu--> "Wer_bist_du"

Aufteilung in Arrays (alle Zeichen klein geschrieben):

1.wer
2.bist
3.du

Vergleich mit der ersten Wissensbasis (zwei Bsp. Zeilen):

1.wer bist du kannst mir sagen wie heißt
2.wer ist dein erfinder programmierer schöpfer

Ermittlung der Trefferquote:

Für Zeile 1. ---> 3
Für Zeile 2. ---> 1

Auslesen des Strings aus der 2. Wissensbasis, aus der gleichen Zeile wo in 1. Wissensbasis die höchste Trefferquote war:

1.Mein Name ist Zara.
2.Mein Erfinder ist Initialization Error!

Ausgabe:

Mein Name ist Zara.

InitializationError 9. Mär 2012 18:48

AW: Codename ZARA: Sprachassistent
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist nochmal die Zara im Anhang!!

Und das sind die möglichen Anfragen (diese lassen sich sehr schnell erweitern):

1. Wer bist du?
2. Wer hat dich erschaffen?
3. Wie geht es dir Heute?
4. Liebst du mich? ⁄ Willst du mich heiraten?
5. Was kannst du so?
6. Hallo (Hi ect.)
7. Du bist dumm Zara
8. Was bedeutet Zara?
9. Ich bin dein Erfinder.
10. Weißt du wer ich bin?
11. Aus was bestehst du?
12. Du nervst.
13. Sage mir die lokale IP-Adresse.

WICHTIG: Bei der Eingabe keine Sonderzeichen wie (?!. ect) verwenden!

Wer bist du? <--- FALSCH
Wer bist du <--- RICHTIG


PS: Die Eingabe muss nicht genau so sein! Es ist so programmiert, dass man die Fragestellung bisschen variieren kann!

Gustav.R 9. Mär 2012 19:22

AW: Codename ZARA: Sprachassistent
 
Kennst Du Eliza?

http://home.ph-freiburg.de/deisslerf...at_I-02-03.htm

Grüß' sie von mir :wink:

GG

InitializationError 9. Mär 2012 19:35

AW: Codename ZARA: Sprachassistent
 
Zitat:

Zitat von Gustav.R (Beitrag 1155700)
Kennst Du Eliza?

http://home.ph-freiburg.de/deisslerf...at_I-02-03.htm

Grüß' sie von mir :wink:

GG

Sry sagt mir nichts und die EXE(n) lassen sich bei mir nicht starten hab ein 64Bit System!

Was genau wolltest du mir damit sagen/zeigen?!

Gustav.R 9. Mär 2012 20:05

AW: Codename ZARA: Sprachassistent
 
Eliza ist vermutlich die Urgroßmutter von ZARA, auf der verlinkten Seite ist eine ZIP-Datei mit Pascal-Quelltext, nicht gesehen?

http://de.wikipedia.org/wiki/ELIZA

GG

InitializationError 9. Mär 2012 20:45

AW: Codename ZARA: Sprachassistent
 
Der Quelltext scheint ziemlich komplex zu sein, ich sehe da leider nicht durch :(
Aber ich bräuchte jetzt nicht einen fertigen Quelltext sondern einfach in Textform wie das Programm ablaufen sollte um den Erkennungsalgorithmus zu verbessern. :)

Selber programmieren macht mehr spaß. Habe leider keine andere Idee für einen Erkennungsalgorithmus.
Man könnte auch mit Zuständen arbeiten, aber das würde Extrem aufwendig werden. Und man könnte die Wissensbasis nicht mehr leicht erweitern :-/

newmusicslamer 9. Mär 2012 20:55

AW: Codename ZARA: Sprachassistent
 
Ich arbeite gerade an einem gleichen Programm.
Du kriegst die reine Antwortprogrammierung über ein Editfeld gut hin (also der Benutzer schreibt frage rein antwort über label)

Der Code sieht so aus:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ContainsText2('wie', Edit1.Text) and ContainsText2('geht', Edit1.Text) and
    ContainsText2('dir', Edit1.Text) then label1.Caption := 'Ganz Gut so weit und dir?' ;
end;
Das waäre ein Bsp. für die Frage wie es dem Programm gehe, dabei erkennt er die Wörter 'wie', 'geht', und 'dir' im editfeld (egal ob du was dazwischen schreibst) und änder die Caption des Labels!

Ich hoffe ich konnte dir helfen!

Gustav.R 9. Mär 2012 21:26

AW: Codename ZARA: Sprachassistent
 
Um die Eingabe etwas besser aufzubereiten: StringReplace und Trim.

#32#32 durch #32 ersetzen (doppelte Leerzeichen weg)
Satzzeichen (.!?,#9) usw. durch '' (nix) ersetzen

Mit Trim führende/abschließende Leerzeichen weg.

Dann funktioniert auch die Frage " Wer bist, Du?"

Ein Parser, der dt. Sätze richtig zerpfückt und dann auch noch halbwegs versteht, dürfte sich auch als Doktorarbeit sehr gut machen.

Toi, toi, toi! :thumb:

GG

InitializationError 9. Mär 2012 21:50

AW: Codename ZARA: Sprachassistent
 
@newmusicslamer:
Deine Variante ist verständlich, müsste man aber für jede neue Frage immer wieder aufschreiben. Sonst gut.

Ich möchte einen Algorithmus so entwickeln das man die Wissensbasis schnell erweitern kann.

@Gustav.R:
Daran habe ich auch schon gedacht :) also das man die Sonderzeichen filtert. Kam nur noch nicht dazu das Problem umzusetzen.

Mal eine andere Frage. Hat jemand eine Idee wie man Substantive usw. realisieren könnte.

Also wenn z.B. ich "Wie GEhT es DIr zaRA?" eingebe, dass mir das Programm das korregiert in "Wie geht es dir Zara?"
Also bisschen Schnickschnack :)

Gustav.R 9. Mär 2012 23:31

AW: Codename ZARA: Sprachassistent
 
Korregiert oder korrigiert :oops:

Und ein "Also bisschen Schnickschnack" ist das vermutlich nur Deiner Meinung nach?

Wie soll der Parser denn zuverlässig ein Substantiv erkennen? Geht wohl - ohne eine KI mit extrem hoher Wort-/Syntax-/Semantikliste - nur über korrekte Großschreibung des Anfangsbuchstabens?

Überlege Dir doch mal selbst, woran DU in den beiden Sätzen das Substantiv erkennst:

Grün ist die Heide
Die Heide ist grün

Sind doch nur vier Wörter...

Laß diese beiden Sätze doch mal auf die Rechtschreibprüfung/Grammatikprüfung von LibreOffice oder MSOffice los.
Und dahinter stecken xtausend Stunden Entwicklungszeit...

GG


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz