質問

私はパッケージ /モジュール /関数などを探しています。

http://lab.arc90.com/experiments/readability

http://lab.arc90.com/experiments/readability/js/readability.js

input.htmlを提供できるように、結果はそのHTMLページのバージョンをクリーンアップします」メインテキスト「。サーバー側で使用できるようにこれを望んでいます(ブラウザ側でのみ実行されるJSバージョンとは異なります)。

何か案は?

PS:Rhino + Env.jsを試しましたが、その組み合わせは機能しますが、パフォーマンスは受け入れられません。HTMLコンテンツのほとんどをクリーンアップするには数分かかります:((まだ大きなパフォーマンスの違いがある理由が見つかりませんでした)。

役に立ちましたか?

解決

私のフォークを試してみてください https://github.com/buriy/python-readability これは高速で、最新のJavaScriptバージョンのすべての機能があります。

他のヒント

repustate.comで新しい自然言語処理APIを起動したばかりです。 REST APIを使用して、任意のHTMLまたはPDFをクリーニングして、テキストパーツのみを取り戻すことができます。私たちのAPIは無料ですので、心のコンテンツに自由に使用してください。そして、それはPythonで実装されています。それをチェックして、結果をReadability.jsと比較してください - それらはほぼ100%同じであると思います。

hn.py 経由 Readabilityのブログ. 読みやすいフィード, 、アプリエンジンアプリはそれを利用します。

ここにピップインストール可能なモジュールとしてバンドルしました: http://github.com/srid/readability

私は過去にこれについていくつかの調査をしました、そして最終的に実装しました このアプローチ[PDF Pythonで。私が実装した最終バージョンは、ヘッド/スクリプト/iframe要素、非表示の要素などの削除など、アルゴリズムを適用する前にいくつかのクリーンアップを行いましたが、これがその中核でした。

以下は、「リンクリスト」差別装置の(非常に)素朴な実装を備えた関数です。これは、テキスト比(つまり、ナビゲーションバー、メニュー、広告など)の重いリンクを持つ要素を削除しようとします。

def link_list_discriminator(html, min_links=2, ratio=0.5):
    """Remove blocks with a high link to text ratio.

    These are typically navigation elements.

    Based on an algorithm described in:
        http://www.psl.cs.columbia.edu/crunch/WWWJ.pdf

    :param html: ElementTree object.
    :param min_links: Minimum number of links inside an element
                      before considering a block for deletion.
    :param ratio: Ratio of link text to all text before an element is considered
                  for deletion.
    """
    def collapse(strings):
        return u''.join(filter(None, (text.strip() for text in strings)))

    # FIXME: This doesn't account for top-level text...
    for el in html.xpath('//*'):
        anchor_text = el.xpath('.//a//text()')
        anchor_count = len(anchor_text)
        anchor_text = collapse(anchor_text)
        text = collapse(el.xpath('.//text()'))
        anchors = float(len(anchor_text))
        all = float(len(text))
        if anchor_count > min_links and all and anchors / all > ratio:
            el.drop_tree()

テストコーパスでは、実際には非常にうまく機能しましたが、高い信頼性を達成するには多くの調整が必要です。

Rhinoの代わりにGoogle V8/node.jsを使用してみませんか?それは許容できるほど速くなければなりません。

おもう BeautifulSoup Pythonに最適なHTMLパーサーです。ただし、サイトの「メイン」部分が何であるかを把握する必要があります。

単一のドメインだけを解析している場合、それはかなり簡単ですが、 どれか サイトはそれほど簡単ではありません。

Readability.jsアプローチをPythonに移植できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top