Seite 1 von 2
Anfänger versucht Parser zu entwickeln
Verfasst: 01.02.2006 12:08
von Ironsmurf
Hallo zusammen
ich bin Anfänger und versuche einen Parser zu entwickeln, meine Frage zu folgendem Quelltext ist, ob man die Schreibarbeit noch vereinfachen kann,
es geht darum bestimmte Wörter zu ersetzen.
Z.B. aus Dolch wird Messer oder aus Degen wird Messer.
Vielen Dank im voraus für eure Mithilfe - PS:Habe noch die Demo von PureBasic
;String wird in einzelne Woerter geteilt
num = CountString(text$, " ") + 1
Dim Wort$(num) ; num viele elemente (0 bis num-1)
For I = 0 To num-1
Wort$(I) = StringField(text$, I + 1, " ")
;Wort für Wort analysieren und Synonyme vereinheitlichen
If FindString (Wort$(I),"nehm",1) : Wort$(I)="nimm"
ElseIf Wort$(I)="schwert"Or Wort$(I)="messer"Or Wort$(I)="saebel"Or Wort$(I)="degen"Or Wort$(I)="stichwaffe"Or Wort$(I)="dolch" : Wort$(I)="messer"
ElseIf Wort$(I)="gehen"Or Wort$(I)="gehe"Or Wort$(I)="ging"Or Wort$(I)="laufe"Or Wort$(I)="wandern"Or Wort$(I)="schreite"Or Wort$(I)="schleichen" : Wort$(I)="gehen"
ElseIf FindString (Wort$(I),"nord",1)Or FindString (Wort$(I),"sued",1)Or FindString (Wort$(I),"west",1)Or FindString (Wort$(I),"ost",1) : Wort$(I)="Richtung"
ElseIf FindString (Wort$(I),"movie",1)Or FindString (Wort$(I),"streifen",1) : Wort$(I)="film"
ElseIf FindString (Wort$(I),"gucken",1)Or FindString (Wort$(I),"schauen",1): Wort$(I)="sehen"
EndIf
Ausgabe$ = Ausgabe$ + Wort$(I) + " " : Debug (Ausgabe$)
Next
Verfasst: 01.02.2006 12:26
von Konne
Mach mal bidde den Code in CodeTags.
Liege ich mit ReplaceString() richtig?
Verfasst: 01.02.2006 12:35
von Ironsmurf
Was bitte sind CodeTags (Sorry - leider noch blutiger Laie)
Verfasst: 01.02.2006 12:44
von HeX0R
Oder auch den Code-Button benutzen...
Verfasst: 01.02.2006 12:55
von Ironsmurf
Code: Alles auswählen
;String wird in einzelne Woerter geteilt
num = CountString(text$, " ") + 1
Dim Wort$(num) ; num viele elemente (0 bis num-1)
For I = 0 To num-1
Wort$(I) = StringField(text$, I + 1, " ")
;Wort für Wort analysieren und Synonyme vereinheitlichen
If FindString (Wort$(I),"nehm",1) : Wort$(I)="nimm"
ElseIf Wort$(I)="schwert"Or Wort$(I)="messer"Or Wort$(I)="saebel"Or Wort$(I)="degen"Or Wort$(I)="stichwaffe"Or Wort$(I)="dolch" : Wort$(I)="messer"
ElseIf Wort$(I)="gehen"Or Wort$(I)="gehe"Or Wort$(I)="ging"Or Wort$(I)="laufe"Or Wort$(I)="wandern"Or Wort$(I)="schreite"Or Wort$(I)="schleichen" : Wort$(I)="gehen"
ElseIf FindString (Wort$(I),"nord",1)Or FindString (Wort$(I),"sued",1)Or FindString (Wort$(I),"west",1)Or FindString (Wort$(I),"ost",1) : Wort$(I)="Richtung"
ElseIf FindString (Wort$(I),"movie",1)Or FindString (Wort$(I),"streifen",1) : Wort$(I)="film"
ElseIf FindString (Wort$(I),"gucken",1)Or FindString (Wort$(I),"schauen",1): Wort$(I)="sehen"
EndIf
Verfasst: 01.02.2006 13:13
von freedimension
Du hättest natürlich auch einfach deinen Post von weiter oben editieren können

