Kategorien
Interaktion Programmieren Projekte Studium Typografie Webdesign

Coiffeur 2 — Making you even prettier now

Ich habe Coiffeur erweitert, ein computerlinguistisches Tool, um Texte zu analysieren. Das Originalprogramm konnte bestimmen, wie oft im Text welches Wort vorkommt. Daraus hat es dann den Type-Token-Quotienten errechnet. Klingt erstmal nicht besonders beeindruckend. Aber das coole an dem Programm ist, dass es mit Englisch sehr gut zurecht kommt. Dort gibt es Konstrukte wie I’m für I am. Und Coiffeur hat das richtig gezählt, das Wort wird wie 2 Worte behandelt und für jedes Teilwort werden entsprechend die Zähler erhöht. Dabei wird die Kontraktion ‚m aufgelöst und der Wert für am erhöht.

Das neue Programm kann alles, was Coiffeur schon konnte. Und natürlich kann es noch viel mehr.
Extra für Gedichte und andere kurze Texte kann der Benutzer einfache Wortlisten erstellen, wie Nomen (Haus, Frau, Mann). Diese werden dann auf den Text angewendet, so bekommt jedes Vorkommen von Haus, Frau oder Mann die Klasse Nomen in der Ausgabe, etwa so:

<span class="Nomen">Haus</span>

Erfolge

Das Ergebnis kann sich durchaus sehen lassen. Ich habe die Todesfuge von Paul Celan analysiert, ein Gedicht, das mir sehr gefällt und sich gut für eine vielschichtige visuelle Präsentation eignet. In der Präsentation kann man viel machen, es läuft alles rund, sieht schön bunt aus und bietet viele Infos.

Ich habe einige neue CSS-Schmankerl ausprobiert. Die wichtigste ist sicherlich die Einbindung von Fonts auf der Webseite mit der @font-face-Regel. Da konnte ich Axel testen, eine eng laufende Schrift und nicht alltägliche Schrift, bei der der Einsatz für Webseiten ausdrücklich erlaubt ist. Dadurch, dass sie eng läuft, konnte ich die Schriftgröße für gute Lesbarkeit relativ groß einstellen.

Wenn das Browserfenster zu klein ist, gibt es Zeilenumbrüche, die ein Gedicht schnell durcheinander bringen können. Dann weiß man nicht, ob eine neue Zeile beginnt oder die letzte wegen der Breite umgebrochen wurde. Ich habe das Problem dadurch gelöst, dass jede Zeile einen negativen Einzug hat, so steht der Text nach einem Umbruch automatisch weiter rechts als die echten Zeilenanfänge.

In modernen Browsern taucht das Problem der fehlerhaften Zeilenzuordnung möglicherweise gar nicht auf, die Zeilen werden durch CSS Counter automatisch nummeriert. Diese habe ich auf JavaScript Kit kennengelernt. Allerdings unterstützen nicht alle Browser CSS Counter, deshalb ist der Zeileneinzug trotzdem praktisch (siehe Abbildung).

Zeilenumbrüche

Probleme

Probleme gab es mit CSS, ich habe zuerst das Layout nur mit Firefox getestet, es lief natürlich alles gut. Dann hab ich das im Internet Explorer (7) geöffnet und …
Sah schon anders aus. Also gut, alles reparieren, damit auch IE alles sauber zeigt. Klappt. Nur noch einmal kurz im Firefox checken…

So ging es dann eine Zeit lang hin und her, bis ich ein Design hatte, was in beiden Browsern zumindest keine Probleme macht. Und das ist jetzt leider eine Minimallösung geworden. Es sollte möglich sein, dass sich die beiden Styleauswahl-Leisten nebeneinander anordnen, aber irgendein Browser hat dann immer irgendwas blödes gemacht. Und durch dieses Hickhack ist die Stylesheet-Datei recht unordentlich geworden, die könnte man noch aufräumen.
Ich war aber irgendwann einfach zufrieden, dass es zumindest so angezeigt wird und wollte es mein Glück nicht mehr herausfordern.

Auch mit dem Programm gab es Probleme. Coiffeur hatte ich ohne Funktionen geschrieben (die kannte ich damals noch nicht für Perl), es bestand alles aus vielen ineinander verschachtelten Schleifen, was sehr unübersichtlich ist, wenn man nach einem Jahr sich wieder dran setzt. Die wichtigsten Funktionen sind jetzt auch als Funktionen umgesetzt, so konnte ich nach und nach immer besser arbeiten.

Es gab dann teilweise noch Probleme, die ich mir nicht erklären konnte, nachdem ich den Quelltext zig-mal durchgesehen habe. Das war schon zum Schluss des Projekts, wo ich noch Englische Texte mit Kontraktionen getestet habe. Im Originalprogramm hat noch alles funktioniert und klappte jetzt nicht mehr, obwohl ich eigentlich nur die Ausgabe verändert habe und nicht das Zählen von Types oder Tokens.

Es lag wohl daran, dass ich die Dateien in Windows editiert habe und sie dann in einer virtuellen Linux-Maschine laufen ließ. Und weil beide Systeme Zeilenumbrüche anders kodieren, gab es bei Kontraktionen und anderen ausgewählten Wörtern Leerzeichen am Ende des Wortes. Damit konnten sie nicht richtig gezählt werden, „‚m“ ist nicht das gleiche wie „‚m “ (mit Leerzeichen).
Lektion gelernt — ab jetzt wird jeder Input erstmal gereinigt.

Ergebnis

Trotz allem bin ich sehr zufrieden, die Seite sieht gut aus und funktioniert genauso, wie ich es haben wollte.
Auch das neue Coiffeur 2 hat alle Features, die ich einbauen wollte, es kamen im Verlauf der Entwicklung noch einige praktische Funktionen hinzu, wie z.B. dass man in den Wortlisten auch mehrere Wörter angeben kann, z.B. die Metapher spielt mit den Schlangen. Würde man die Worte dafür einzeln eintragen, gäbe es viele False Positives, da die einzelnen Worte in anderen Kontexten auftauchen. So ist es viel komfortabler und einfacher für den Benutzer (war aber nicht ganz trivial für den Programmierer).

Metapher1 (schwarze milch der frühe)
Metapher2 (spielt mit den schlangen)
Metapher3 (Grab in den Lüften, Grab in der Luft, Grab in den Wolken)

Deshalb: guck es dir an, teste das Programm, lies den Text der Arbeit und kommentiere hier!