« SimilarBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
(computeCorrelation)
Ligne 1 : Ligne 1 :
Bot qui a pour but de suggérer des personnages similaires.
SimilarBot a pour but de suggérer des personnages similaires au bas de chaque biographie.  
 
== Idées de critères ==
* profession(s)
* lieux
* période
* évènements en commun (p.ex publication commune)
* personnage cité
 
== Calcul d'un score dans différentes catégories et corrélation ==
par exemple :
* 40% des entrées font référence au tennis
* 70% des entrées font référence à Genève
* les entrées s'étalent entre 1910 et 1990
* liens familiaux
* présence au même évènement un même jour
* publication commune
 
Suggestion en bas de la page de personnalités liées.


== Code ==
== Code ==
Ligne 23 : Ligne 5 :
lien vers le code : [https://github.com/RPetitpierre/SimilarBot]
lien vers le code : [https://github.com/RPetitpierre/SimilarBot]


== Description des principales fonctions ==
== Description des principales fonctions de l'algorithme ==


=== getacquaintance ===
=== getacquaintance ===
Ligne 85 : Ligne 67 :
Le calcul de la corrélation est basé sur les pourcentages de recouvrement.
Le calcul de la corrélation est basé sur les pourcentages de recouvrement.
==== Exemple du calcul de la  corrélation entre deux personnages ====
==== Exemple du calcul de la  corrélation entre deux personnages ====
Nom : Simone de Beauvoir
Résultats du ''data scraping'' :
Période :
  '''Nom :'''
  Simone de Beauvoir
  '''Période :'''
   de 1908 à 1986
   de 1908 à 1986
Lieux :
  '''Lieux :'''
   Paris : 57.1%
   Paris : 57.1%
   Chicago : 14.2%
   Chicago : 14.2%
   Joigny : 14.2%
   Joigny : 14.2%
   Tokio : 14.2%
   Tokio : 14.2%
Poids des principaux domaines d'activité :
  '''Poids des principaux domaines d'activité :'''
   Littérature  : 60.0%
   Littérature  : 60.0%
   Politique  : 10.0% (dont 10.0% du sous-domaine Démocratie)
   Politique  : 10.0% (dont 10.0% du sous-domaine Démocratie)
Ligne 99 : Ligne 83 :
   Médecine et santé  : 10.0%
   Médecine et santé  : 10.0%
   Militaire  : 10.0%
   Militaire  : 10.0%
Connaissances :
  '''Connaissances :'''
   Jean-Paul Sartre
   Jean-Paul Sartre


Nom : Jean-Paul Sartre
  '''Nom :'''
Période :
  Jean-Paul Sartre
  '''Période :'''
   de 1905 à 1980
   de 1905 à 1980
Lieux :
  '''Lieux :'''
   Paris : 68.7%
   Paris : 68.7%
   France : 6.25%
   France : 6.25%
Ligne 111 : Ligne 96 :
   Stockholm : 12.5%
   Stockholm : 12.5%
   Suisse : 6.25%
   Suisse : 6.25%
Poids des principaux domaines d'activité :
  '''Poids des principaux domaines d'activité :'''
   Littérature  : 55.5% (dont 11.1% du sous-domaine Littérature romanesque et 33.3% du sous-domaine Essais)
   Littérature  : 55.5% (dont 11.1% du sous-domaine Littérature romanesque et 33.3% du sous-domaine Essais)
   Cinéma  : 11.1% (dont 11.1% du sous-domaine Télévisuel)
   Cinéma  : 11.1% (dont 11.1% du sous-domaine Télévisuel)
Ligne 117 : Ligne 102 :
   Philosophie et psychologie  : 11.1% (dont 11.1% du sous-domaine Philosophie)
   Philosophie et psychologie  : 11.1% (dont 11.1% du sous-domaine Philosophie)
   Médecine et santé : 11.1%
   Médecine et santé : 11.1%
Connaissances :
  '''Connaissances :'''
   Simone de Beauvoir
   Simone de Beauvoir


[[Fichier:SimilarBot weights chart.png|250px|right|thumb|Répartition du poids des différents critères dans le calcul global.]]
La corrélation entre ces deux personnages est de 85.4%, détaillée comme suit :
La corrélation entre ces deux personnages est de 85.4%, détaillée comme suit :
* 100% des 26% liés au Relations interpersonnelles.
* 100% des 23.3% liés au Relations interpersonnelles.
* Durée de vie en commun / durée de vie la plus longue des deux = 72 ans / 78 ans = 92% des 22% liés à la Période de vie.
* Durée de vie en commun / durée de vie la plus longue des deux = 72 ans / 78 ans = 92% des 18.6% liés à la Période de vie.
* 57.1% des 26% liés aux Lieux (un seul lieu en commun : Paris, Simone de Beauvoir y étant liée par 57.1% de ses entrées biographiques et Jean-Paul Sartre par 68.7%. Le pourcentage de recouvrement des Lieux est donc de 57.1%)
* 57.1% des 23.3% liés aux Lieux (un seul lieu en commun : Paris, Simone de Beauvoir y étant liée par 57.1% de ses entrées biographiques et Jean-Paul Sartre par 68.7%. Le pourcentage de recouvrement des Lieux est donc de 57.1%)
* sur le même principe que pour les Lieux (avec une importance 2 fois plus grande pour les catégories principales que pour les catégories secondaires) :
* Sur le même principe que pour les Lieux (c'est à dire par recouvrement des pourcentages des différentes entrées) : 62.6% des 34.9% liés au Domaines d'activité (dont 85% des 23.3% liés au Domaines d'activité principaux et 17% des 11.6% liés aux Domaines d'activité secondaires)
Au final, cela nous donne bien une corrélation de 85.4%.


===ranking===
===ranking===
Ligne 137 : Ligne 124 :


==Limitations générales==
==Limitations générales==
=== computeCorrelation ===
* L'algorithme utilise une liste de mots clé écrite à la main: elle est donc restrainte au contexte et à la liste des biographies courante.
* L'algorithme utilise une liste de mots clé écrite à la main: elle est donc restreinte au contexte et à la liste des biographies courante.
Calcule la corrélation en fonction des 4 critères principaux (Lieux, Période de vie, Domaines d'activité et Relations interpersonnelles). La contribution des 4 critères est identique, à l'exception de de la Période de vie, dont l'importance a été évaluée 20% inférieure à celle des autres catégories.
* Le mots clés n'identifient pas toujours un domaine avec certitude totale, par exemple, une biographie qui contient la mot "cinématique" aura un score non nul pour le domaine du cinéma, bien que la cinématique soit une branche de la physique. Cela à cause du mot-clé ''cinéma''
* Le mots clés n'identifient pas toujours un domaine avec certitude totale, par exemple, une biographie qui contient la mot "cinématique" aura un score non nul pour le domaine du cinéma, bien que la cinématique soit une branche de la physique. 
* La précision du bot est limitée par le contenu des biographies, et souvent 15 entrées n'arrivent pas à résumer la vie d'un personnage de manière satisfaisante. Par exemple la page de Mao Zedong et Adolf Hitler ont beaucoup de poids sur "démocratie" simplement parce que ils sont été élus, bien qu'il soit clair que la majorité du poids devrait être sur "dictature".
*La précision du bot est limitée par le contenu des biographies, et souvent 15 entrées n'arrivent pas à résumer la vie d'un personnage de manière satisfaisante. Par exemple la page de Mao Zedong et Adolf Hitler ont beaucoup de poids sur "démocratie" simplement parce que ils sont été élus, bien que il est clair que la majorité du poids devrait être sur "dictature".
* Le calcul de la corrélation est basé sur les pourcentages de recouvrement.
Le calcul de la corrélation est basé sur les pourcentages de recouvrement.
* Le nombre limité de biographies ne permet pas une quantification précise de l'efficacité du bot.
*Le nombre limité de biographies ne permet pas une quantification précise de l'efficacité du bot.

Version du 1 mai 2018 à 18:52

SimilarBot a pour but de suggérer des personnages similaires au bas de chaque biographie.

Code

lien vers le code : [1]

Description des principales fonctions de l'algorithme

getacquaintance

Cette fonction est la plus basique pour déterminer un lien de similitude entre deux personnages du wikipast, elle se contente de vérifer si un autre des personnages est cité dans la biographie. Pour être utilise à notre SimilarBot qui a pour but de suggérer une page en lien il faut que la personne citée dans la biographie ai une page wikipast à son nom. Pour ce faire le bot parcourt une page biographique et vérifie si une autre des biographies du Wikipast est citée dans cette page il va ensuite l'ajouter à sa liste de connaissance puis la fonction "checkAquaintanceReciprocity" s'assure que le personnage dont on parcourt la biographie est lui aussi ajouté à la liste de connaissance du nouveau personnage.

getPlaces

Cette fonction sert à miner les informations concernant les lieux associés aux entrées évènements de chaque personnage de Wikipast. Elle crée ensuite, pour chacun des personnages, un objet Python "dictionnaire", contenant le nom de chacun des lieux cité au début des entrées-évènements, et leur fréquence de citation relative (normée).

Exemple :

Le programme associera au personnage : Genève : 66.6%, Lausanne : 33.3%. Les entrées où le lieu n'est pas spécifié ne sont pas prises en compte par l'algorithme.

Limitations :

  • Lorsque la syntaxe n'est pas respectée, le programme peut comprendre une suite de lettres, se trouvant à la place normale du lieu, c'est-à-dire après le signe / et entre crochets, comme étant un nom de lieu. Cela n'est pas le cas lorsque la syntaxe est respectée (pas de problème donc dans les entrées-évènements 4 et 5 de l'exemple).
  • Un second problème concerne les éventuels espaces dans les noms de lieux. En effet, un lieu comme Suisse romande ne pourra pas être détecté. Les noms à tirets, par contre, ne sont pas un problème (comme Aix-la-Chapelle)
  • Actuellement, la proximité topographique des lieux n'est pas prise en compte, ainsi, l'algorithme n'accordera pas un seul point de corrélation entre Paris et Versailles, même si ces lieux sont géographiquement proches.
  • Les évolutions toponymiques (Istanbul, Constantinople) ne sont pas prises en compte, de même que les variantes orthographiques d'un même nom de lieu (Biel, Bienne).

getLifespan

Cette fonction récupère les informations concernant l'époque où le personnage a vécu (date de naissance et de décès).

Exemple :

Le programme comprendra que la durée de vie du Grand Schtroumpf s'étend sur la période [1926,1999].

Limitations :

  • Lorsque ni la date de naissance, ni la date de décès ne sont spécifiées, le programme n'enregistre pas d'informations à propos de la période de vie du personnage.
  • Lorsque la date de naissance est spécifiée, mais pas la date de décès, le programme part du principe que le personnage est toujours vivant, pour autant que la durée de vie que cela implique ne soit pas hors norme (max. 98 ans). Si la durée de vie parait déraisonnable, le programme considère une durée de vie moyenne de 70 ans.
  • Lorsque la date de décès est spécifiée, mais pas la date de naissance, le programme considère la première entrée de la biographie comme début de la période de vie du personnnage.
  • Le programme ne comprend que les entrées liées aux hypermots conventionnels : Naissance, Décès, Mort et Exécution.

getWork

Cherche et repère, dans chaque évènement de la Biographie, une liste de mots clé, en lien avec différents domaines d'activité. Établit ensuite, à l'image de getPlaces, un tableau (dictionnaire Python) qui attribue à chaque domaine d'activité un poids relatif. Actuellement, il existe 15 domaines d'activité principaux : Sport, Arts plastiques, Littérature, Musique, Cinéma, Sciences naturelles, Sciences humaines, Mathématiques, Politique, Philosophie et psychologie, Médecine et santé, Militaire et Affaires. Les catégories d'activités les plus grandes sont divisées en sous-catégories (comme par exemple Politique, Sport, Sciences naturelles).

Exemple :

Le programme attribuera les poids suivants à cet extrait

  • 40% Littérature (2 lignes contiennent le mot-clé Publication)
  • 20% Mathématiques (1 ligne contien le mot-clé théorèmes)
  • 20% Politique (1 ligne contient le mot-clé Election, de la sous-catégorie Démocratie)
  • 20% Sport (1 ligne contient le mot-clé échecs, de la sous-catégorie Échecs)

Limitations :

  • Les catégories sont définies directement dans le code Python, ainsi que les mots-clés. Cela limite le nombre de catégories et les capacités de compréhension du programme.
  • L'intention du personnage n'est pas prise en compte. Par exemple, un antimilitariste qui s'expose à des situations de guerre, et dont la biographie contiendra des mots-clé lié à la guerre, pourra être mis en lien avec un général, militaire de carrière.

computeCorrelation

Calcule la corrélation en fonction des 4 critères principaux (Lieux, Période de vie, Domaines d'activité et Relations interpersonnelles). La contribution des 4 critères est identique, à l'exception de de la Période de vie, dont l'importance a été évaluée 20% inférieure à celle des autres catégories.

Le calcul de la corrélation est basé sur les pourcentages de recouvrement.

Exemple du calcul de la corrélation entre deux personnages

Résultats du data scraping :

 Nom :
 Simone de Beauvoir
 Période :
 de 1908 à 1986
 Lieux :
 Paris : 57.1%
 Chicago : 14.2%
 Joigny : 14.2%
 Tokio : 14.2%
 Poids des principaux domaines d'activité :
 Littérature  : 60.0%
 Politique  : 10.0% (dont 10.0% du sous-domaine Démocratie)
 Philosophie et psychologie  : 10.0% (dont 10.0% du sous-domaine Philosophie)
 Médecine et santé  : 10.0%
 Militaire  : 10.0%
 Connaissances :
 Jean-Paul Sartre
 Nom :
 Jean-Paul Sartre
 Période :
 de 1905 à 1980
 Lieux :
 Paris : 68.7%
 France : 6.25%
 Rome : 6.25%
 Stockholm : 12.5%
 Suisse : 6.25%
 Poids des principaux domaines d'activité :
 Littérature  : 55.5% (dont 11.1% du sous-domaine Littérature romanesque et 33.3% du sous-domaine Essais)
 Cinéma  : 11.1% (dont 11.1% du sous-domaine Télévisuel)
 Politique  : 11.1%
 Philosophie et psychologie  : 11.1% (dont 11.1% du sous-domaine Philosophie)
 Médecine et santé : 11.1%
 Connaissances :
 Simone de Beauvoir
Répartition du poids des différents critères dans le calcul global.

La corrélation entre ces deux personnages est de 85.4%, détaillée comme suit :

  • 100% des 23.3% liés au Relations interpersonnelles.
  • Durée de vie en commun / durée de vie la plus longue des deux = 72 ans / 78 ans = 92% des 18.6% liés à la Période de vie.
  • 57.1% des 23.3% liés aux Lieux (un seul lieu en commun : Paris, Simone de Beauvoir y étant liée par 57.1% de ses entrées biographiques et Jean-Paul Sartre par 68.7%. Le pourcentage de recouvrement des Lieux est donc de 57.1%)
  • Sur le même principe que pour les Lieux (c'est à dire par recouvrement des pourcentages des différentes entrées) : 62.6% des 34.9% liés au Domaines d'activité (dont 85% des 23.3% liés au Domaines d'activité principaux et 17% des 11.6% liés aux Domaines d'activité secondaires)

Au final, cela nous donne bien une corrélation de 85.4%.

ranking

Cette fonction permet de déterminer pour un personnage les 3 personnages qui lui sont le plus liés. Pour cela on parcourt les scores de corrélation du personnage étudié avec les autres personnages et on stock les trois meilleurs scores en modifiant le classement lorsque les personnages parcourus ont un score supérieur à un des trois classés. A la fin la fonction choisi les personnages à afficher : sur les 3 du classement elle n’affichera uniquement ceux dont le score de corrélation est supérieur à 1. En effet le meilleur score pouvant être 4.3 nous considérons comme insignifiantes et peu pertinentes les corrélations inférieures à 1.

Exemple de sortie

 Recommandation(s) pour Simone de Beauvoir
 Jean-Paul Sartre. Matching : 85.4%. Les personnages se connaissaient.
 Marguerite Duras. Matching : 47.5%. Les personnages ont été contemporains sur la période 1914-1984
 Charles de Gaulle. Matching : 42.0%. Les personnages ont tous deux été actifs dans le domaine littéraire

Limitations générales

  • L'algorithme utilise une liste de mots clé écrite à la main: elle est donc restreinte au contexte et à la liste des biographies courante.
  • Le mots clés n'identifient pas toujours un domaine avec certitude totale, par exemple, une biographie qui contient la mot "cinématique" aura un score non nul pour le domaine du cinéma, bien que la cinématique soit une branche de la physique. Cela à cause du mot-clé cinéma.
  • La précision du bot est limitée par le contenu des biographies, et souvent 15 entrées n'arrivent pas à résumer la vie d'un personnage de manière satisfaisante. Par exemple la page de Mao Zedong et Adolf Hitler ont beaucoup de poids sur "démocratie" simplement parce que ils sont été élus, bien qu'il soit clair que la majorité du poids devrait être sur "dictature".
  • Le calcul de la corrélation est basé sur les pourcentages de recouvrement.
  • Le nombre limité de biographies ne permet pas une quantification précise de l'efficacité du bot.