Moin Leute,
So hab jetzt ein Programm geschrieben.
Hab aber noch einige kleiner Fehler im Programm.
Es geht um folgendes.
Man soll ein Text eingeben.
1. Wörter zählen
2. Häufigkeit der Wörter ermitteln
3. Häufigstes Wort an ertser Stelle
4. Prozentwert neben Häufigkeit
function Textkette(){
var Eingabe=document.forms['f1'].t1.value;
var Eingabeinarray = Eingabe.split(" ");//wandle String in Array um
var normalisiere=new Array();
for(var i=0;i<Eingabeinarray.length;i++){//Filtere die Wörter
normalisiere[i]=normalisiertesWort(Eingabeinarray[i]);
}
document.forms['f1'].anzahl.value = i;
normalisiere.sort();//Nach Alphabet und Kleinbuchstaben sortieren
var k=1;
array=new Array();
var p=0;
for(var j=0;j<normalisiere.length;j++){//ermitteln wie oft die einzelnen woerter vorkommen
if(normalisiere[j]===normalisiere[j+1]){
k++;
}
else{
array[p]=new Array(2);
array[p][0]=normalisiere[j];
array[p][1]=k;
p++;
k=1;
}
}
var tausch1, tausch2;
for(p=0;p<array.length-1;p++){//sortieren des Arrays nach haeufigkeit des vorkommen der woerter
if(array[p][1]<array[p+1][1]){//da ist ein fehler er nimmt nicht ich mit 6 als erstes sondern 15 mit 1
tausch1=array[p+1][1];
tausch2=array[p+1][0];
array[p+1][1]=array[p][1];
array[p+1][0]=array[p][0];
array[p][1]=tausch1;
array[p][0]=tausch2;
p=0;
}
}
//Ausgabe
document.forms['f1'].wo1.value = array[0][0]+(" ")+(array[0][1]*100/i).toFixed(1);
document.forms['f1'].wo2.value = array[1][0]+(" ")+(array[1][1]*100/i).toFixed(1);
document.forms['f1'].wo3.value = array[2][0]+(" ")+(array[2][1]*100/i).toFixed(1);
document.forms['f1'].wo4.value = array[3][0]+(" ")+(array[3][1]*100/i).toFixed(1);
document.forms['f1'].wo5.value = array[4][0]+(" ")+(array[4][1]*100/i).toFixed(1);
document.forms['f1'].wo6.value = array[5][0]+(" ")+(array[5][1]*100/i).toFixed(1);
document.forms['f1'].wo7.value = array[6][0]+(" ")+(array[6][1]*100/i).toFixed(1);
document.forms['f1'].wo8.value = array[7][0]+(" ")+(array[7][1]*100/i).toFixed(1);
document.forms['f1'].wo9.value = array[8][0]+(" ")+(array[8][1]*100/i).toFixed(1);
document.forms['f1'].wo10.value = array[9][0]+(" ")+(array[9][1]*100/i).toFixed(1);
}
function normalisiertesWort(s) {//woerter aus dem text rausfiltern
var satzZeichen = "\",;:.!?-"; //herauszufilternde Zeichen
var w = "";
s = s.toLowerCase(); // Umwandlung in Kleinbuchstaben
for (var i=0; i < s.length; i++) {
if (satzZeichen.indexOf( s.charAt(i)) == -1) { // kein Satzzeichen
w = w + s.charAt(i); // also in den Wortstring übernehmen
}
}
return w
}
//]]>
</script>
</head>
<body>
<form id="f1" action="hello.html">
<p>
<label for="Eingabe ">Text: </label><br />
<textarea type="text" id="text" name="t1" cols="75" rows="12"></textarea><br />
<button type="button" onclick="Textkette()">Auswerten des Textes</button><br />
<label for="anzahl">Anzahl der Woerter: </label>
<input type="text" id="anzahl" name="anzahl" readonly="readonly" /><br/><br/>
<label for="woerter">Haeufigste Woerter: </label><br/>
<label for="wo1">1.</label>
<input type="text" id="wo1" name="wo1" readonly="readonly" /><br/>
<label for="wo2">2.</label>
<input type="text" id="wo2" name="wo2" readonly="readonly" /><br/>
<label for="wo3">3.</label>
<input type="text" id="wo3" name="wo3" readonly="readonly" /><br/>
<label for="wo4">4.</label>
<input type="text" id="wo4" name="wo4" readonly="readonly" /><br/>
<label for="wo5">5.</label>
<input type="text" id="wo5" name="wo5" readonly="readonly" /><br/>
<label for="wo6">6.</label>
<input type="text" id="wo6" name="wo6" readonly="readonly" /><br/>
<label for="wo7">7.</label>
<input type="text" id="wo7" name="wo7" readonly="readonly" /><br/>
<label for="wo8">8.</label>
<input type="text" id="wo8" name="wo8" readonly="readonly" /><br/>
<label for="wo9">9.</label>
<input type="text" id="wo9" name="wo9" readonly="readonly" /><br/>
<label for="wo10">10.</label>
<input type="text" id="wo10" name="wo10" readonly="readonly" /><br/>
</p>
</form>
</body>
</html>
Probleme:
1. bei mir gibt er in der ausgabe erst das wort "15" mit häufigkeit 1 bzw. 0,7% und danach erst das häufigste wort "ich" mit häufigkeit 6 bzw 4,3% ich konnte nicht herausfinden woran das liegt
2. Kann ich die Ausgabe nicht eleganter machen?
Am liebsten in einer Tabelle
Dankeschön im voraus.
Gruß
Uwe