Tanja: Volltextsuche mit AND, OR, NOT, " in Strings

Moin

ist euch eine praktische PHP-Klasse oder ein Open Source Projekt bekannt, welches eine String (nicht MySQL) Volltextsuche mit den üblichen Operationen AND/OR/NOT/"..." implementiert?

Leider ist es schwierig danach zu suchen, weil Google bei den Keywords andere Seiten ausspuckt :-( oder nur für MySQL Fulltext Search Infos bereithält :-/

Vielen Dank

  1. ist euch eine praktische PHP-Klasse oder ein Open Source Projekt bekannt, welches eine String (nicht MySQL) Volltextsuche mit den üblichen Operationen AND/OR/NOT/"..." implementiert?

    Warum programmierst du dir nicht selbst etwas - dürfte mit etwa 10 bis 15 Zeilen erledigt sein, wenn du AND, OR, NOT und "" bzw () implementieren willst.

    1. ...das Rad nicht neu erfinden...

      Warum programmierst du dir nicht selbst etwas - dürfte mit etwa 10 bis 15 Zeilen erledigt sein, wenn du AND, OR, NOT und "" bzw () implementieren willst.

      Sorry, aber den Aufwand schätz ich deutlich höher ein.
      Allein schon den passenden Regexp zu finden, um den String in Wörter zu zerlegen unter Berücksichtigung der Sonderzeichen, Umlaute, - etc., die teilweise zum Wort dazugehören, manchmal aber nicht.
      Dann die Toleranz bei "", sodass "TV Sendung" auch bei "TV-Sendung" und "TVSendung", "TV/Sendung" u.ä. greift.
      Dann noch Zusätze wie "Spiel" und "Spiele" oder Game/s, wobei mir hier gerade nicht der Fachbegriff für das Feature einfällt usw.

      Für Python find ich jede Menge fertige Bibliotheken, die das mit sich bringen. Bei PHP nur immer den Hinweis zu MySQL.

      1. Sorry, aber den Aufwand schätz ich deutlich höher ein.

        Das kommt daher, dass du nicht definierst, was du eigentlich willst und plätzlich Dinge dazuerfindest, von denen zu Beginn keine Rede war.

        Allein schon den passenden Regexp zu finden, um den String in Wörter zu zerlegen unter Berücksichtigung der Sonderzeichen, Umlaute, - etc., die teilweise zum Wort dazugehören, manchmal aber nicht.

        Warum solltest du das tun wollen? Einerseits: warum ein regulärer Ausdruck? strpos() tuts auch um Zeichenketten in einer anderen zu finden. Das ganze in eine Schleife verpackt und gut ist.

        Dann die Toleranz bei "", sodass "TV Sendung" auch bei "TV-Sendung" und "TVSendung", "TV/Sendung" u.ä. greift.

        Das hattest du nicht erwähnt - zudem kenne ich keine SQL-Implementierung, die das könnte - die gängige Bedeutung von "foo bar" ist, dass der Inhalt als literal betrachtet wird, aber auch das ist vergleichsweise trivial - daraus einen regulären Ausdruck zu bauen ist easy, einfach alle Leerzeichen durch "kein Wort-Zeichen" ersetzen und fertig, 1 Zeile.

        Dann noch Zusätze wie "Spiel" und "Spiele" oder Game/s, wobei mir hier gerade nicht der Fachbegriff für das Feature einfällt usw.

        Zeig mir eine SQL-Implementierung die Kasus, Flexionen oder ähnliches (besonders in der deutschen Sprache) richtig beachtet.

        Dieses Feature umzusetzen ist eine Lebensaufgabe.

        Für Python find ich jede Menge fertige Bibliotheken,

        Eine Bibliothek die bei der Eingabe von "Spiel" auch "Spiele" findet ist trivial, das macht strpos() bereits, eine die anstatt "dumm" auch "dümmer" ebenfalls - man muss nur ein bisschen arbeiten, aber eine die anstatt "dümmer" auch "dumm" oder anstatt "Spiele" auch "Spiel" findet ist eine Lebensaufgabe, da in sämtlichen Sprachen sämtliche Wortformen eines Wortstamms erfasst sein müssen, um das zu abstrahieren (zumindest jene, für irgendwelche Sonderfälle).

        1. strpos würde bei der Suche nach "und" auch "hunde" als positiven Treffer deuten.
          Für MySQL lässt sich das mit den Grundformen der Wörter sehr einfach mit der Erweiterung namens Stemmer lösen. Aber ich werd doch jetzt nicht erst den String in ne MySQL Tabelle reinladen damit darin gesucht werden kann.

          1. Für MySQL lässt sich das mit den Grundformen der Wörter sehr einfach mit der Erweiterung namens Stemmer lösen.

            Stemming-Klassen gibts auch für PHP genug - Google hilft. Dranhängen an die genannten 15 Zeilen, dann sinds halt 16.

            Für die englische Sprache musst du etwa 25 kB rechnen - Deutsch ist bereits wesentlich komplexer, an andere Sprachen lassen wir mal außen vor.