Wie „neu zu definieren suchen“ oder zu korrigieren „Rechtschreibfehler“ aus der Datenbank

StackOverflow https://stackoverflow.com/questions/2788192

  •  04-10-2019
  •  | 
  •  

Frage

ich will neue Funktion zur Suche in meiner Website hinzuzufügen. Ich bin mit PHP und MySQL. MySQL-Datenbank eine Tabelle, um die Elemente enthält, die der Benutzer für die Suche wird für jedes Element eine Spalte „Keyword“ ist, dass das Komma keywords „Beispiel: Katze, Hund, Pferd“ getrennt. nachdem der Benutzer Suche in meiner Website mag ich die Worte erhalten, die ich „85%“ ähnlich wie seine Suche Stichwort sagen werden lassen, ist dies für neu zu definieren suchen. und für Rechtschreibfehler möchte ich eine Dienstleistung oder etwas, das zur Verfügung stellen, wenn das Schlüsselwort richtig oder falsch geschrieben ist, so habe ich einige Korrekturen erhalten und prüfen, ob die in der Datenbank vorhanden ist und dann diese Korrekturen Benutzer geben zu seiner Suche Stichwort zu ändern.

Ich frage nicht nach einer Lösung hier ... aber wenn Sie mich in einer Art und Weise steuern können oder ein anderes, das wird groß sein

Danke Jungs

Prost

War es hilfreich?

Lösung

Der Schlüssel ist in der Idee von „85% ähnlich“. Hier sind einige Ideen:

ähnliche Worte Tabelle

Sie können eine Tabelle definieren, wo Sie häufige Rechtschreibfehler für Ihre Keywords auflisten. Sie werden dann vermehren müssen, wie Sie die Datenbank durchsuchen häufige Rechtschreibfehler auf den richtigen Wert zu kartieren.

ähnliche Worte Lookup

Wenn Sie die Suche durchführen, verwenden Sie eine Bibliothek ähnliche Wörter zu generieren und für alle von ihnen suchen. Sie können jede Art von Rechtschreibung Bibliothek verwenden, um mögliche Wort Matches zu erstellen, bevor Sie die Suche zu schicken. Oder schreiben Sie Ihre eigenen basierend auf der bearbeiten Entfernung Algorithmus.

Nur überprüfen, wenn nötig: Da Sie PHP verwenden, können Sie prüfen, pspell. Sie können zunächst pspell_check anrufen, um zu sehen, ob das Wort richtig geschrieben ist. Dann pspell_suggest rufen Vorschläge zu erhalten.

Siehe diesen Link für ein Beispiel.

, um eine Datenbank-Funktion verwenden

MySQL, hat zum Beispiel einen SOUNDS_LIKE Operator. Sie können für WHERE keyword SOUNDS_LIKE 'kat' und (vermutlich) get cat suchen. Weitere Informationen auf der Dokumentations-Seite , die warnt vor einigen Einschränkungen (wie Englisch und UTF-8 nur).


Es klingt wie ein recht häufiges Problem, vielleicht gibt es andere mehr kanonische Lösungen für dieses Problem. Vielleicht ist es an der Sprache etwas Bestimmtes Sie (oder in der Datenbank-Interface Layer) verwenden, das abstrahieren kann dies für Sie.

Die ersten beiden sollte Ihnen ermöglichen, eine Vorstellung von 85% Ähnlichkeit zu erfüllen. Ich habe keine Ahnung, wie gut die dritte Option wird funktionieren, aber es „soundz kool.“

Andere Tipps

Es gibt similar_text () in PHP, aber das ist nach der Abfrage; Sie könnte auch die Volltextsuche in MySQL überprüfen.

Versuchen Sie, in den Edit-Distanz-Algorithmus suchen. Im Grunde genommen für zwei Eingänge strings, ist der Rückgabewert die minimale Anzahl der Änderungen benötigt eine Zeichenkette in die andere zu transformieren. Das kann Ihnen eine Vorstellung darüber, wie nahe zwei Strings sind.

bearbeiten Entfernung

Apache Solr ist eine Open-Source-Suchplattform, die nicht nur mit Volltextsuche, sondern auch mit einer in der passenden Partitur und Autosuggestion Systeme, unter vielen anderen: leistungsstarke Funktionen .

Wenn die Menge an Informationen, die in Ihrer Website nicht signifikant genug ist, kann diese Option ungebührliche klingen, obwohl ich es zumindest überprüfen empfehlen würde.

Die Kommunikation zwischen Ihrer Anwendung und Solr kann über eine Standard-REST-Schnittstelle abgewickelt werden. AFAIK gibt es zwei gute Solr spezifische PHP-Bibliotheken zur Zeit zur Verfügung:

den Server einrichten ist ziemlich geradlinig, wobei der mühsame Teil (wie auch die interessant), dass der Tuning und Optimierung von Solr optimal an Ihre Bedürfnisse anzupassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top