Textteile auf Richtigkeit prüfen.

Fab1

Top Contributor
Hallo Zusammen,

Es geht um ein kleines Karteikarten Programm. Man erstellt am Anfang eine Karteikarte legt die Frage und die Antwort fest diese wird anschließend in einer Textdatei gespeichert.

Nun zu diesem Problem. Es ist ja relativ einfach bei einem Vokabeltrainer zu überprüfen, ob das vom User eingegebene Wort mit dem gespeicherten übereinstimmt. Nun habe ich nicht nur einzelne Wörter sondern ganze Sätze. Eine 1 zu 1 Überprüfung auf die Richtigkeit der Antwort finde ich nicht sinnvoll, denn man müsste ja auch jedes Komma und jedes Wort wieder genau so wiedergeben wie man es mal gespeichert hat.

Somit hab ich mir folgendes gedacht.

Ich habe 2 Strings.

Der Eine, der beim Erstellen der Kartei Karte als richtige Antwort angegeben wurde. Und der zweite wurde vom Benutzer als Antwort auf eine Karte eingegeben.

Ich vergleiche, ob 60% der Wörter die damals als richtige Antwort angegeben wurden in der eingegebenen Antwort enthalten sind. (anfangs hatte ich 80%)

Soweit funktioniert auch alles. Nur müsste man sehr viele Sonderfälle einbauen. Um zu vermeiden, dass bei Antworten auf die Frage

(Bsp) Wie viel ist 1 mal 1?
Antwort: 1 mal 1 ist 1 oder 1 mal 1 ist nicht eins. --> in beiden Fällen würde true raus kommen und die Antwort somit als richtig angezeigt werden.


Nun meine Frage:

Weiß jemand von euch eine alternative für dieses Problem?
Sofern ich einen Denkfehler in meinem Code habe weist mich bitte darauf hin.

Ich muss noch sagen, in dem bisherigen Code sind noch ein paar Fehler, was das verarbeiten der Sätze angeht. Es müsste noch Komma Punkte Sonderzeichen etc. entfernt werden.

Java:
private boolean prüfeErgebnis(){
		
		String antwort = aktuelleKarte.getAntwort(); // String von der am Anfang gespeicherten richtigen Antwort.
		
		String antwortOhneLeerzeichen = antwort.replaceAll(" ", "");
		int anzahlAntwortOhneLeerzeichen = antwortOhneLeerzeichen.toCharArray().length;
		anzahlAntwortOhneLeerzeichen = ((anzahlAntwortOhneLeerzeichen* 60)/100);	// Wenn 60% der Wörter richtig sind, dann true
		
		int anzahlRichtigerBuchstaben = 0;
				
		String antwortArea = ausgabeAntwort.getText().replaceAll("  ", " ");
		antwortArea = antwortArea.replaceAll("   ", " ");
		
				
		String antwortText = antwort.replaceAll("  ", " ");
		
		String[] richtigeAntwort = antwortText.split(" ");		// Die Am Anfang gespeicherte richtige Antwort.
		String[] userEingabe = antwortArea.split(" ");			// Die User Eingabe
		int x = 0;
		int stelle = 0;
		while(x<userEingabe.length){		// Wort das im String gesucht werden soll
			stelle = 0;
			while(stelle<richtigeAntwort.length){
				
				if(userEingabe[x].compareTo(richtigeAntwort[stelle]) == 0){
					anzahlRichtigerBuchstaben = anzahlRichtigerBuchstaben +userEingabe[x].length();
					break;
				}
				stelle++;
			}
			x++;
					
		}
		
		if(anzahlRichtigerBuchstaben > anzahlAntwortOhneLeerzeichen){
			return true;
		}else return false;
		
		
}

Vielen Dank

edit: Betreff fällt mir leider kein besserer ein.
 
Ich vergleiche, ob 60% der Wörter die damals als richtige Antwort angegeben wurden in der eingegebenen Antwort enthalten sind. (anfangs hatte ich 80%)
Frage: wieviel ist 2 plus 4?
Antwort: zwei plus vier ergibt vierundzwanzig.
80% Der Wörter sind richtig aber die Antwort ist total falsch. Ich denke darauf kann man sich nicht unbedingt verlassen.
 
Na, jemand legt als Frage fest:
Code:
Wieviel ist 2 plus 4?
. Als Antwort speichert er
Code:
zwei plus vier ergibt sechs
.
Dann bekommt jemand die Frage und gibt als Antwort ein:
Code:
zwei plus vier ergibt vierundzwanzig
.
80% der Wörter sind vorhanden => Antwort korrekt...
Oder andersrum, er gibt einfach nur sechs sein. 80% der Wörter sind nicht vorhanden, also wird die Antwort als falsch eingestuft.
 
Also ich finde dein Vorhaben irgendwie abgefahren. Was ist, wenn ich als Antwort angebe:
"Hm, also wenn ich mal länger darüber nachdenke, dann bin ich mir schon ziemlich sicher, dass bei der Frage eins rauskommt... wobei... ne, doch, es kommt 1 raus. Es sei denn mal hat ein anderes Zahlensystem, dann muss es nicht zwingen sein, aber ich glaube nicht, dass danach in der Aufgabe gefragt wurde"
Somit habe ich die Frage richtig beantwortet, aber was willst du da automatisch auswerten lassen?
Mach entweder Multipe-Choise-Aufgaben, oder Aufgaben, wo du eben Zahlen eingeben kannst
 
Zuletzt bearbeitet:
Jetzt verstehe ich was du meinst. Ist von der Art ja auch ähnlich wie das Beispiel das ich geschrieben habe. Dies ist eben noch das Problem an der ganzen Sache.

Vielleicht wäre hier noch eine Einschränkung hilfreich. Wenn die bei der Erstellung gespeicherte Antwort kleiner als 4 Wörter ist, dann muss der Name 1 zu 1 stimmen, ansonsten halb prüfen. Oder so ähnlich 🙂

Edit:

Abgefahren ist das ganze das kannst du laut sagen. Und Multipe-Choise-Aufgaben, oder Aufgaben, wo man eben Zahlen eingeben kann wäre sicher einfacher.

Allerdings würde ich trotzdem gerne an der Idee festhalten. Anfangs dachte ich mir, ach komm lass den User doch einfach selbst entscheiden, ob die Antwort richtig war oder nicht nachdem ihm die richtige Antwort angezeigt wurde.

Sofern noch jemand ein paar Ideen hat, wäre ich sehr dankbar. (ich gebs mal noch nicht auf) 🙂
 
Zuletzt bearbeitet:
Genau genommen sind das Themen mit denen sich hochbezahlte Informatik-Wissenschaftler beschäftigen.
Satzinterpretierung, und programmierte Halb-Intelligenz.
Ich schätze das kannst du im Großen und Ganzen erstmal abhaken 😉

Ich selbst wollte an dieses Thema auch schonmal ran, ich glaube grundsätzlich ist das auch möglich, aber nur wenn man enorm (!) viel Zeit investiert.
 
Jap, auf das wird es wohl leider hinauslaufen. Aber ich werde es trotzdem mal so meinem Lehrer übergeben. Danke. Close!
 

Neue Themen


Zurück
Oben