Suchmaschinen-Schlüsselwörter Parser

8

Hier ist was ich tun möchte:

Ich muss einen Suchmaschinen-Parser erstellen, der die folgenden Operatoren verwendet:

  • Äpfel UND Orangen (UND-Operator)
  • Äpfel OR Orangen (OR-Operator)
  • Äpfel UND NICHT Orangen (UND NICHT Operator)
  • " Äpfel " (Angebotsoperator)
  • Äpfel UND ( Orangen ODER Birnen ) (Operator "Klammern")
  • Appl * (Sternoperator)

Mit einigen preg_replace, ich bearbeite die Zeichenfolge in ein Array und dann analysierte ich dieses Array, um eine MySQL-Abfrage zu erhalten. Aber ich mag das nicht und es ist sehr instabil!

Ich habe im Internet nach einem Skript gesucht, das das tut und ich hatte kein Glück!

Kann mir bitte jemand helfen, das umzusetzen?

Danke

    
Kostas 29.07.2011, 11:26
quelle

5 Antworten

3

Ok, das wird eine große Antwort sein.

Ich denke, was Sie brauchen, ist ein Parser-Generator. Eine Software, die Code generiert, um Text nach einer bestimmten Grammatik zu analysieren. Diese Parser haben oft zwei Hauptkomponenten: einen Lexer und einen Parser. Der Lexer identifiziert TOKENS (Wörter), der Parser prüft, ob die Token-Reihenfolge entsprechend Ihrer Grammatik stimmt.

Im Lexer sollten Sie die folgenden Token deklarieren:

%Vor%

Die Grammatik sollte wie folgt definiert werden:

%Vor%

Diese Grammatik definiert eine Sprache mit allen Funktionen, die Sie benötigen. Abhängig von der verwendeten Software können Sie Funktionen zur Behandlung der einzelnen Regeln definieren. Auf diese Weise können Sie Ihre Textabfrage in eine sql where-Klausel umwandeln.

Ich bin nicht wirklich auf PHP, aber ich suchte im Internet nach einem Parser-Generator und PHP_ParserGenerator erschien.

Beachten Sie, dass diese Abfragen zu einem Problem für ein strukturiertes Speichersystem werden können, solange Ihre Datenbank wächst.

Vielleicht möchten Sie eine Volltext-Suchmaschine ausprobieren, mit der Sie diese und viele andere Funktionen zur Textsuche ausführen können. So funktioniert IndexTank

Zuerst fügen Sie alle Ihre db-Datensätze (oder Dokumente) zu IndexTank hinzu (oder "indexieren" im Suchdialekt).

%Vor%

Danach können Sie im Index nach allen gewünschten Operatoren suchen

%Vor%

Ich hoffe, ich habe Ihre Frage beantwortet.

    
Leandro 01.08.2011 19:31
quelle
1

Auch das ist nicht genau das, was Sie suchen, aber vielleicht nah dran: MySQL-Volltextsuche .

neokio 29.07.2011 12:03
quelle
0

Haben Sie sich ANTLR

angesehen?     
Anantha Sharma 29.07.2011 11:41
quelle
0

Sie könnten Homebrew wie folgt schreiben ( WICHTIG: $search string muss zuerst bereinigt werden oder Sie werden gehackt) ...

%Vor%     
neokio 29.07.2011 11:53
quelle
-1

Versuchen Sie Folgendes: Ссылка

Aus Readme:

  • Suchvorgänge werden normalerweise mit "may contains" -Wörtern durchgeführt. Eine Übereinstimmung erfordert, dass eines der eingegebenen Wörter auf der Seite vorhanden ist.
  • Sie können nach Seiten suchen, die ein bestimmtes Wort enthalten, indem Sie ihnen ein Pluszeichen (+) voranstellen. Es werden nur Seiten angezeigt, die dieses Wort enthalten.
  • Sie können alle Seiten ignorieren, die ein bestimmtes Wort enthalten, indem Sie ihnen ein Minuszeichen (-) voranstellen. Jede Seite, die dieses Wort enthält, wird in den Suchergebnissen nicht angezeigt.
  • Sie können nach einem bestimmten Ausdruck suchen, indem Sie ihn in doppelte Anführungszeichen (") setzen. Es werden nur Seiten angezeigt, die diesen genauen Ausdruck enthalten.

Es ist einfach zu installieren und zu verwenden. Werfen Sie auch einen Blick auf Ссылка - die mächtigste Engine, aber nicht für Neulinge.

    
silex 29.07.2011 11:43
quelle