détecter et nettoyer le contenu générique

22
Détecter et nettoyer le contenu générique pendant la phase de collecte de donnés (SCRAP)

Upload: benoit-chevillot

Post on 21-Apr-2017

969 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: Détecter et nettoyer le contenu générique

Détecter et nettoyer le contenu génériquependant la phase de collecte de donnés (SCRAP)

Page 2: Détecter et nettoyer le contenu générique

Qui suis-je ?

Benoit Chevillot

Gerant de Divioseo à Dijon

06 07 44 57 57

[email protected]

Automatisation web

Développement web

Applications mobiles

Améliorations de la performance

Maintenance Ecommerce

Page 3: Détecter et nettoyer le contenu générique

Qu’est ce que le contenu générique ?

In information technology, a boilerplate is a unit of writing that can be reused over and over without change. By extension, the idea is sometimes applied to reusable programming as in "boilerplate code." The term derives from steel manufacturing, where boilerplate is steel rolled into large plates for use in steam boilers

En HTML : les footers, headers, éléments de navigations, …

Page 4: Détecter et nettoyer le contenu générique

Les entités nomméesConsiste à rechercher des objets textuels (c'est-à-dire un mot, ou un groupe de mots) catégorisables dans des classes telles que noms de personnes, noms d'organisations ou d'entreprises, noms de lieux, quantités, distances, valeurs, dates, etc.

Page 5: Détecter et nettoyer le contenu générique

Les stops wordsLes mots vides (ou stop words, en anglais) sont des mots qui sont tellement communs qu'il est inutile de les indexer ou de les utiliser dans une recherche. En français, des mots vides évidents pourraient être « le », « la », « de », « du », « ce »… Un mot qui apparaît avec une fréquence semblable dans chacun des textes de la collection n'est pas discriminant, ne permet pas de distinguer les textes les uns par rapport aux autres.

Page 6: Détecter et nettoyer le contenu générique

Scrappers

Crawlers, spiders : nutch, spidr, scrapy

Pentest tools : arachni scanner

Saas : 80leg, botify, … (https://www.quora.com/What-are-the-best-web-crawling-services)

Page 7: Détecter et nettoyer le contenu générique

Pourquoi nettoyer ?- Garder seulement le contenu pertinent - Ne pas parasiter les résultats - Gagner de la place en stockage - Gagner en temps de traitement - Eviter les problèmes

Page 8: Détecter et nettoyer le contenu générique

Pourquoi nettoyer ?

Page 9: Détecter et nettoyer le contenu générique

Quand faire les nettoyages / calculs ?Pendant le scrap ou après le scrap

Page 10: Détecter et nettoyer le contenu générique

Quand faire les nettoyages / calculs ?Pendant : résultat temps réel, pas de cloisonnement entre les actions de récupération et de traitement

Après : le post traitement permet de mener des actions d’extraction et raffinage à posteriori, et donc de pouvoir utiliser des crawls existants comme matière première

Que faire ? : les deux mon capitaine. Des opérations de nettoyage légère au crawl (détection de langue, suppression du boilerplate) et opérations intensives post crawl (calcul des cooccurences ou détection des entités nommées pr exemple)

Page 11: Détecter et nettoyer le contenu générique

Technologies à dispositionDétection et nettoyage

Page 12: Détecter et nettoyer le contenu générique

Expressions régulièresLes expressions rationnelles sont issues des théories mathématiques des langages formels des années 1940. Les expressions rationnelles sont aujourd’hui utilisées par les informaticiens dans l’édition et le contrôle de texte ainsi que dans la manipulation des langues formelles que sont les langages de l’informatique.

from blog.it.edu

Page 13: Détecter et nettoyer le contenu générique

Regex PHP autosplog

Page 14: Détecter et nettoyer le contenu générique

Regex Ruby YTG

Page 15: Détecter et nettoyer le contenu générique

Dom parserParcourir le Document Object Model pour exclure / garder seulement les chemins intéressants

Xpath : //p[contains(@class, ‘mytext’)] Css query : p.mytext

Quelques outils : PHP Simple HTML DOM Ruby Nokogiri

from wp2x.com

Page 16: Détecter et nettoyer le contenu générique

Chercher /remplacerFonctionne partout : ctrl + F même dans word !

Pour être sérieux en ligne de commande : Awk, sed

N’importe quel éditeur de code (vim, notepad, sublimetext, coda, …)

Page 17: Détecter et nettoyer le contenu générique

Les frameworks et ApisPlusieurs techniques en oeuvre : densité de liens, taille des séries de mots, « footprint » de balises

Page 18: Détecter et nettoyer le contenu générique

Boilerpipe

https://github.com/kohlschutter/boilerpipe

https://github.com/search?utf8=%E2%9C%93&q=boilerpipe

Très performant en anglais et langues latines

Page 19: Détecter et nettoyer le contenu générique

JusText

Python / C++ / GO

https://github.com/miso-belica/jusText

Le meilleur en langues ‘exotiques’

Page 20: Détecter et nettoyer le contenu générique

Readability (arc 90)

Nombreux fork dans tous les languages pour la v1

https://github.com/masukomi/ar90-readability

Très peu performant

Page 21: Détecter et nettoyer le contenu générique

Name entity Recognizer (stanford)

Codé en java : http://nlp.stanford.edu/software/CRF-NER.shtml

Permet « d’entrainer » le système pour améliorer les détections

Détection de noms propre, sociétés, dates, pays, villes

Page 22: Détecter et nettoyer le contenu générique

ConseilsUtilisez plusieurs méthodes pour vos nettoyages et stockez les résultats (voir chainez les)

Pensez aux blacklists de mots clef (rappelez vous des voyants)

Supprimer les dates et série de chiffres (sauf si vous minez des numéros de téléphone bien sur)

Gardez les séries de mots (+ ponctuation) de plus de 6 mots.

Focalisez vous sur les balises de « type » texte, Hn, p, blockquote

Utilisez un ‘réparateur’ de code HTML comme tidy par exemple, vous améliorerez ainsi le taux d’extraction

Utilisez le bon charset lors de votre nettoyage, détectez le au préalable (extraction de meta charset) sinon vous risquez la galère utf-8

Gardez si possible une version brut de la source de données pour faire un post traitement non anticipé