Pregunta

Estoy buscando un paquete / módulo / función, etc., que es aproximadamente el equivalente de Python readability.js de Arc90

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

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

para que yo pueda darle un poco de input.html y el resultado es limpiado versión de la página HTML que " texto principal ". Quiero que este para que pueda usarlo en el lado del servidor (a diferencia de la versión JS que sólo se ejecuta en el lado del navegador).

¿Alguna idea?

PS: He tratado de Rhino + env.js y esa combinación funciona, pero el rendimiento es inaceptable se toma unos minutos para limpiar la mayor parte del contenido HTML :( (todavía no pudo encontrar qué hay una diferencia tan grande de rendimiento) .

¿Fue útil?

Solución

Por favor, intente mi tenedor https://github.com/buriy/python-readability cuales es rápido y tiene todas las características de la última versión de javascript.

Otros consejos

Hemos acaba de lanzar una nueva API de procesamiento de lenguaje natural sobre al repustate.com. El uso de una API REST, se puede limpiar todo el código HTML o PDF y volver sólo las partes de texto. Nuestro API es libre así que no dude en utilizar al contenido de su corazón. Y está implementado en Python. Compruébelo usted mismo y comparar los resultados con readability.js -. Creo que encontrará que son casi el 100% de la misma

hn.py vía la legibilidad de blog de . legible feeds , una aplicación de App Engine, hace uso de ella.

Me han liado como un módulo pip-instalable aquí: http://github.com/srid/readability

He hecho algunas investigaciones sobre esto en el pasado y terminó implementar este acercarse [pdf] en Python. La versión final he implementado también hizo algo de limpieza antes de aplicar el algoritmo, como la eliminación de elementos de cabeza / script / iframe, elementos ocultos, etc., pero esto era el núcleo de la misma.

Esta es una función con un (muy) aplicación ingenua del discriminador "lista de enlaces", que los intentos para eliminar los elementos con un fuerte vínculo con la relación de texto (es decir, barras de navegación, menús, anuncios, 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()

En el corpus de prueba utilicé lo que realmente funcionó bastante bien, pero el logro de una alta fiabilidad requerirá una gran cantidad de ajustes.

¿Por qué no tratar de usar Google V8 / Node.js en lugar de Rhino? Debe ser aceptablemente rápido.

BeautifulSoup es el mejor analizador HTML para Python. Pero todavía tiene que averiguar cuál es la parte "principal" del sitio es.

Si se encuentra en el análisis de un solo dominio, es bastante sencillo, pero encontrar un patrón que funcione para cualquier sitio no es tan fácil.

Tal vez se puede portuarias las readability.js acercarse a pitón?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top