Hallo Leute,
ich bin neu hier im Forum. Bisher bin ich immer gut mit Google & Co gefahren und konnte alle meine Problemstellungen schnell lösen. Auf mein folgendes Problem habe ich keine Antwort gefunden, daher habe ich mich hier angemeldet, in der Hoffnung ihr könnt mir helfen.
Ich habe ein eigenes CMS geschrieben, das genau auf unsere Kunden ausgerichtet ist. Natürlich darf in so einem CMS eine Suchfunktion nicht fehlen. Suchfunktion etc. funktioniert auch soweit. Was mir Kopfzerbrechen bereitet, ist die Darstellung des Suchergebniss-Strings.
Die Suchbegriffe im Ergebnis werden mit preg_replace gehighlighted, nachdem den Ergebnistext sinnvoll gekürzt wird.
Das funktioniert mit einem Suchbegriff auch wunderbar:
Hier wird also vor und nach dem Suchergebnis 70 Zeichen Fleisch dazu gegeben.
Jetzt mein Problem:
Wenn in der Suche mehrere Suchbegriffe angegeben werden, die mit UND verknüpft sind, sollen ja auch mehrere Suchergebnisse angezeigt werden. Ich bringe die Suchbegriffe in einen Array. Sie so preg_replace zu übergeben funktioniert ja auch wunderbar. Nur wie kriege ich meinen Text sinnvoll so gekürzt, dass gerade die gefundenen Begriffe angezeigt werden, sich aber nichts doppelt und auch nur jeder Begriff mindestens einmal vorkommt?
Ich habe es so versucht:
($arr ist der Array mit den Suchergebnissen, $arr_preg enthält die Pre- und Suffixe für die Preg-Funktion)
Hier wird immer das erste Vorkommen des Begriffs im Text gesucht und davor und dahinter 70 Zeichen Fleisch mitgegeben. Das ganze kommt in eine Variable, die am Ende angezeigt wird.
Das funktioniert, wenn die Suchbegriffe im Text weit genug auseinander liegen.
Suche ich aber z.B. "Franz und Taxi" im Text "Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin." wäre das Ergebnis: "Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin. ... Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin.", weil erst Franz gefunden wird, und dann Taxi und jeweils 70 Zeichen davo und dahinter mitgenommen und das Ganze hintereinander gesetzt wird.
Ich hoffe ihr versteht mein Problem.
Kurz und knapp also nochmal die Frage:
Wie kürze ich einen Text sinnvoll, sodass bestimmte Begriffe mindestens einmal bestehen bleiben und der Sinnzusammenhang mit dem Begriff jeweils erhalten bleibt? (Eigentlich wie bei Google).
Ich würde mich über eure Hilfe sehr freuen!
Danke & Grüße,
Jay
ich bin neu hier im Forum. Bisher bin ich immer gut mit Google & Co gefahren und konnte alle meine Problemstellungen schnell lösen. Auf mein folgendes Problem habe ich keine Antwort gefunden, daher habe ich mich hier angemeldet, in der Hoffnung ihr könnt mir helfen.
Ich habe ein eigenes CMS geschrieben, das genau auf unsere Kunden ausgerichtet ist. Natürlich darf in so einem CMS eine Suchfunktion nicht fehlen. Suchfunktion etc. funktioniert auch soweit. Was mir Kopfzerbrechen bereitet, ist die Darstellung des Suchergebniss-Strings.
Die Suchbegriffe im Ergebnis werden mit preg_replace gehighlighted, nachdem den Ergebnistext sinnvoll gekürzt wird.
Das funktioniert mit einem Suchbegriff auch wunderbar:
PHP-Code:
$resultText = substr($pageContent, stripos($pageContent, $searchstr)-70, 140 + strlen($searchstr));
$resultText = preg_replace("/($searchstr)/i", "<span class='searchResultHighlight'>$1</span>", $resultText);
Jetzt mein Problem:
Wenn in der Suche mehrere Suchbegriffe angegeben werden, die mit UND verknüpft sind, sollen ja auch mehrere Suchergebnisse angezeigt werden. Ich bringe die Suchbegriffe in einen Array. Sie so preg_replace zu übergeben funktioniert ja auch wunderbar. Nur wie kriege ich meinen Text sinnvoll so gekürzt, dass gerade die gefundenen Begriffe angezeigt werden, sich aber nichts doppelt und auch nur jeder Begriff mindestens einmal vorkommt?
Ich habe es so versucht:
($arr ist der Array mit den Suchergebnissen, $arr_preg enthält die Pre- und Suffixe für die Preg-Funktion)
PHP-Code:
$resultText = "";
for($s = 0; $s < sizeof($arr); $s++) {
$resultText.= substr($pageContent, stripos($pageContent, $arr[$s])-70, 140) . " ... ";
}
$resultText = preg_replace($arr_preg, "<span class='searchResultHighlight'>$1</span>", $resultText);
Das funktioniert, wenn die Suchbegriffe im Text weit genug auseinander liegen.
Suche ich aber z.B. "Franz und Taxi" im Text "Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin." wäre das Ergebnis: "Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin. ... Franz jagt im vollkommen verwahrlosten Taxi quer durch Berlin.", weil erst Franz gefunden wird, und dann Taxi und jeweils 70 Zeichen davo und dahinter mitgenommen und das Ganze hintereinander gesetzt wird.
Ich hoffe ihr versteht mein Problem.
Kurz und knapp also nochmal die Frage:
Wie kürze ich einen Text sinnvoll, sodass bestimmte Begriffe mindestens einmal bestehen bleiben und der Sinnzusammenhang mit dem Begriff jeweils erhalten bleibt? (Eigentlich wie bei Google).
Ich würde mich über eure Hilfe sehr freuen!
Danke & Grüße,
Jay
Kommentar