uwe87: Ausgabefehler

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

  1. Hi,

    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

    Kann ich nicht nachvollziehen.

    Mit „blah blubb blah jodel sülz blah jodel blah blah blubb blubb blubb blubb blubb blubb jodel“ erhalte ich

    Anzahl der Woerter: 16
    blubb  43.8
    blah  31.3
    jodel  18.8
    sülz  6.3

    Hab jetzt nicht nachgezählt/-rechnet - aber die Sortierung nach prozentualer Häufigkeit sieht doch erst mal gut aus.

    1. Kann ich die Ausgabe nicht eleganter machen?
      Am liebsten in einer Tabelle

    Klar kannst du - lass' dich nicht aufhalten.
    Im simpelsten Falle Zellen per innerHTML mit Werten befüllen, bzw. ggf. auch ganze Tabelle dynamisch in String-Form generieren und mit innerHTML ins Dokument einfügen.

    Und das Sortieren geht auch eleganter und vermutlich performanter - Array.sort nimmt auch eine Callback-Funktion als Parameter, vergleichbar mit PHPs usort.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Ja, stimmt schon, aber wenn ich den vorgegebenen Text eingebe:

      "Herr Bundespräsident, Herr Ministerpräsident, Herr Landtagspräsident, Herr Kardinal, lieber Herr Zehetmair und lieber Freund Theo Waigel! Während ich mir die Reden anhöre, gingen meine Gedanken in vergangene Zeiten zurück, und ich fragte mich: "Wann warst du zum ersten Mal in München?" Wenn ich mich recht entsinne, war das Ende März 1945. Ich war damals gerade 15 Jahre alt und ich befand mich als Flaghelfer in Berchtesgaden. Wir fuhren an einem Tag von Berchtesgaden nach München, um etwas dorthin zu transportieren. Ich kannte München noch nicht und meine erste Begegnung mit der Stadt war ein Schock, denn sie war ein einziger Trümmerhaufen. Angesichts dieses Elends sahen weder wir Kinder noch die Erwachsenen eine positive Zukunft. Doch wir haben es geschafft! Diese großartige Generation meiner Eltern, der Großeltern und vielleicht der Urgroßeltern verzweifelte trotz allem nicht. Sie sagten sich: "Wir wollen es packen!". "

      kommt halt bei der Ausgabe was falsches raus :((

      1. Hi there,

        [...]und vielleicht der Urgroßeltern verzweifelte trotz allem nicht. Sie sagten sich: "Wir wollen es packen!". "

        Fällt Dir da nichts auf?