Hallo und guten Abend.
Ich arbeite gerade an einem Lexikon in dem die einzelnen Einträge automatisch untereinander verlinkt werden. Kommt also der eine Begriff in der Erklärung zum anderen Begriff vor, dann wird dieser automatisch verlinkt. Soweit kein Problem. Mein erstes Problem war allerdings schon, dass ich meine Texte temporär von UTF-8 in ISO-8859-1 umwandeln muss, damit Worte mit Umlauten auch erkannt werden. Das geht zwar jetzt, nicht aber wenn der letzte Buchstabe ein Umlaut ist.
Zweites Problem ist, dass ich die Begriffe von lang nach kurz durchlaufen werden müssen. Dadurch wird natürlich mehr Relevanz erzielt, da auch Begriffe die aus mehreren Wörtern bestehen ersetzt werden. Hier muss natürlich verhindert werden, dass Begriffe doppelt ersetzt werden. Das habe ich gelöst, indem ich Abfrage ob sich der zu ersetzende Begriff in einem <TAG> befindet. Der Code sieht wie folgt aus:
Neben dem ersten genannten Problem, taucht jetzt noch ein zweites auf. Wenn Worte entweder mit einer Zahl beginnen (z.B. "15er Nuss") oder mit einem Bindestrich verbunden sind (z.B. Bau-Irgendwas), dann würden hier "Nuss" und "Irgendwas" jeweils auch noch mal ersetzt werden. Ansonsten, wie bei z.B. "großes Bauwerk" , würde nur der gesamte Begriff ersetzt werden und nicht Bauwerk noch mal, auch wenn es im Lexikon einzeln vorkommt. Hat jemand eine Idee, wo mein Fehler liegt?
Viele Grüße
Michael
Ich arbeite gerade an einem Lexikon in dem die einzelnen Einträge automatisch untereinander verlinkt werden. Kommt also der eine Begriff in der Erklärung zum anderen Begriff vor, dann wird dieser automatisch verlinkt. Soweit kein Problem. Mein erstes Problem war allerdings schon, dass ich meine Texte temporär von UTF-8 in ISO-8859-1 umwandeln muss, damit Worte mit Umlauten auch erkannt werden. Das geht zwar jetzt, nicht aber wenn der letzte Buchstabe ein Umlaut ist.
Zweites Problem ist, dass ich die Begriffe von lang nach kurz durchlaufen werden müssen. Dadurch wird natürlich mehr Relevanz erzielt, da auch Begriffe die aus mehreren Wörtern bestehen ersetzt werden. Hier muss natürlich verhindert werden, dass Begriffe doppelt ersetzt werden. Das habe ich gelöst, indem ich Abfrage ob sich der zu ersetzende Begriff in einem <TAG> befindet. Der Code sieht wie folgt aus:
PHP-Code:
preg_replace("~\b($word)\b(?![^<]*>)~si", ..., ...);
Viele Grüße
Michael
Kommentar