0

だから、私はPHP + MySQLを持っています。列を調べて、title最も類似した文字列を見つけています。

データベースで最も類似した文字列を見つけて、それらを類似度順に並べ替えるにはどうすればよいですか?

4

4 に答える 4

2

PHP 関数levenshteinを使用して、文字列間のレーベンシュタイン距離を取得できます。

レーベンシュタイン距離は、文字列がどの程度異なるか (逆に、どの程度類似しているか) の尺度です。3 つの文字列があるとします。

  • スポットランを見る
  • スポットランを見る
  • こんにちは私の名前はジョンです

レーベンシュタイン距離を使用すると、次の結果が得られます。

See spot run - See spot run: 0
See spot run - Watch spot run: 5
See spot run - Hello my name is John: 17

Watch spot run - See spot run: 5
Watch spot run - Watch spot run: 0
Watch spot run - Hello my name is John: 18

Hello my name is John - See spot run: 17
Hello my name is John - Watch spot run: 18
Hello my name is John - Hello my name is John: 0

ご覧のとおり、類似した文字列ほどレーベンシュタイン距離が小さくなります。比較するすべての文字列間で結果を保存する必要があるため、このソリューションは常に実用的ではありません。したがって、すでに 1000 件のレコードがある場合、新しいレコードを作成するときに、他のすべての文字列と比較して新しい文字列の結果を取得する必要があります。その後、これらのスコアを SQL クエリで使用できます。

これはあなたにとって最善の解決策ではないかもしれませんが、誰も言及していなかったので、そうすると思いました。

文字列の類似性については、他のいくつかの興味深い PHP 関数を参照することもできます。

  • similar_text — 2 つの文字列間の類似度を計算する
  • soundex — 文字列の soundex キーを計算する
于 2013-01-26T23:54:44.220 に答える
0

本当に何をしたいのかわかりませんが、タイトル列で最も類似したテキストを見つけるクエリを探していると思います。

それが本当なら、それは助けることができます:

SQL

SELECT * FROM yourTable where table LIKE '%searchedText%'

この場合%、あなたが含むものを見つけることを意味しますsearchedText

于 2013-01-26T23:17:00.190 に答える
0

ここでSELECT LIKE クエリを使用する必要があります。これに関するドキュメントがあります。

于 2013-01-26T23:15:04.673 に答える
0

最も簡単な方法は、SQL クエリで LIKE を使用することです。

WHERE column_name LIKE '%string%'

空白を「%」に置き換えて、より効果的にすることができます。私はそれを正しい方法とは呼びませんが、あなたの質問を考えるとそれで十分です。

于 2013-01-26T23:16:00.863 に答える