6

ユーザー エージェントに基づいて携帯電話のデータを返しています。ただし、ユーザーエージェントが保存されていない場合 (新しいバージョンの電話またはソフトウェア) では、Google が「これを意味するかどうか」を表示する方法に少し似た、最も近い一致を返すことができるようにしたいと考えています。すなわち

保存されているユーザーエージェントがある場合

Mozilla/5.0 (Linux; U; Android 2.1-update1; en-nl; Desire_A8181 Build/ERE27) AppleWebKit/530.17 (Gecko のような KHTML) バージョン/4.0 モバイル Safari/530.17

使用中のユーザーエージェントは

Mozilla/5.0 (Linux; U; Android 2.1-update1; en-nl; Desire_G45H Build/ERE27) AppleWebKit/530.17 (Gecko のような KHTML) バージョン/4.0 モバイル Safari/530.17

それに応じてデータを追加または適応するために保存されたものを返すことができるようにしたいです。

これを達成する方法を知っている人はいますか?

4

5 に答える 5

4

最も関連性の高いデータで全文検索を使用...

SELECT * MATCH(browser) AGAINST ('your browser') AS score order by score DESC
于 2011-07-08T09:24:48.433 に答える
2

あいまい文字列一致の通常のアプローチは、レーベンシュタイン距離の計算や、n-gram 検索インデックスとしての実装などです。しかし、ユーザー エージェントを照合する場合、これはやり過ぎです。

むしろ、検索する文字列を特定の重要な基準に減らしてから、次のようにします

SELECT * FROM agents WHERE agent LIKE "Mozilla/5.0 (Linux; U; Android%) AppleWebKit/5% Version/4.0 Mobile Safari/5%"

したがって、特定の詳細すぎる部分を取り除いて、LIKE ステートメントで % に置き換えます。ただし、アーキテクチャを再考する必要があります。重要な部分のみを保存し、正確なビルド番号などは省略します。また、ユーザー エージェントが既に含まれていて、マッチングを行う外部ライブラリを使用することも検討してください。車輪を再発明する必要はありません。

編集: VolkerK が上で指摘したように、「外部ライブラリ」はPHPs getbrowserである必要があります。答えの完全性のために追加されました;-)

于 2011-07-08T09:23:29.917 に答える
0

PHP で 2 つの文字列の違いを強調する のスクリプトの 1 つを見てください。いくつかの変更を加えれば、違いのパーセンテージを取得できるはずです。

于 2011-07-08T09:21:27.190 に答える
0

全文検索を使用します。それ以外の場合は、次の関数が役立つ場合があります。

于 2011-07-08T09:28:54.207 に答える
0

最良の結果を得るには、レコード全体を抽出し、サイクルを実行して、最も類似した単語を推測します。

これらの機能を確認してください

SIMILAR_TEXT

サウンドデックス

レーベンシュタイン

IE

$most_similar = "";
$highestPercentage = 0;
foreach ($ua in $all_user_agents) {
    $i = similar_text($current_user_agent, $ua, &$p);
    if ($p > $highestPercentage) {
        $highestPercentage = $p;
        $most_similar = $ua;
    }
}

echo "most similar = $most_similar"

とにかく、このようないくつかのガイドラインに従って、mySQL 全文検索を使用できます

于 2011-07-08T09:29:55.977 に答える