Domanda

Sto cercando un pacchetto / modulo / funzione, ecc che è circa l'equivalente di Python readability.js di Arc90

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

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

in modo che posso dargli un po 'input.html e il risultato viene ripulito versione di quella pagina HTML " testo principale ". Voglio che questo modo che posso usarlo sul lato server (a differenza della versione JS che gira solo su parte del browser).

Tutte le idee?

PS: Ho cercato di Rhino + env.js e che combinazione funziona ma la prestazione è inaccettabile ci vogliono minuti per ripulire la maggior parte del contenuto HTML :( (ancora non riusciva a trovare il motivo per cui v'è una così grande differenza di prestazioni) .

È stato utile?

Soluzione

Si prega di provare la forchetta https://github.com/buriy/python-readability che è veloce e ha tutte le caratteristiche della versione più recente di JavaScript.

Altri suggerimenti

Abbiamo appena lanciato una nuova API di elaborazione del linguaggio naturale sopra a repustate.com. Utilizzando un API REST, è possibile pulire qualsiasi HTML o PDF e tornare solo le parti di testo. La nostra API è gratuito quindi sentitevi liberi di utilizzare al contenuto del vostro cuore. Ed è implementato in Python. Check it out e confrontare i risultati per readability.js -. Penso che troverete che sono quasi al 100% la stessa

hn.py tramite di leggibilità blog . leggibile Feed , un app App Engine, fa uso di esso.

ho in bundle come modulo pip-installabile qui: http://github.com/srid/readability

Ho fatto qualche ricerca su questo in passato e ha finito per attuare questo avvicinarsi [pdf] in Python. La versione finale ho implementato anche fatto un po 'di pulizia prima di applicare l'algoritmo, come la rimozione di elementi testa / script / iframe, elementi nascosti, ecc, ma questo era il nucleo di esso.

Ecco una funzione con un (molto) l'attuazione ingenuo del discriminatore "lista di link", che tenta di rimuovere gli elementi con un collegamento forte rapporto di testo (ad esempio barre di navigazione, menu, annunci, ecc..):

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

Al corpus prova ho usato in effetti ha funzionato abbastanza bene, ma il raggiungimento di alta affidabilità richiede un sacco di tweaking.

Perché non provare a utilizzare Google V8 / Node.js invece di Rhino? Dovrebbe essere accettabilmente veloce.

BeautifulSoup è la miglior HTML parser per Python. Ma è comunque necessario capire che cosa la parte "principale" del sito è.

Se si sta solo l'analisi di un singolo dominio, è abbastanza semplice, ma trovare un modello che funziona per qualsiasi sito non è così facile.

Forse si può porta i readability.js avvicinarsi a Python?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top