2

これは実際にはプログラミングの問題ではなく、アルゴリズムの問​​題です。

問題: HTML ページの「コンテンツ」セクションを見つける。

「コンテンツ」とは、ノイズのない、単に「ページの実際のコンテンツ」である、人間が見たページ コンテンツを含む DOM を意味します。問題が明確に定義されていないことはわかっていますが、続けましょう... たとえば、ブログ サイトでは、これは通常簡単です。特定の投稿を閲覧するとき、通常、ページの上部にいくつかのツールバーがあり、おそらくいくつかのナビゲーション要素がありますLHS と、コンテンツを含む div があります。HTML からこれを理解しようとするのは難しい場合があります。幸いなことに、ほとんどのブログには RSS フィードがあり、この特定の投稿のフィードには <description> セクション (または <content:encoded>) があり、これはまさにあなたが望むものです。したがって、コンテンツの定義を洗練するために、これは興味深い部分を含むページ上の実際のものであり、すべての広告、ナビゲーション要素などを削除します. そのため、RSS があれば、ブログからコンテンツを見つけるのは比較的簡単です。他の RSS サポート サイトも同様です。

ニュースサイトはどうですか?多くの場合、ニュース サイトには RSS がありますが、常にではありません。では、ニュース サイトでコンテンツを見つけるにはどうすればよいでしょうか。もっと一般的なサイトはどうですか?多くの Web ページ (もちろんすべてではありません) には、コンテンツ セクションとその他のセクションがあります。「興味深い」セクションとあまり興味のないセクションを見つけるための優れたアルゴリズムを思いつくことができますか? 変わらない部分と変わる部分でしょうか。

私は自分自身を明確にしたことを願っています...ありがとう!

4

2 に答える 2

2

私はこれをしていませんが、これが私の一般的なアプローチです。

ご指摘のとおり、 HTMLの表示可能なコンテンツ部分に構造がない(つまり、、、などのタグがないheader)ということは、ページの重要な部分にたどり着くのが難しいことを意味します。私のアプローチは、最初に、あなたが間違いなく面白くないと判断した明確な要素を削除することです。除外の可能なリストは次のとおりです。navigationads

  • !doctype、などのメタ要素headtitle別のデータとして取得)
  • 、、、などのobject動的要素embedappletscript
  • 画像(それらを保持するかどうかによって異なります)、img
  • フォーム要素form、すなわち、、、、、、、、input_ textarea_labellegendselectoption

div次に、2番目のパスで、一般的に発生する名前またはulID /クラス名、およびその中のすべてのタグ(次のようなもの)を除外し始めることができます。

  • header、、footer_meta
  • nav、、、、navigation_ topnav_sidebar
  • ad、、(および広告に一般的に使用される他の名前adsadu

これにより、ページからかなりの量の装飾が削除されることを願っています。次の課題は、残っているものからメインコンテンツを特定することです。最初は、サイトの作成者がセマンティックHTMLを適切に使用していると想定し、主にh1h2headタグとpparagraphタグを使用していることをお勧めします。

コンテンツを識別するために、ヘッダータグを探し、その後に段落タグが続きます。(これはh2メインコンテンツ用である可能性があります。h1タグはサイト名またはロゴを表示するために頻繁に(そしておそらく間違って)使用されますが、ページのヘッダー部分を除外することでこれが削除されることを願っています。)後続の各段落を追加する必要があります。divまたはtd要素の終わりであるか、開始したのと同じレベルのヘッダー要素である可能性があるブレークに到達するまで、現在のコンテンツに移動します。

ページに収集したコンテンツのセットがまだいくつかある可能性があるため(おそらくメインコンテンツと作成者に関する宣伝文句)、ここで最も可能性の高い候補を選択する意思決定ステップをテストおよび改良する必要があります。これは、使用される段落要素の長さと数の両方の点で、単純に最大になることがよくあります。

コンテンツの例をさらに収集すると、アルゴリズムにサポート手段を追加できます。div id="content"これは、ページの多くがまたはを使用していることに気付いた可能性がありますid="maincontent"。検出したコンテンツの二次アイテムを保持しておくと便利な場合もあります。これにより、特定のサイトでコンテンツを構造化する奇妙な方法がある場合、アルゴリズムにキャッチャーを追加すると、これに対して再実行できます。サイトのコンテンツ。

于 2009-08-11T08:41:46.887 に答える
0

適切に構造化されたサイトには、ナビゲーション、ヘッダーなど、同じコードを再利用する共通の領域があります。

分析したいターゲットページがある場合は、同じドメイン/サブドメインの下にある他のいくつかのページを参照して、すべてのページに共通する要素を見つけてください。それらはあなたが取り除きたいノイズです。

次に、残っているものを調べて、ノイズが入っていないかどうかを確認できます。これらのデータを適度に収集したら、それらのパターンを見つけてください。ロジックを改良して繰り返します。

于 2009-08-19T17:57:00.863 に答える