編集済み、もう一度お読みください。私の作品をいくつか追加しました
私の仕事は、2 つの URL のテンプレートを比較することです。アルゴリズムの準備が整いました。しかし、最終的な答えを出すには時間がかかりすぎます。
JsoupとSeleniumを使用してJavaでコードを作成しました
ここで、テンプレートとは、ページがコンテンツを表示する方法を意味します。
例:-
どのショッピングサイトにも、靴のページがあり、
Images in the left.
Price and Size in the right.
Reviews in the bottom.
2 つの URL が特定の製品のものである場合、「両方とも同じテンプレートからのものです」が返されます。例 、このリンクとこのリンクは同じテンプレートを持っています。
ある URL が製品を示し、別の URL がカテゴリを示している場合、「一致なし」と表示されます。例、このリンクとこのリンクは別のテンプレートからのものです。
このアルゴリズムには最適化が必要だと思うので、この質問をこのフォーラムに投稿しています。
私のアルゴリズム
- 2 つの入力 URL を取得して解析し、それらのDOM ツリーを作成します。
- 次に、ページに 、 UL 、および TABLE が含まれている場合は、そのタグを削除します。2つのページに異なる数のアイテムが含まれている可能性があるため、これを行いました。
- 次に、両方の URL のタグの数をカウントします。たとえば、initial_tag1、initial_tag2 とします。
- 次に、ツリーのノード数が 10 未満の場合、対応するページで同じ位置にあり、同じ ID とその下のサブツリーを持つタグの削除を開始します。
- 次に、ツリーのノード数が 10 未満の場合、対応するページで同じ位置にあり、同じクラス名とそのサブツリーの下にあるタグの削除を開始します。
- 次に、ツリーのノード数が 10 未満の場合、ID がなく、クラス名がなく、サブツリーの下にあるタグの削除を開始します。
- ステップ 4、5、6 の複雑さは (N*N) です。ここで、N はタグの数です。[このように、すべてのステップで DOM ツリーは縮小していきます]
- この再帰から出てきたら、final_tag1 と final_tag2 をチェックします。
- final_tag1 と final_tag2 が initial_tag1*(0.2) と initial_tag2*(0.2) より小さい場合は、そうでない場合はと言えます。
Two URL matched
not
このアルゴリズムについてよく考えてみたところ、DOM ツリーからノードを削除するプロセスはかなり遅いことがわかりました。これが、このアルゴリズムを遅くする原因になっている可能性があります。
私は何人かのオタクから議論しました、そして
彼らは、タグを削除する代わりにすべてのタグにスコアを使用し、それらを追加し、> 最後に (score I Got)/(accumulatedPoints) または同様のものを返すと述べ、それに基づいて、2 つの URL が類似していると判断します。か否か。
しかし、私はこれを理解していませんでした。では、この問題を効率的に解決する、オタクのこのことわざを説明できますか、または他の最適化されたアルゴリズムを教えてください。
前もって感謝します。あなたの親切な対応を求めています。