1

Web アプリの開発で問題に直面しています。説明は次のとおりです。

この Web アプリ (まだアルファ版) は、ユーザー生成コンテンツ (通常は短い記事ですが、長さが画面の約 4 分の 1 と非常に長くなる可能性があります) に基づいており、すべてのユーザーがこれらの記事を少なくとも 10 件送信するため、その数は急速に増加するはずです。性質上、約 10% の記事が複製されるため、それらを取得するためのアルゴリズムが必要です。

次の手順を思いつきました。

  1. 送信時にテキストの長さを取得し、それを別のテーブル ( ,length) に保存します。問題は、記事が PHP のspecial_entities article_id() 関数を使用してエンコードされ、ユーザーがコンテンツをわずかに変更して投稿することです (コンマ、アクセント、またはいくつかの単語を飛ばしても)
  2. 次に、長さの範囲 = +/- 5% のデータベースからすべてのエントリを取得しますnew_post_length(記事の送信に関する人的要因を念頭に置いて、別のしきい値を使用する必要がありますか?)
  3. 最初の 3 つのキーワードを取得し、手順 2 で取得した記事と比較します
  4. 最も可能性の高い一致を含む最終的な配列を取得し、PHP の levenstein() 関数を使用して新しいエントリを比較します

このプロセスは、cron を使用するのではなく、記事の送信時に実行する必要があります。ただし、サーバーに大きな負荷がかかると思います。

アイデアを教えてください。

ありがとうございました!マイク

4

3 に答える 3

1

テキストの類似性/盗作/重複は大きなトピックです。非常に多くのアルゴリズムとソリューションがあります。

あなたの場合、Lenvensteinは機能しません。小さなテキストでのみ使用できます (その「複雑さ」により、CPU が死んでしまいます)。

一部のプロジェクトでは、「キーワードの適応型ローカル アラインメント」が使用されています (これに関する情報は Google で見つけることができます)。

また、これを確認できます(回答の3つのリンクを確認してください。非常に有益です):

コサイン類似度とハミング距離

これが役立つことを願っています。

于 2009-09-13T04:29:59.923 に答える
0

同じカテゴリの他のすべての投稿に対してテキスト文字列とキーワードをチェックする必要がないため、負荷を軽減するようにアプリを設計できます。ユーザーが参照しているサードパーティのコンテンツをURLとして送信した場合はどうなりますか?Tumblrの実装を参照してください-基本的に、各ユーザーがコメントして投稿コンテンツの独自の物語部分を作成できるように自由形式のテキストフィールドがありますが、ユーザーが追加している参照のタイプに応じてフォーマットされたフィールドもあります(ビデオ、画像、リンク、引用など)Tumblrの改善により、ユーザーは任意の投稿に必要な数のフォーマットされたコンテンツを追加できるようになります。

次に、URLや埋め込みビデオコードなどの既知のタイプに対してのみチェックします。これをrexemの提案と組み合わせて、ユーザーにある種のカテゴリまたはジャンルで分類するように強制すると、重複を検索する範囲がはるかに狭くなります。

また、各ユーザーに独自の「ストリーム」に投稿する方法を提供できれば、多くの人が同じコンテンツを複製するかどうかは問題ではありません。個々のストリームからメインの「フロントページ」レベルのストリームに投票する方法を人々に提供して、コミュニティが重複アイテムを表示したときに規制できるようにします。DiggやRedditのように賛成/反対票を投じる代わりに、関連する投稿に投稿をマージ/追加する方法を追加できます(コンテンツをアプリのアクティビティとして並べ替えて管理できるようにするのではなく、シーン処理)。

于 2009-09-12T21:45:15.793 に答える
0

gitバージョン管理システムである には、重複またはほぼ重複するコンテンツを検出するための優れたアルゴリズムがあることを指摘したいと思います。コミットすると、変更されたファイル (名前の変更に関係なく) と、変更されたパーセンテージが表示されます。

これはオープン ソースであり、大部分は小規模で焦点を絞った C プログラムで記述されています。使えそうなものがあるかもしれません。

于 2009-09-12T21:09:42.027 に答える