1

ウェブサイトの検索に新機能を追加したい。PHPとMySQLを使用しています。ユーザーが検索するアイテムのテーブルを含むMySQLデータベース。各アイテムには、コンマで区切られたキーワード「EXAMPLE:cat、dog、horse」である「keyword」列があります。私のウェブサイトでユーザーが検索した後、彼の検索キーワードに類似した「85%」と言わせる単語を取得したいのですが、これは検索を再定義するためのものです。また、つづりの間違いについては、キーワードが正しいかつづりが間違っているかを提供するサービスなどが必要なので、修正を取得してデータベースに存在するかどうかを確認し、ユーザーに修正を加えて検索キーワードを変更します。

私はここで解決策を求めているのではありません...しかし、あなたが何らかの方法で私を導くことができれば、それは素晴らしいことです。

4

4 に答える 4

1

重要なのは、「85%類似」というあなたの考えにあります。ここにいくつかのアイデアがあります:

類似語表

キーワードの一般的なスペルミスを一覧表示するテーブルを定義できます。次に、データベースを検索する方法を拡張して、一般的なスペルミスを適切な値にマッピングする必要があります。

類似の単語の検索

検索を実行するときは、ライブラリを使用して類似した単語を生成し、それらすべてを検索します。検索を送信する前に、任意の種類のスペルライブラリを使用して、一致する可能性のある単語を生成できます。または、距離の編集アルゴリズムに基づいて独自に作成します。

必要な場合にのみ確認してください: PHPを使用しているため、pspellを検討することをお勧めします。最初に電話pspell_checkして、単語のスペルが正しいかどうかを確認できます。次に、電話pspell_suggestして提案を取得します。

例については、このリンクを参照してください。

データベース機能を使用する

たとえば、MySQLにはSOUNDS_LIKE演算子があります。検索しWHERE keyword SOUNDS_LIKE 'kat'て(おそらく)取得できcatます。詳細については、ドキュメントページを参照してください。このページでは、いくつかの制限(英語とUTF-8のみなど)について警告しています。


それはかなり一般的な問題のように聞こえるので、おそらくこの問題に対する他のより標準的な解決策があります。おそらく、これを抽象化できる、使用している言語(またはデータベースインターフェイス層)に固有の何かがあります。

最初の2つは、85%の類似性の概念を満たすことができるはずです。3番目のオプションがどれだけうまく機能するかはわかりませんが、「soundzkool」です。

于 2010-05-07T12:23:37.870 に答える
1

PHPにはsimilar_text()がありますが、それはクエリの後です。MySQLで全文検索をチェックすることもできます。

于 2010-05-07T12:31:52.803 に答える
1

Edit Distance Algorithm を調べてみてください。基本的に 2 つの入力文字列の場合、戻り値は、1 つの文字列を別の文字列に変換するために必要な編集の最小数です。これにより、2 つの文字列がどれだけ近いかがわかります。

距離を編集

于 2010-05-07T12:52:01.997 に答える
0

Apache Solr はオープン ソースの検索プラットフォームであり、全文検索機能だけでなく、組み込みのマッチング スコアや自動提案システムなど、多くの強力な機能を備えています

サイトの情報量が十分でない場合、このオプションは不当に聞こえるかもしれませんが、少なくともチェックアウトすることをお勧めします.

アプリと Solr 間の通信は、標準の REST インターフェイスを介して処理できます。私の知る限り、現時点で利用可能な2つの優れたSolr固有のPHPライブラリがあります。

サーバーのセットアップは非常に簡単です。必要に応じて Solr を調整および最適化するのは骨の折れる部分 (興味深い部分でもあります) です。

于 2010-05-07T12:45:14.637 に答える