• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[SCRIPTSUCHE] Validierung von Sätzen

uthred

New member
Hi,

Ich suche aktuell ein Script welches mir einen vom User angegebenen Satz auf kausale Richtigkeit überprüft.

Ich habe ein Quiz, dort wird dann z.B. gefragt: "Frage: Bei der Unternehmensüberschreitenden Projektorganisation, wird ein Konsortiales Projekt von ... gesteuert"
Zielantwort: "einer Organisation oder einem Konsortium mit Kaufvertrag"

Nun soll der User dies aber nicht 100% so hinschreiben müssen, sondern nur sinngemäß antworten.

Als Idee habe ich eine Art Stichwortvergleich nach dem Motto (Stichwort: Organisation || Stichwort: Konsortium) && Stichwort: Kaufvertrag.
Das Problem daran ist, dass das Frage erstellen dann sehr lange dauert...
Ich würde dies lieber automatisieren, damit ich am Ende nur ein Satz hinschreiben muss.
 
einen vom User angegebenen Satz auf kausale Richtigkeit überprüft.
Da hast du dir ja ein Schwergewicht ausgesucht. Sprachkontext programmatisch zu erkennen und zu validieren ist nicht ganz so einfach.

(Stichwort: Organisation || Stichwort: Konsortium) && Stichwort: Kaufvertrag.
Wenn du aber nur prüfen willst, ob bestimmte Wörter in der Antwort vorkommen, ist das Ganze viel einfacher, aber du wirst auch falsche Antworten als richtig und richtige als falsch einstufen (v.A. im Deutschen hast du mit den Komposita Probleme - so kann in der Antwort ja "Konsortiumskaufvertragsabschluss" oder "Verkaufvertragen" (ich weiß: schlechtes Beispiel) vorkommen). Prinzipiell kannst du dich auf die automatische Analyse von Freitextfeldern niemals 100%ig verlassen.

Aber wenn du das so machen willst, könnte eine Lösung so aussehen:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<style type="text/css">
.wrong {
	background-color: red;
}
.right {
	background-color: lightgreen;
}
</style>
</head>
<body>
<textarea id="input"></textarea>
<script type="text/javascript" src="http://kkjs.kkapsner.de/modules/kkjs.load.js"></script>
<script type="text/javascript">
var Parser = kkjs.oo.Base.extend(function Parser(structure){
	
}).implementStatic({
	createParser: function(structure){
		if (Array.isArray(structure)){
			switch(structure[0].toLowerCase()){
				case "or":
					return new OrParser(structure);
				case "and":
					return new AndParser(structure);
				case "not":
					return new NotParser(structure);
			}
		}
		else if (structure instanceof RegExp){
			return new RegExpParser(structure);
		}
		else {
			return new StringParser(structure);
		}
	}
});
var StringParser = Parser.extend(function(string){
	this.string = string;	
}).implement({
	isValid: function(str){
		return str.indexOf(this.string) !== -1;
	}
});
var RegExpParser = Parser.extend(function(regExp){
	this.regExp = regExp;
}).implement({
	isValid: function(str){
		return !!str.match(this.regExp);
	}
});
var OrParser = Parser.extend(function(structure){
	if (!Array.isArray(structure) || structure.shift().toUpperCase() !== "OR"){
		throw new TypeError("Invalid parser structure.");
	}
	this.subParsers = structure.map(Parser.createParser);
}).implement({
	isValid: function(str){
		return this.subParsers.some(function(sub){
			return sub.isValid(str);
		});
	}
});
var AndParser = Parser.extend(function(structure){
	if (!Array.isArray(structure) || structure.shift().toUpperCase() !== "AND"){
		throw new TypeError("Invalid parser structure.");
	}
	this.subParsers = structure.map(Parser.createParser);
}).implement({
	isValid: function(str){
		return this.subParsers.every(function(sub){
			return sub.isValid(str);
		});
	}
});
var NotParser = Parser.extend(function(structure){
	if (!Array.isArray(structure) || structure.length !== 2 || structure.shift().toUpperCase() !== "NOT"){
		throw new TypeError("Invalid parser structure.");
	}
	this.subParser = Parser.createParser(structure[0]);
}).implement({
	isValid: function(str){
		return !this.subParser.isValid(str);
	}
});


var correct = Parser.createParser(["and", ["or", "Organisation", "Konsortium"], "Kaufvertrag"]);

kkjs.event.add(kkjs.$("input"), "input", function(){
	var isCorrect = correct.isValid(this.value);
	kkjs.css.className.remove(this, !isCorrect? "right": "wrong");
	kkjs.css.className.add(this, isCorrect? "right": "wrong");
});
</script>
</body>
</html>
 
Vielen Dank für die Antworten. Ich werde mich demnächst mal an das Testen machen. Werde außerdem noch Kausalitäts ändernde Worte mit überprüfen (Der Himmel ist blau != Der Himmel ist nicht blau)

Vielleicht, wenn die Zeit lang genug ist, auch einen Parser für Sätze wie "Die Straße ist nass, es regnet" -> korrekt, "Die Straße ist nass, es regnet nicht -> korrekt (kein Wiederspruch), Die Straße ist trocken, es regnet nicht -> korrekt und die Straße ist trocken, es regnet nicht -> falsch.

Falls ich dafür eine einfache validierung finde, schreibe ich die hier rein
 
Falls ich dafür eine einfache validierung finde, schreibe ich die hier rein
Schade, dass wir du hier nicht mehr schreibst... ;)

Spaß bei Seite: dein Problem ist extrem komplex und es gibt dafür keine einfache Lösung - außer du findest eine Implementierung von Spracherkennung in JS, die du einfach nur einbinden und die API verwenden musst.
 
Zurück
Oben