uwe87: Ausgabefehler

Beitrag lesen

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