16

私の問題を説明します:

というデータベース テーブルがありますcountry。と の 2 つの列がIDありnameます。

を検索したい'paris'が、単語のスペルを間違えた場合: 'pares'('e'の代わりに'i')、DB から結果が得られません。

検索に役立つ類似の単語をシステムに提案してもらいたい。

そのため、パリ、パレデスなどの類似した単語を含む DB からの提案を行うスクリプトを作成するためのヘルプを探しています。

4

5 に答える 5

23

PHP では、metaphoneより正確に使用する必要がありますsoundex

しかし、問題はデータベースからデータを取得することです。DBについて言及していません。MySQL では、関数を利用できますSOUNDEX。クエリの where 句を次のように変更するだけです。

...where city = '$input_city'

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

またはさらに良いことに、SOUNDS LIKE演算子を次のように使用できます

... where city sounds like '$input_city'
于 2010-10-15T06:43:53.427 に答える
10

soundexは、その音を表す単語の数値コードを返します。似たような単語は、同じ soundex コードを持ちます。単語とその soundex コードを含む表を作成して、類似した発音の単語を検索することができます。次に、レーベンシュタイン距離を使用してそれらを並べ替えることができます。

より単純なものを探していて、DB クエリのタイプミスを処理したいだけの場合は、次のことができます。

select * from country where city SOUNDS LIKE 'Paris'それ以外のselect * from country where city='Paris'

于 2010-10-15T06:41:57.580 に答える
5

基本的に、データベースから結果が得られない場合は、名前の有効な配列に対して類似性をチェックする必要があります。

私の考え:

  • ユーザーが名前を検索している
  • 正確な結果はありません
  • データベースからすべての名前を取得します
  • レーベンシュタインを使用して、ユーザーが返す最も正確なヒントを計算します
于 2010-10-15T06:40:39.913 に答える
2

MySQL を使用している場合は、カンマで区切られた列のリストが指定され、照合する文字列が指定されるMATCH() AGAINST()ステートメントを使用する必要があります。このステートメントは、一致の関連性 (0 から 1 の間) を返します。これを使用して、行を返すかどうかを決定できます。MATCH()FULLTEXTAGAINST()

詳細については、MySQL サイトを参照してください。

編集: 適切な提案は良いアイデアですが、特定のスペルミスは単語の発音を完全に変更するため、その方法を使用すると適切な提案を提供できない場合があります。

于 2010-10-15T06:46:27.770 に答える
2

PHP の内部メソッドのほとんどは既にカバーされているため、非常に便利な Yahoo Boss Spelling Suggestion Service を参照することもできます -> http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html

于 2010-10-15T07:21:20.200 に答える