Verfasst: 01.02.2006 13:24
von Ironsmurf
Ich möchte gerne einen Dialog - Bot programmieren zu einem bestimmten Thema (Filme), dazu möchte ich einen Parser entwickeln. Ich poste den ganzen Quelltext, die Wortwahl ist bis jetzt nur zum testen da.
Die Frage lautet, wie ich dieses Programm optimieren kann ?
Vielen Dank im voraus - PS:Hab noch die Demo, Vollversion ist noch nicht eingetroffen.
Code: Alles auswählen
OpenConsole()
;Hallo, sagt das Programm
PrintN( "HALLO" )
PrintN( "BEENDEN KANNST DU DIES PROGRAMM MIT - quit" )
PrintN ( "Wie geht es Dir - USER ?" )
;Globaliere String$
Global Ausgabe$
Procedure String(text$)
If FindString(Ausgabe$, text$, 1)
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
;Beginn der Endlos - Schleife
Repeat
PrintN("")
ConsoleColor(13,0)
;Texteingabe
Text$ = Input() : PrintN("")
;Entfernt Space von Beginn & Ende des Strings
Text$ = Trim(text$)
;Konvertiert alle Grossbuchstaben in Kleinbuchstaben
Text$ = LCase(text$)
If Text$ = ("quit") : Break
EndIf
;Satzzeichen , . ; : ! ? werden ermittelt und entfernt
Text$ = RemoveString (Text$,",")
Text$ = RemoveString (Text$,".")
Text$ = RemoveString (Text$,";")
Text$ = RemoveString (Text$,":")
Text$ = RemoveString (Text$,"!")
Text$ = RemoveString (Text$,"?")
;String wird in einzelne Woerter geteilt
num = CountString(text$, " ") + 1
Dim Wort$(num) ; num viele elemente (0 bis num-1)
For I = 0 To num-1
Wort$(I) = StringField(text$, I + 1, " ")
;Wort für Wort analysieren und Synonyme vereinheitlichen
If FindString (Wort$(I),"nehm",1) : Wort$(I)="nimm"
ElseIf Wort$(I)="schwert"Or Wort$(I)="messer"Or Wort$(I)="saebel"Or Wort$(I)="degen"Or Wort$(I)="stichwaffe"Or Wort$(I)="dolch" : Wort$(I)="messer"
ElseIf Wort$(I)="gehen"Or Wort$(I)="gehe"Or Wort$(I)="ging"Or Wort$(I)="laufe"Or Wort$(I)="wandern"Or Wort$(I)="schreite"Or Wort$(I)="schleichen" : Wort$(I)="gehen"
ElseIf FindString (Wort$(I),"nord",1)Or FindString (Wort$(I),"sued",1)Or FindString (Wort$(I),"west",1)Or FindString (Wort$(I),"ost",1) : Wort$(I)="Richtung"
ElseIf FindString (Wort$(I),"movie",1)Or FindString (Wort$(I),"streifen",1) : Wort$(I)="film"
ElseIf FindString (Wort$(I),"gucken",1)Or FindString (Wort$(I),"schauen",1): Wort$(I)="sehen"
EndIf
Ausgabe$ = Ausgabe$ + Wort$(I) + " " : Debug (Ausgabe$)
Next
ConsoleColor(14,0) : PrintN("")
;Ausgabe der Antwort, anhand von Schlüsselwörtern - 3 WÖRTER
If String ("mir")And String ("geht")And String ("gut") : PrintN ( "Das freut mich zu hoeren, das es Dir gut geht USER.")
ElseIf String ("bist")And String ("du") And String ("da") : PrintN ( "Ja, wo soll ich denn sonst sein." )
;Ausgabe der Antwort anahnd von Schlüsselwörtern - 2 WÖRTER
ElseIf String ("film")And String ("sehen") : PrintN ( "Was willst Du denn fuer einen Film sehen ?" )
ElseIf String ("geht")And String ("dir") : PrintN ( "Danke der Nachfrage - USER." )
ElseIf String ("fuehle")And String ("wohl") : PrintN ( "Ich bin erfreut, dass Du dich wohl fuehlst." )
ElseIf String ("geht")And String ("gut") : PrintN ( "Ich bin erfreut das es Dir gut geht." )
ElseIf String ("geht")And String ("so") : PrintN ( "Vieleicht geht es Dir besser, wenn Du Dir einen Spielfilm ansiehst." )
;Ausgabe der Antwort, anhand von Schlüsselwörtern - 1 WORT
ElseIf String ("nachfrage") : PrintN ("Es freut mich, dass es Dir gut geht.")
ElseIf String ("gut") : PrintN ("Schoen zu hoeren, das es Dir gut geht.")
Else : ConsoleColor (15,0) : PrintN ( "Das Thema lautet FILM, deswegen habe ich Deine Eingabe nicht verstanden - USER." )
EndIf
Ausgabe$ = ""
ForEver
CloseConsole()
Verfasst: 01.02.2006 15:01
von KeyKon
Der Code ist auf jedenfall zu unübersichtlich, du solltest einrücken und Leerzeilen lassen damit dir das nicht über den Kopf wächst.
KeyKon
Verfasst: 01.02.2006 15:22
von Ironsmurf
Stimmt, es ist noch unübersichtlich, was daran liegt, das die DEMO nur
200 Zeilen zur verfügung stellt.
Leider ist die Vollversion noch nicht eingetroffen.
Verfasst: 01.02.2006 15:33
von KeyKon
Hatte man da nich immer 800 Zeilen
