PythonのためにReadability.jsのようなものはありますか?
-
05-10-2019 - |
質問
私はパッケージ /モジュール /関数などを探しています。
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に移植できますか?