wie kann man mit PHP aus einem String eine Reihe von Wörtern löschen?
ich versuche gerade den den Text von ein paar tausend Webseiten in meinem Intranet zu indizieren um damit eine eigene Suchmaschine für mein Intranet zu füttern.
Damit ich daraus gescheite Suchworte generieren kann muss ich zunächst sehr viele Wörter aus dem Text den ich aus dem Body hole löschen.
hat jemand eine Idee wie man das effizient durchführen könnte?
(vielleicht mit einem Code-Beispiel)
3 Antworten
- wiederholte Nutzung von str[i]replace()
- wiederholte Nutzung von preg_filter() (o.ä.)
- Generieren eines Hash mit Tokens zum Abgleich, String in Tokens zerlegen und linear abgleichen.
Bedenke, daß es sowas wie Wortformen gibt und Du eigentlich jede Form bei 1:1 Abgleich benötigst.
Eine Searchengine wäre vermutlich der deutlich einfachere Weg, insbesondere wenn der Indexer filtert und Stemming macht.Allerdings ist die Anfangshürde wohl größer.
Falls Du keine ganze Searchengine willst, dann kann man ggf. auch überlegen auf die einzelnen Komponenten zurückzugreifen und sich zumindest Teilaufgaben damit leichter zu machen.
Willst Du die Volltextsuche von MariaDB nutzen? Ich würde zumindest überlegen, ob eine dokumentenorientierte DB vielleicht bequemer wäre.
Nein keine Volltext-Suche - als ich vor kurzem ein Video-Portal mit Suchfunktion für meine Videosammlung programmiert hatte, ist mir aufgefallen, wie schlecht bzw. undiffernziert die Suchergebnisse waren wenn man eine Volltextsuche über mehrere Spalten macht.
Dafür habe ich inzwischen eine bessere Lösung
Von einer Eigenimplementation würde ich absehen, denn es gibt hierfür bereits passende Tools, die das für dich übernehmen können.
Schau dir Apache Solr an. Das ist eine Lucene-basierte Plattform, über die Suchindizes angelegt und verwaltet werden. Für die Konfiguration eines eigenen Index kannst du zudem Filter einsetzen. Mehrere Filtertypen sind bereits vorimplementiert.
Eine Extension für PHP gibt es ebenso.
Ich habe das Solr-Thema mal eben überflogen und bin zu dem Schluss gekommen, das mir Solr eine Nummer zu groß ist und meine Infrastruktur wird für den Betrieb ebenfalls nicht ausreichen.
Der Content ist über mehrere Raspberry PI und ein Synology NAS verteilt - die werden bei einer Volltextsuche in die Knie gehen.
preg_replace
Den Indexer habe ich schon zur Hälfte fertig und den Algorithmus für die Bewertung der Suchergebnisse habe ich schon seit 20 Jahren in der Schublade liegen - damals war es noch eine Suchmaschine in JavaScript.
Das 20 Jahre lange sammeln an Informationen ist übrigens auch der Grund warum jetzt eine Suchmaschine in PHP mit MariaDB notwendig geworden ist.