linguistischer syntaxparser javascript
c.freund
- javascript
Hi ich bin absoluter Laie und versuche für eine Unihausarbeit einen simplen Syntax Parser zu programmieren. Kann ich das irgendwie hinkriegen das, wenn ein beliebiger Wert aus einem bestimmten Array in die Eingabe eingegeben wird, es eine positive Meldung gibt? (Und wenn die Reihenfolge oder die Eingabe falsch ist, eine negative.)
<body>
<script type = "text/javascript"> //Eingabeaufforderung
document.write("<br>________________________<br>");
var Eingabe = prompt("Geben Sie einen Satz ein, der aus den obenstehenden Wörtern gebildet ist, um auf
Grammatikalität zu prüfen.","le soleil brille");
document.write("Ihre Eingabe lautete: "); document.write(Eingabe);
document.write("<br>________________________<br>");
//Tagging
var Detf = new Array ("la", "une");
var Detm = new Array ("le", "un");
var Nf = new Array ("fille");
var Nm = new Array ("soleil", "vent", "garçon");
var Vi = new Array ("brille", "chante");
var Vt = new Array ("sent", "voit", "chante");
/* if (Eingabe == Detf, Nf, Vi)
if (Eingabe == Detm, Nm, Vi)
if (Eingabe == Detf, Nf, Vt, Detm, Nm)
if (Eingabe == Detf, Nf, Vt, Detf, Nf)
if (Eingabe == Detm, Nm, Vt, Detm, Nm)
if (Eingabe == Detm, Nm, Vt, Detf, Nf)
{document.write("Ihre Eingabe ist syntaktisch korrekt.")}
else {document.write("Diese Eingabe ist grammatikalisch nicht korrekt.")}; */
Hallo,
Beispielimplementierung:
var Detf = ['la', 'une'];
var Detm = ['le', 'un'];
var Nf = ['fille'];
var Nm = ['soleil', 'vent', 'garçon'];
var Vi = ['brille', 'chante'];
var Vt = ['sent', 'voit', 'chante'];
// Mögliche Grammatiken in einem Array of Arrays
var grammars = [
[Detf, Nf, Vi],
[Detm, Nm, Vi],
[Detf, Nf, Vt, Detm, Nm],
[Detf, Nf, Vt, Detf, Nf],
[Detm, Nm, Vt, Detm, Nm],
[Detm, Nm, Vt, Detf, Nf]
];
var string = 'Le soleil voit la fille';
//var string = window.prompt('Satz eingeben');
// Vorbereitung des Strings, entfernen aller Nicht-Buchstaben, wandle in Kleinschreibung um
string = string.toLowerCase().replace(/[^a-z\s]/g, '');
// Splitten an Leerzeichen (Whitespace), sodass ein Array entsteht
var words = string.split(/\s+/);
// Words ist jetzt ein Array of Strings: ['le', 'soleil', 'voit', 'la', 'fille']
// Durchlaufe die möglichen grammars, bis die Iterator-Funktion true zurückgibt
var valid = grammars.some(function(grammar) {
// Durchlaufe alle Worte, jedes Mal muss die Iterator-Funktion true zurückgeben
return words.every(function(word, index) {
// Prüfe, ob das Wort in dem jeweiligen Wortart-Array enthalten ist
var lexicalClass = grammar[index];
return lexicalClass.indexOf(word) > -1;
});
});
alert(valid);
Hier wird mit ECMAScript-5-Funktionen gearbeitet, die in neueren Browsern verfügbar sind.
some – Durchläuft eine Liste, führt für jedes Element die angegebene Funktion aus. Wenn die Funktion für ein Element true zurückgibt, wird abgebrochen und true zurückgegeben, ansonsten false. (Kriterium muss für ein Element zutreffen.)
every – Durchläuft eine Liste, führt für jedes Element die angegebene Funktion aus. Wenn die Funktion für alle Elemente true zurückgibt, wird true zurückgegeben, ansonsten false. (Kriterium muss für alle Elemente zutreffen.)
indexOf – Gibt den index des angegebenen Elements im Array zurück. Falls der Wert nicht im Array enthalten ist, wird -1 zurückgegeben.
Grüße
Mathias
Vielen Dank,
dass du dir Zeit genommen hast!
das hat mir geholfen, kann geschlossen werden!