2


5

ブログや他のWebページからインテリジェントにタグを抽出する

私はHTMLタグについて話しているのではなく、ブログの投稿、YouTubeビデオ、またはこのサイトの質問を記述するために使用されるタグです。

1つのWebサイトのみをクロールする場合、xpathを使用してタグを抽出するか、単純な場合は正規表現を使用します。 ただし、extract_tags()関数で任意のWebページをスローし、タグを一覧表示できるようにしたいと思います。

idまたはclassの 'tag’などを持つすべてのHTML要素を見つけるなど、いくつかの単純なヒューリスティックを使用することを想像できます。 ただし、これは非常に脆弱であり、膨大な数のWebページではおそらく失敗します。 この問題に対してどのアプローチをお勧めしますか?

また、テキストのタグを推測する方法を備えたZemantaとOpen Calaisを知っていますが、実際の人間がすでに選択しているタグを抽出することと実際には同じではありません。 しかし、ドキュメント内のタグを推測するために他のサービス/ APIについて聞いてみたいです。

編集:明確にするために、このためにすでに機能するソリューションは素晴らしいでしょう。 しかし、これを行うオープンソースソフトウェアはすでに存在しないと思うので、ほとんどの場合に機能する可能性のあるアプローチについて人々から聞きたいと思っています。 完璧である必要はありません。

EDIT2:通常は機能する一般的なソリューションは不可能であり、各Webサイト/エンジンごとにカスタムスクレーパーを作成する必要があることを示唆している人は、http://lab.arc90.com/experiments/readability/ [arc90 readability tool]を検討してください。 このツールは、Web上の特定の記事の記事テキストを、なんらかのヒューリスティックアルゴリズムを使用して驚くほど正確に抽出することができます。 私はまだ彼らのアプローチを掘り下げていませんが、それはブックマークレットに収まり、あまり複雑ではないようです。 記事を抽出することはタグを抽出するよりもおそらく簡単であることを理解していますが、それは可能なことの例として役立つはずです。

9 Answer


2


arc90の例のようなシステムでは、タグ/テキストの比率やその他のヒューリスティックなどを調べて作業を行います。 ページのテキストコンテンツと周囲の広告/メニューなどには十分な違いがあります。 他の例には、電子メールまたはアドレスをスクレイピングするツールが含まれます。 ここには、検出できるパターン、認識できる場所があります。 タグの場合、タグを通常のテキストと一義的に区別するのに役立つものはあまりありませんが、他のテキストと同様に単語やフレーズにすぎません。 サイドバーのタグのリストは、ナビゲーションメニューと区別するのが非常に困難です。

tumblrのような一部のブログには、使用できるURLに「タグ付き」という単語が含まれるタグがあります。 Wordpressにも同様に、タグの「…​ / tag / …​」タイプのURLがあります。 このようなソリューションは、個々のページレイアウトに関係なく多数のブログで機能しますが、どこでも機能しません。


1


ソースがデータをフィード(RSS / Atom)として公開する場合、この構造化データからタグ(またはラベル/カテゴリ/トピックなど)を取得できる場合があります。

別のオプションは、各Webページを解析し、http://microformats.org/wiki/rel-tag [rel = tag microformat]に従ってフォーマットされたタグを探すことです。


0


くそー、ちょうどオープンカレーを提案するつもりだった。 これを行うための「素晴らしい」方法はありません。 いくつかのターゲットプラットフォームを念頭に置いている場合は、Wordpressを嗅ぎ、リンク構造を確認し、再びFlickrを見ることができます。


0


一般的な解決策を見つけた場合はお知らせください。 私は多くのツール(KapowTech、iMacrosなどpp)をテストしましたが、それぞれが作業する必要がある_each_ウェブサイトの「スクリプト」をカスタマイズする必要があります。


0


唯一の選択肢は、各サイトのカスタムスクリプトを記述することだと思います。 AlchemyApiを見ることができますが、物事を簡単にするために。 OpenCalaisと同様のエンティティ抽出機能を備えていますが、「http://www.alchemyapi.com/api/scrape/[Structured Content Scraping]」製品もあり、単純な視覚的制約を使用してxpathを記述するよりもはるかに簡単ですWebページの一部を識別します。


0


これは不可能であり、よく知られた従う仕様がないためです。 同じエンジンの異なるバージョンでも、異なる出力を作成できます。Wordpressを使用すると、ユーザーはhttp://codex.wordpress.org/Function_Reference/get_tags [独自のマークアップを作成]できます。

このようなことをすることに本当に興味があるなら、あなたはそれがリアルタイムで消費され、進行中のプロジェクトになるだろうことを知っている必要があります:どの「エンジン」がページで使用されているかを検出し、解析するライブラリを作成するそれ。 何らかの理由でページを検出できない場合、解析して先に進むための新しいルールを作成します。

私はこれがあなたが探している答えではないことを知っていますが、私は本当に別の選択肢を見ることができません。 私はPythonに興味があります。スクレイピングの完全なフレームワークであるため、これにはhttp://scrapy.org/[Scrapy]を使用します。


0


Yahoo Pipeを作成し、Term Extractorモジュールを介してソースページを実行してみてください。 素晴らしい結果が得られる場合と得られない場合がありますが、試してみる価値はあります。 注-V2エンジンを有効にします。


0


arc90を見ると、サイト運営者に意味的に意味のあるマークアップ[https://www.readability.com/publishers/guidelines/#view-exampleGuidelinesを参照]を使用するように求めているようです。 @dunelmtechが提案するタグ/テキスト比などの一般的なルールを開発しており、これは記事検出で機能するか、TextTilerやC99などのテキスト分割アルゴリズム(Natural Language Processingフィールドから)の組み合わせで使用する可能性があります記事の検出に非常に役立つ可能性があります-両方の詳細については、http://morphadorner.northwestern.edu/morphadorner/textsegmenter/およびgoogle [学術文献に掲載-google scholar]を参照してください。

ただし、必要に応じて「タグ」を検出することは難しい問題のようです(上記のコメントで既に述べた理由のため)。 私が試してみる1つのアプローチは、テキストセグメンテーション(C99またはTextTiler)アルゴリズムの1つを使用して記事の開始/終了を検出し、.. tag。を含むCLASSおよびID属性を持つDIV / SPAN / ULを探すことです。 ページレイアウトのタグの観点からは、一般的に記事の下にあり、コメントフィードのすぐ上にある傾向があるため、これは驚くほどうまく機能する可能性があります。

とにかく、タグ検出でどこかに到達したかどうかを確認するのは興味深いでしょう。 マーティン

*編集:*本当に役立つものを見つけました。 このアルゴリズムはVIPS [http://www.zjucadcg.cn/dengcai/VIPS/VIPS.htmlを参照]と呼ばれ、Vision Based Page Segmentationの略です。 これは、ページコンテンツを視覚的にセクションに分割できるという考えに基づいています。 DOMベースの方法と比較して、VIPSによって取得されたセグメントは、より意味的に集約されます。 ナビゲーション、広告、装飾などのノイズの多い情報は、ページの特定の位置に配置されることが多いため、簡単に削除できます。 これにより、タグブロックを非常に正確に検出できます。


0


Drupalには用語抽出モジュールがあります。 (http://drupal.org/project/extractor)ただし、Drupal 6専用です。