« TangoBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Ligne 66 : Ligne 66 :
*Ici, le TangoBot voit qu'il y a [[Henri Dunant]] dans les 2 phrases et que le nom est associé à "[[Naissance]]" et "né". Il établit donc un lien entre les 2 phrases et remarque qu'elles sont fortement similaires. Il décide donc de garder la première.
*Ici, le TangoBot voit qu'il y a [[Henri Dunant]] dans les 2 phrases et que le nom est associé à "[[Naissance]]" et "né". Il établit donc un lien entre les 2 phrases et remarque qu'elles sont fortement similaires. Il décide donc de garder la première.


== Le tango == (Fonctionnalité historique) [deprecated]
== Le tango ==
(Fonctionnalité historique) [deprecated]
Comme le TangoBot est un grand amateur de musiques de salon, il souhaite après chaque execution, vous faire partager sa passion. Il devrait donc mettre un player ou un lien youtube en bas de la page qu'il a vérifié afin que vous puissiez écouter un bout de son morceaux préféré.
Comme le TangoBot est un grand amateur de musiques de salon, il souhaite après chaque execution, vous faire partager sa passion. Il devrait donc mettre un player ou un lien youtube en bas de la page qu'il a vérifié afin que vous puissiez écouter un bout de son morceaux préféré.


== Code ==
== Code ==
[https://github.com/cavEpfl/TangoBot/ Code accessible sur Github]
[https://github.com/cavEpfl/TangoBot/ Code accessible sur Github]

Version du 15 mai 2017 à 19:42

Résumé des fonctionnalités

Ce bot permet de supprimer les entrées redondantes sur une page.

Description technique

Pour pouvoir éliminer les entrées redondantes, il faut les comparer chacune les unes aux autres et estimer leur similarité.

Avant de comparer les phrases il faut les "nettoyer".

  • Supprimer tout caractère spécial ou signe de ponctuation.
  • Mettre tous les caractères en minuscule.

Séparer les mots et en filtrer certains.

  • Les mots commençant par "http" sont des sources et il est préférable de les ignorer car ce ne sont pas des mots et n'aide pas à comparer le sens de la phrase.
  • Les "stopwords", ("Mot vide") ('au', 'ce', 'du', 'étais', 'le' 'la', 'il', 'je', 'nous',...) sont des mots tellement communs qu'il est inutile de les prendre en compte, car il apparaissent avec une fréquence semblables dans n'importe quel texte. Il n'aide pas à distinguer un texte par rapport à un autre et n'apporterait que de l'information inutile en plus. Par conséquent ils sont ignorés.

Et les modifier pour en avoir plus en commun.

  • "Stemming", ("Racinisation") est un procédé de transformation des flexions en leur radical ou racine. Ce qui permet de lier par exemple les mots continuait, continuerai et continuant qui ont comme racine commune continu. L'algorithme de Porter est utilisée dans ce cas plutôt qu'un dictionnaire.

On applique ensuite le TF-IDF (Term Frequency-Inverse Document Frequency) qui est une méthode qui permet de d'évaluer l'importance d'un mot dans un texte.

L'idée du "term frequency" est juste le nombre d'occurrences dans un fichier sur le nombre d'occurrences totals dans tous les fichiers

tf(i,i) = n(i,i)/sum(n(k,i))


La fréquence inverse vise à donner plus de poids au terme moins fréquent qui peuvent aider à mieux différencier un texte d'un autre.

idf(i) = log{(abs(D)/abs(dj tq ti appartient à dj)} ou D est le nombre total de documents dans le corpus et le dénominateur le nombre de document ou le terme ti apparaît

Le poids s'obtient en multipliant les deux mesures: tfidf(i,j) = tf(i,j) * idf(i)

Le poids augmente proportionnellement au nombre d'occurrences du terme dans le texte.

On peut donc utiliser cette pondération pour décrire les différents textes dans un modèle vectoriel ou chaque document est représenté par un vecteur. Sous forme vectoriel il est très facile de calculer la similarité entre deux vecteurs (deux textes) par la similarité cosinus. Le produit scalaire de deux vecteurs A et B donne:

||A|| * ||B|| * cos(theta)

on peut donc déterminer l'angle theta et comme cos(theta) est compris entre -1 et 1 on peut évaluer le degré de similarité.

De 1 (identique) à -1 totalement opposées. Dans ce cas les vecteurs tf-idf sont toujours positif donc le degré de similarité est entre 0 (nulle) et 1.

Le degré de similarité à partir du quelle on considère que deux entrées sont les mêmes peut être estimé à partir de la moyenne des "cosine similarities" ainsi que de la "standard deviation" mais dans ce cas de figure nous avons trouvé que le TangoBot donnait de meilleurs résultats en considérant les valeurs > 0.5 (seuil fixe) comme suffisantes pour considérer l'égalité.

Une fois que le degré de similarité entre chaque document est établis le choix de quelle version des entrées dupliquées il faut garder se fait sur le nombre d'hyperliens dans l'entrées. Les entrées les plus complètes seront toujours gardées.

Exemples

Pour une page de tests ou les exemples ci-dessous sont tester voir: TANGOBOT TEST PAGE


1) Si titre du lienle TangoBot compare deux phrases identiq]]ues :

  • "1828.05.08 / Genève. Naissance de Henri Dunant. [1] | [2]." est présente deux fois dans la même page. Alors le TangoBot remarquera directement que les mêmes phrases possèdent les mêmes mots aux mêmes endroits. Il décidera donc d'en supprimer une des deux.

2) Si le TangoBot compare deux phrases contenant les mêmes mots-clés mais pas identiques :

3) Si le TangoBot compare deux phrases similaires :

Le tango

(Fonctionnalité historique) [deprecated] Comme le TangoBot est un grand amateur de musiques de salon, il souhaite après chaque execution, vous faire partager sa passion. Il devrait donc mettre un player ou un lien youtube en bas de la page qu'il a vérifié afin que vous puissiez écouter un bout de son morceaux préféré.

Code

Code accessible sur Github