2009-08-04 6 views
2

これは実際にプログラミング上の問題ではなく、アルゴリズム上の問題です。HTMLセクション文書の内容を見つける

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

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

ニュースサイトはどうですか?多くの場合、ニュースサイトはRSSを持っていますが、必ずしもそうではありません。その後、ニュースサイトのコンテンツをどのように見つけますか? より一般的なサイトはどうですか?多くのWebページ(もちろんそのすべてではない)には、コンテンツセクションやその他のセクションがあります。 「興味深い」v/sのセクションを見つけ出すための良いアルゴリズムを考えてみませんか?おそらく変化しないセクションから変化するセクションでしょうか?

希望私は自分自身を明確にしました...ありがとう!

+0

ウェブ上のページの大半は、「面白い部分」を見つけるのにうまくいきます。 –

+0

これは難しい質問です。雑音から「興味深いコンテンツ」を識別することが容易だった場合、Adblockが広告をブロックするのと同じように、誰もが「ノイズ」フィルタを使用していました。通常、ユーザーが見ているもの(基本的にマークアップやスクリプトロジックを取り除いたhtmlファイルのコンテンツ全体)には "情報"が含まれている可能性があり、これはhtmlToTextコンバータを使用して抽出できます。これを行うには、www.htmlparser.orgのStringBeanクラスを使用できます(java)。 – hashable

答えて

2

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

あなたが示すように、HTMLの可視コンテンツ部分における構造の欠如は(すなわち、それは、そのようなheadernavigationadsなどのタグを持っていない)、それはページの重要な部分の中に家に困難であることを意味します。私のアプローチは、あなたが間違いなく面白くないと決めた別個の要素を最初に削除することです。除外の可能なリストがあってもよい:例えば、そのようなobjectembedappletscript

  • 画像として!doctypehead(データの別個の部品としてtitleを取る)
  • 動的要素として

    • メタ要素(保持したいかどうかに応じて)、img
    • フォーム要素

        :第二のパスは、その後のような divul ID /クラス名、およびその中のすべてのタグを、発生した一般的に排除するために始めることができ option

      forminputtextarealabellegendselect

    • headerfootermeta
    • navnavigationtopnavsidebar
    • adadsadu(一般的に広告に使用され、他の名前)

    これがうまくいけばページから装飾を大量に削除されます。次の課題は、何が残っているかで主なコンテンツを特定しようとすることです。サイトの作者がセマンティックHTMLを正しく使用していると仮定し、主にh1,先頭タグとp段落タグを使用していると仮定します。

    コンテンツを識別するために、ヘッダータグを探してから段落タグを探します。 (これはあなたのメインコンテンツにはh2であるかもしれません; h1タグはサイト名やロゴを表示するためによく使われますが間違いなく間違っていますが、これはページのヘッダー部分を除外することでうまくいきます)ブレークポイントに達するまで、現在のコンテンツに追加することができます。これは、divまたはtd要素の末尾か、開始元と同じレベルのヘッダー要素です。

    あなたがページ(主なコンテンツと著者についての多分多分かもしれません)に集まったいくつかのコンテンツがまだあるかもしれないので、ここで意思決定のステップをテストして洗練させる必要があります可能性のある候補者。これは、使用される段落要素の長さと数の両方の点で、単に最大であることがよくあります。

    コンテンツのサンプルを集める際に、アルゴリズムにサポート尺度を追加できます。これは、多くのページがdiv id="content"またはid="maincontent"を使用していることに気づいた可能性があります。検出されたコンテンツの二次的なアイテムを保持することも有益です。特定のサイトでコンテンツを構成する好奇心が強い方法がある場合、アルゴリズムにキャッチャーを追加すると、これに対して再実行できます。サイトのコンテンツ

  • +0

    ありがとう、長さの返信のために、私はあなたが持っているアイデアの少なくともいくつかを使用すると思います。私は可能な限りヒューリスティックを避けようとしてきましたが、私はエスケープがないことを認識し始めます... – Ran

    +0

    これは問題の一部であり、HTML仕様の成功であり、一般的であるということは十分ではない今日のウェブサイトで要求される複雑な情報の提供(シンプルで学術的なテキストと比較して)を意味的に豊富に含む。私はまだnavタグがページの大部分を分離することに大いに役立ったと思います... –

    0

    よく整えられたサイトは、同じコードを再利用する共通の領域を持ちます。ナビゲーション、ヘッダーなど

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

    次に、何が残っているかを見て、ノイズが入り込んでいるかどうかを調べることができます。これらのデータを妥当な量で収集したら、それらのパターンを見つけようとします。あなたのロジックを洗練し、繰り返す。

    関連する問題