Groß, größer, am größten

Mein erstes Vorhaben ist abgearbeitet. Ich habe die Wörter der Bibel aufbereitet, indem ich alle Stopwörter herausgefiltert und jedes Wort auf seinen Worstamm mit dem Porter-Stemmer-Algorithmus zurückgeführt habe. Das Ergebnis beeindruckt mich selbst. Die Stopwortliste ist gut. Das häufigste Wort ist nicht und, oder, dass, mein, dein, …, sondern Gott. Folgendes Bild zeigt meine kleine Anwendung:

Bildschirmfoto am 2012-03-24 13:23:49

Das Bild zeigt, dass der Porter-Stemmer ganz gut funktioniert, oder? groß, große, großem, großen, großer, großes, größe, größer, größere, größeren werden auf den Wortstamm gross zurück geführt. Der Algorithmus kennt allerdings nicht den gemeinsamen Stamm von sprach und spricht. Meine Bibelübersetzung ist wohl zu alt, den er kennt auch nicht den gemeinsamen Stamm von herr und herrn. Aber wie soll man einem Programm eine willkürliche Grammatik und Zeitformen beibringen? Es werden immer Fehler bleiben. Die Häufigkeiten der Wortstämme sind auf dem Bild spiralenförmig angeordnet. Gott ist das häufigste Wort in der Bibel, wen wunderts. Nun ja, das mag aber dennoch Menschen in Erstaunen setzen, die meinen, es gehe in der Bibel hauptsächlich um die Liebe oder Verhaltensregeln unter den Menschen. Interessant auch, dass Gott so viel spricht. Nun ja, mindestens wird jetzt deutlich, dass ich heimlicher Bibelfan bin.

An nackte Pointer in den folgenen Zeilen muss ich mich in Qt noch gewöhnen. In Qt übernimmt das Container-Element die Verantwortung für das Löschen der innewohnenden Elemente. Smartpointer brauche ich also nur für meine Datenstrukturen.

QStandardItem *child2 = new QStandardItem( QString::fromUtf8(verse.c_str()));
item->setChild(i,1,child2 );

Ich habe noch einmal gelernt, wie wichtig es in C++ ist, Variablen grundsäzlich zu initialisieren. Es müssen nicht nur alle Klassenelemente in der Initialisierungsliste initialisiert werden, sondern auch lokale Variablen in Methoden. Im Debugmodus hatte ich in Qt den Fall, dass eine uninitialisierte Variable automatisch mit 0 initialisiert wurde, so dass ich davon ausging, das der Code läuft. Im Releasemodus wurde diese Nettigkeit jedoch wegoptimiert, so dass ich den Fehler suchen musste.

Wer sich mit eigenen Augen überzeugen möchte, hier ist das CtCreator-Projekt.