HTML and Javascript Page in English
HTML and Javascript Page in English

Wörterbuchbasierte HTML Silbentrennung

Bei Ver­wen­dung von Block­satz kön­nen Sei­ten be­son­ders auf klei­nen Bild­schir­men (Smart­phones) manch­mal sehr zer­ris­sen aus­se­hen. Einige Brow­ser wie z.B. Fire­fox füh­ren zwar ei­ne Sil­ben­tren­nung durch (die lei­der auch nicht im­mer ganz kor­rekt ist, so trennt er z.B. Sicher-ung statt kor­rekt Siche-rung), der z.Zt. am häu­figs­ten ein­ge­setz­te Brow­ser (Goog­le Chrome) be­herrscht dies je­doch nicht. So ist es un­um­gäng­lich, Trenn­vor­schlä­ge (Soft Hy­phens, ­) zu­min­dest bei län­ge­ren Wor­ten in die HTML-Sei­ten mit ein­zu­bau­en.

Bisher ha­be ich das im­mer von Hand ge­tan wäh­rend oder nach dem Schrei­ben der In­hal­te. Später ent­schied ich mich da­für, ein klei­nes Perl-Skript zu schrei­ben, das die Sil­ben­tren­nung durch­führt.

hyphenateHTML

Dieses Skript re­a­li­siert ei­ne wör­ter­buch­ba­sier­te Sil­ben­tren­nung für HTML-Da­tei­en. Dazu wird die Da­tei zu­nächst ein­ge­le­sen und dann der nor­ma­ler­wei­se im Brow­ser sicht­ba­re Text an­hand ei­nes Wör­ter­buchs mit Trenn­vor­schlä­gen ver­se­hen. Da­mit wird ver­hin­dert, ver­se­hent­lich Tags oder At­tri­bu­te zu tren­nen was die Da­tei prak­tisch un­brauch­bar ma­chen wür­de. Le­sen und Schrei­ben der Da­tei er­folgt mit dem Perl-Mo­dul HTML::TreeBuilder, was recht pro­blem­los mög­lich war.

Aller­dings müs­sen Sie die Op­tion ignore_unknown(0) set­zen, da es sonst math-Tags ent­fernt, da es die­se of­fen­sicht­­lich (im­mer noch) nicht kennt.

Voraussetzungen

hyphenateHTML be­nö­tigt fol­gen­de Perl-Mo­du­le, die Sie, so­fern noch nicht vor­han­den, auf den meis­ten Sys­te­men mit cpan install <name> in­stal­lie­ren kön­nen:

Installation

Ko­pie­ren Sie das Skript nach /usr/local/bin und die Wör­ter­bü­cher nach /usr/local/etc. Wenn Sie wol­len kön­nen Sie den Pfad für die Wör­ter­bü­cher im Skript mit der Va­ri­ab­le $dict­path an­pas­sen.

Einsatz

Wenn Sie hyphenateHTML -h ein­ge­ben er­hal­ten Sie ei­ne aus­führ­li­che Be­schrei­bung der ver­füg­ba­ren Op­tio­nen. Ich ver­wen­de

hyphenateHTML -rI '*.html'

aus dem Root-Di­rec­to­ry der Site für den täg­li­chen Ein­satz, al­ler­dings (aus an­de­ren Grün­den) im­mer nur in ei­ner Ko­pie da­von. Durch die I-Op­tion (In-Place) wird die Ori­gi­nal­da­tei über­schrie­ben. Dabei gab es bis­her kei­ne Pro­ble­me. Schlimms­ten­falls kann man al­le &shy; wie­der ent­fer­nen. Wenn Sie vor­sich­ti­ger sein wol­len, neh­men Sie

hyphenateHTML -b <name.html>

Da­mit wird vor dem Schrei­ben die Ori­gi­nal­da­tei in .bak um­be­nannt.

Der Auf­ruf mit

hyphenateHTML <name.html>

ist gut zum Ver­fei­nern des Wör­ter­buchs. So bleibt die Ori­gi­nal­da­tei er­hal­ten und ei­ne neue Da­tei <name.html.hyp.html> wird er­stellt. Die­se kön­nen Sie dann wie­der und wie­der im Brow­ser oder ei­nem Edi­tor tes­ten.

Spe­zi­ell bei Ver­wen­dung gro­ßer Wör­ter­bü­cher (wie Wer­ners Lis­te vom Dan­te-Pro­jekt mit fast ei­ner hal­ben Mil­lion Ein­trä­gen) dau­ert das Ein­le­sen des Wör­ter­buchs deut­lich län­ger als die ei­gent­li­che Tren­nung. Des­halb gibt es ei­ne --re­cur­sive-Op­tion, so dass man die gan­ze Web­site tren­nen kann und trotz­dem das Wör­ter­buch nur ein­mal ein­le­sen muss.

Wörterbücher

Ich ha­be ein deutsch­spra­chi­ges Wör­ter­buch so­wie ei­ne Ignore-Lis­te (Wor­te die nicht ge­trennt wer­den kön­nen oder sol­len), na­tür­lich haupt­säch­­lich mit Wor­ten, die auf mei­ner Site vor­kom­men, er­stellt. Bei den ent­hal­te­nen Wör­tern war ich mir ent­we­der si­cher oder ich ha­be sie im Du­den nach­ge­schla­gen. Es kann al­so durch­aus auch Feh­ler ent­hal­ten. Das For­mat ist hier üb­ri­gens das glei­che wie im Du­den, Sie kön­nen die Tren­nung mit Copy-And-Pas­te über­neh­men.

Mein Skript führt kei­ne Gram­ma­tik-Über­prü­fung durch. Soll hei­ßen, Wör­ter wie ähn­lich, die nor­ma­ler­wei­se klein ge­schrie­ben wer­den, müs­sen auch groß ge­schrie­ben exis­tie­ren falls sie mal am Satz­an­fang vor­kom­men.

Dies er­klärt aber nur teil­wei­se die 2600+ Ein­trä­ge mei­nes Wör­ter­buchs, die Aspell nicht kennt...

Format

Das Wör­ter­buch ent­hält ein Wort pro Zei­le. Mög­li­che Trenn­stri­che sind als senk­rech­ter Strich (|) zu set­zen.

Die Rei­hen­fol­ge der Wör­ter spielt kei­ne Rol­le. Ich sor­tie­re die Da­tei ge­le­gent­lich der Les­bar­keit we­gen aber es ist nicht er­for­der­lich.

In­zwi­schen wird auch das Dan­te-For­mat (sie­he Down­loads) un­ter­stützt. Es un­ter­schei­det zwi­schen ver­schie­de­nen Ar­ten von Trenn­stel­len, wo­bei un­schö­ne Trenn­stel­len (wie bein-hal­ten oder Urin-stinkt) ent­fernt wer­den.

Bekannte Probleme

Wor­te mit her­vor­ge­ho­be­nen Teilen (wie z.B. Approximation), die al­so ein Tag in­ner­halb ei­nes Wort­teils ha­ben, wer­den nicht als gan­zes er­kannt, er­zeu­gen ei­nen Feh­ler und wer­den ent­spre­chend auch nicht kor­rekt ge­trennt.

Die Lö­sung scheint auf­wän­dig, der Er­folg eher ge­ring. Auf mei­ner Home­page sind da­von z.Zt. drei Wor­te da­von be­trof­fen, die Mo­ti­va­tion sie zu im­ple­men­tie­ren ist al­so eher ge­ring :-)

Ein Work­around könn­te sein, die­se Wor­te ma­nu­ell zu tren­nen und die ‑k-Op­tion (‑‑keep­shy) zu ver­wen­den.

Downloads