2010-10-15 8 views
14

Ich werde mein Problem zu erklären:Wie finden Sie ein ähnliches Wort für eine falsch geschriebene in PHP?

Ich habe eine Datenbanktabelle country genannt. Es hat zwei Spalten: ID und name.

Als ich nach 'paris' gesucht werden soll, aber das Wort falsch geschrieben: 'pares' ('e' statt 'i'), werde ich kein Ergebnis von DB erhalten.

Ich möchte das System ähnliche Wörter vorschlagen, die bei der Suche helfen könnten.

Also, ich bin auf der Suche nach Hilfe, ein Skript zu schreiben, die Vorschläge aus dem DB, enthalten ähnliche Worte wie macht: paris, Paredes, ... etc.

Antwort

20

In PHP sollten Sie metaphone es verwenden, ist genauer als soundex.

Aber Ihr Problem ist, die Daten aus der Datenbank zu bekommen. Du hast die DB nicht erwähnt. In MySQL können Sie die SOUNDEX Funktion verwenden. Sie müssen nur von

...where city = '$input_city' 

zu

... where soundex(city) = soundex('$input_city') 

Ihre where-Klausel in der Abfrage ändern oder noch besser Sie SOUNDS LIKE Operator als

... where city sounds like '$input_city' 
+0

** Hinweis **: 'soundex' für gut Englische Wörter und ganze Zahlen, aber andere Sprachen Problem. – Eray

+0

@codaddict Gibt es eine Möglichkeit, nach Relevanz zu bestellen? –

4

Grundsätzlich müssen Sie Ähnlichkeit gegen ein gültiges Array überprüfen von Namen, wenn Sie keine Ergebnisse von Ihrer Datenbank erhalten haben.

Meine Idee:

  • Benutzer suchen einen Namen
  • keine genauen Ergebnisse
  • alle Namen Fetch von db
  • levenshtein Mit der exakteste Spitze berechnen für Benutzer
9
zurückzukehren

soundex wird einen numerischen Code für ein Wort zurückgeben, das seinen Sound darstellt. Wörter, die ähnlich klingen, haben denselben Soundex-Code. Sie könnten eine Tabelle mit Wörtern und ihren Soundex-Codes haben, mit denen Sie ähnlich klingende Wörter nachschlagen können. Sie könnten sie dann unter Verwendung ihrer levenshtein Entfernung sortieren.

Wenn Sie suchen etwas einfacher und Sie wollen einfach nur Tippfehler in Ihrer DB Anfragen bearbeiten, können Sie

select * from country where city SOUNDS LIKE 'Paris' tun statt select * from country where city='Paris'

2

verwenden können, wenn Sie MySQL verwenden, Sie möchten eine MATCH() AGAINST()-Anweisung verwenden, wobei MATCH() eine durch Kommas getrennte Liste von FULLTEXT Spalten enthält und AGAINST() is giv En Ihre Zeichenfolge, gegen die zu passen. Die Anweisung gibt die Relevanz Ihrer Übereinstimmung (zwischen 0 und 1) zurück, mit der Sie bestimmen können, ob Zeilen zurückgegeben werden sollen oder nicht.

Weitere Informationen über die MySQL site.

Edit: die Sound-Vorschläge sind gute Ideen, aber bestimmte Rechtschreibfehler werden die Aussprache eines Wortes vollständig ändern und daher können Sie möglicherweise keine guten Vorschläge machen, wenn Sie diese Methode verwenden.