Frage

Ich bin auf der Suche nach einem Paket / Modul / Funktion usw., die in etwa das Äquivalent des readability.js von Arc90 Python ist

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

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

so, dass ich ihm etwas input.html geben kann und das Ergebnis wird gereinigt up-Version, die HTML-Seite „ Haupttextes “. Ich will das so, dass ich es auf der Server-Seite (im Gegensatz zur JS-Version, dass läuft nur auf Browser-Seite) verwenden kann.

Irgendwelche Ideen?

PS: Ich habe versucht, Rhino + env.js und diese Kombination funktioniert, aber die Leistung ist nicht akzeptabel, es Minuten dauert die meisten den HTML-Inhalt zu bereinigen :( (konnte immer noch nicht finden, warum es so ein großer Unterschied in der Leistung ist) .

War es hilfreich?

Lösung

Bitte versuchen Sie meine Gabel https://github.com/buriy/python-readability die ist schnell und hat alle Funktionen der neuesten JavaScript-Version.

Andere Tipps

Wir haben gerade eine neue Verarbeitung natürlicher Sprache API über bei repustate.com gestartet. Mit Hilfe einer REST-API können Sie einen beliebigen HTML oder PDF reinigen und nur die Textteile zurück. Unsere API ist frei so fühlen sich frei zu Inhalt Ihres Herzens zu verwenden. Und es ist in Python implementiert. Check it out und die Ergebnisse vergleichen zu readability.js. - Ich denke, Sie finden sie fast 100% sind die gleichen

hn.py über Ablesbarkeit Blog . Lesbare Feeds , app eine App Engine, Gebrauch macht.

Ich habe es als eine Pip-installierbaren Modul gebündelt hier: http://github.com/srid/readability

Ich habe einige der Forschung zu diesem Thema in der Vergangenheit getan und Umsetzung endete diese Ansatz [pdf] in Python. Die endgültige Version, die ich durchgeführt habe auch einige Bereinigungen vor Anwendung des Algorithmus, wie Entfernungskopf / script / iframe-Elemente, versteckte Elemente usw., aber das war der Kern davon.

Hier ist eine Funktion mit einer (sehr) naiven Umsetzung des „Linkliste“ Unterscheider, der versucht, Elemente mit einem schweren Link zu Text-Verhältnis zu entfernen (zB Navigationsleisten, Menüs, Anzeigen, etc..):

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()

Auf dem Testkorpus habe ich es funktionierte eigentlich ganz gut, aber eine hohe Zuverlässigkeit erreicht wird an vielen Schrauben drehen müssen.

Warum nicht versuchen, Google V8 / Node.js statt Rhino verwenden? Es sollte in akzeptabler Weise schnell sein.

Ich denke, BeautifulSoup die beste HTML-Parser für Python ist. Aber Sie müssen noch herausfinden, was der „Haupt“ Teil des Geländes ist.

Wenn Sie nur eine einzige Domain-Parsing, es ist ziemlich einfach, aber ein Muster zu finden, dass die Arbeiten für jeder Website nicht so einfach ist.

Vielleicht können Sie Port die readability.js nähern zu Python?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top