Question

Je cherche un paquet / module / fonction, etc., qui est à peu près l'équivalent Python des readability.js de Arc90

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

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

pour que je puisse donner une input.html et le résultat est nettoyé version de cette page html de « texte principal ». Je veux que ce que je puisse l'utiliser sur le côté serveur (contrairement à la version JS qui ne fonctionne que sur le côté du navigateur).

Toutes les idées?

PS: J'ai essayé Rhino + env.js et cette combinaison fonctionne, mais la performance est inacceptable, il prend quelques minutes pour nettoyer la plupart du contenu html :( (encore n'a pas pu trouver pourquoi il y a une telle grande différence de performance) .

Était-ce utile?

La solution

S'il vous plaît essayer ma fourchette qui https://github.com/buriy/python-readability est rapide et a toutes les fonctionnalités de dernière version javascript.

Autres conseils

Nous venons de lancer une nouvelle API de traitement du langage naturel à plus repustate.com. En utilisant une API REST, vous pouvez nettoyer tout HTML ou PDF et retourner seulement les parties de texte. Notre API est libre alors ne hésitez pas à utiliser au contenu de votre cœur. Et il est mis en œuvre en python. Check it out et comparer les résultats à readability.js -. Je pense que vous trouverez qu'ils sont presque 100% le même

hn.py via blog de lisibilité. Lisible Feeds , une application App Engine, fait usage.

Je l'ai livré en tant que module pip-installable ici: http://github.com/srid/readability

J'ai fait des recherches à ce sujet dans le passé et a fini par la mise en œuvre cette approche [pdf] en Python. La version finale a également fait je mis en œuvre un nettoyage avant l'application de l'algorithme, comme la suppression des éléments tête / script / iframe, des éléments cachés, etc., mais cela a été le cœur de celui-ci.

Voici une fonction avec un (très) mise en œuvre naïve du discriminateur « liste lien », qui tente de supprimer des éléments avec un lien lourd ratio texte (c.-à-barres de navigation, menus, annonces, 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()

Sur le corpus de test je l'ai utilisé effectivement travaillé très bien, mais la réalisation de grande fiabilité, il faudra beaucoup de peaufinage.

Pourquoi ne pas essayer d'utiliser Google V8 / Node.js au lieu de Rhino? Il devrait être rapide acceptablement.

Je pense que BeautifulSoup est le meilleur analyseur HTML pour python. Mais vous avez encore besoin de comprendre ce que la partie « principale » du site est.

Si vous ne l'analyse syntaxique un seul domaine, il est assez simple, mais trouver un modèle qui fonctionne pour any site n'est pas si facile.

Peut-être que vous pouvez les ports readability.js approche de python?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top