4

私は写真のウェブサイトを運営しており、ユーザーは以前に使用したことのないタグも含め、好きなタグを自由に入力できます。その結果、タグの写真が「昆虫」としてタグ付けされ、他の誰かが「昆虫」としてタグ付けされる場合があります。

フリータグ機能を維持したいのですが、そのようなほぼ重複するものを除外する方法が必要です。タグの合計コレクションは現在1,500です。私の考えは、それらすべてをDBからmemに読み込んでから、「容疑者」を表示するアルゴリズムを実行することです。

容疑者の私の考えは、文字列内の文字のx%が同じ(同じ文字と順序)であり、xは構成可能であるということです。私はおそらくこれを行うための本当に非効率的な方法をコーディングすることができますが、この問題に対する既存の解​​決策があるかどうか疑問に思っていましたか?

編集:言及するのを忘れました:タグを並べ替えるだけでは十分ではありません。重複を見つけるためにセット全体を調べる必要があるからです。

4

4 に答える 4

2

あなたの論理にはいくつかの欠陥があります。たとえば、オブジェクトの複数形が単数形と異なる場合 (つまり、人対人、またはキャンディー対キャンディーなど) はどうなるでしょうか。

英語が第一言語である場合は、音声一致を可能にするSoundexをチェックしてください。また、ユーザーが既存のタグへのリンクを作成できる、クラウドソーシングによる同義語モデルの使用も検討してください。

于 2011-09-20T19:14:03.003 に答える
2

おそらく、探しているアルゴリズムは近似文字列マッチングです。 http://en.wikipedia.org/wiki/Approximate_string_matching .

与えられた単語によって、それを単語のリストに一致させることができ、「距離」が近い場合は容疑者に追加します。

迅速な実装は、Needleman–Wunsch アルゴリズムのような動的計画法を使用することです。マトリックス文字ルックアップ ファイルを使用して「距離」を構成できる C# で、このブログの例を作成しました。 http://kunuk.wordpress.com/2010/10/17/dynamic-programming-example-with-c-using-needleman-wunsch-algorithm/

于 2011-09-21T10:22:25.207 に答える
0

「どちらかを含む」でいいですか?画像がデータベースにある場合は、次のような SQL クエリを実行できます (意味があるだけです)。

SELECT * FROM ImageTags WHERE INSTR('theNewTag', TagName) > 0 OR INSTR(TagName, 'theNewTag') > 0 LIMIT 1;
于 2011-09-20T19:14:07.830 に答える