Page 1 sur 3

Detection du "sujet" d'un article

Posté : 17 sept. 2009, 11:48
par paro
Bonjour à tous,

Dans le cadre d'un petit développement perso, j'aurais besoin d'écrire un script (en PHP) qui permet de me dire tout seul, en analysant l'article, si deux articles parlent de la même chose, c'est à dire qu'ils traitent du même sujet. Comment?

Ma première piste de réflexion a été de compter le nombre d'occurrences de tous les mots (sauf mots fréquents: de, la les, donc, etc.) dans chacun des articles, de ne garder que ceux qui étaient répétés au moins quatre fois, et ensuite de comparer les mots récurrent de chaque article. S'il y a au moins 3 mots récurrents en communs dans les deux articles, alors ils portent sur le même sujet.

Ça marche à peu près, mais la fiabilité est de l'ordre de 70% environ.

J'aimerais donc avoir vos réflexions ou pistes de réflexion sur cette façon de procéder:
Est-ce la bonne façon de procéder? Comment augmenter sa fiabilité?
Si vous n'auriez pas fait comme moi, comment auriez-vous fait?

Re: Detection du "sujet" d'un article

Posté : 17 sept. 2009, 13:21
par Berzemus
Calculer la corrélation entre deux textes d'après l'une ou l'autre coefficient (celui de pearson par exemple), ou alors trouver un moyen de les regrouper par entropie, mais la on s'aventure dans du data-mining et du machine-learning.

En gros, le truc c'est de transformer tes textes en suites de chiffres, et d'en calculer la distance.

Re: Detection du "sujet" d'un article

Posté : 17 sept. 2009, 14:31
par paro
Ouch... c'est intéressant mais ca a l'air complexe (rien à qu'à voir la page wikipedia).

En fait c'est beaucoup plus mathématique que je ne pensais... dans ma façon de voir les choses, je suis resté trop "sémantique" apparement.

Re: Detection du "sujet" d'un article

Posté : 17 sept. 2009, 16:20
par Sékiltoyai
Oui, c'est mathématique, et heureusement.
Si cela devait rester sémantique, cela signifierait qu'il faudrait que tu codes une IA pour comprendre le texte et retirer les points essentiels.
Grâce aux maths, c'est plus simple, tu as des formules à appliquer, certes complexes, puisque le datamining ou les systèmes logiques sont des sujets de recherche poussés, mais formalisés.
Je te conseille de prendre connaissance des principes de la fouille de textes pour avoir une vision d'ensemble du procédé :
http://fr.wikipedia.org/wiki/Recherche_d'information
http://fr.wikipedia.org/wiki/Fouille_de_textes

Déjà, aussi, pour t'éclairer, ton besoin se rapprocherait de la partie recherche d'un moteur de recherche, à la différence qu'au lieu de comparer une requête avec un texte, tu compares deux textes entre eux.

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 01:57
par Dr@ke
Calculer la corrélation entre deux textes d'après l'une ou l'autre coefficient (celui de pearson par exemple)
Aurais-tu un exemple concret en Php, stp? #-o

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 08:08
par paro
Calculer la corrélation entre deux textes d'après l'une ou l'autre coefficient (celui de pearson par exemple)
Aurais-tu un exemple concret en Php, stp? #-o

Ou même un début d'exemple, j'avoue que cela m'aiderais aussi ... :D

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 13:53
par Berzemus
Calculer la corrélation entre deux textes d'après l'une ou l'autre coefficient (celui de pearson par exemple)
Aurais-tu un exemple concret en Php, stp? #-o
Je ne l'ais utilisé qu'en Perl, puisqu'il s'agit bien souvent de scripts qui tournent localement et de longues heures (voir jours), une tâche qui convient mieux à Perl qu'à Php. Quoique la je travaille sur autre chose, du même style, mais en y ajoutant du parallélisme, surtout en utilisant des algos map/reduce.

Mais je viens de découvrir une fonction php qui fait tout juste ça, calculer le coefficient de corrélation de pearson entre deux tableaux contenant des nombres:
stats_stat_correlation()

Fonction non documentée, mais il y a un commentaire bien utile.

Quant à la façon de produire une suite de chiffres à partir d'un texte, il suffit de remplacer les mots par des numéros, et de construire le tout sur DB. J'ai pu calculer la "distance" entre plusieurs dizaines de milliers de textes de cette façon, très utile pour faire des recherches ou proposer des textes similaires.

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:03
par paro
Mais je viens de découvrir une fonction php qui fait tout juste ça, calculer le coefficient de corrélation de pearson entre deux tableaux contenant des nombres:
stats_stat_correlation()
Intéréssant ! Je connaissais pas!
Je ne l'ais utilisé qu'en Perl, puisqu'il s'agit bien souvent de scripts qui tournent localement et de longues heures (voir jours),
C'est aussi long que ca? Même pour comparer deux articles courts (style article de journal)?
Quant à la façon de produire une suite de chiffres à partir d'un texte, il suffit de remplacer les mots par des numéros, et de construire le tout sur DB
Je ne comprend pas trop... ca voudrais dire qu'il faut convertir tout le dictionnaire français en chiffres?
Du style :
Découper la phrase : "Salut je m'appelle Jean", en "salut = 26, Je= 12, m = 53, apelle = 114, jean = 95"
Et du coup le texte deviendrais:
26125311495

C'est bien ça le principe?

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:04
par Dr@ke
Ok merci,
Mais, je ne comprend pas le rapport entre "distance" entre deux mots, même transformés en chiffres ou nombres, et celui de rechercher si les deux textes parlent du même du sujet...
C'est dans ce genre de cas précis, que je me dis que j'ai vraiment besoin de prendre des cours...

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:06
par paro
Mais, je ne comprend pas le rapport entre "distance" entre deux mots, même transformés en chiffres ou nombres, et celui de rechercher si les deux textes parlent du même du sujet...
Je pense, mais je suis loin d'en être sur, qu'en calculant la distance entre deux textes, et que, si cette distance est inférieure à un coefficient du style 25% alors on peut affirmer que les deux textes parlent du même sujet.

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:14
par Dr@ke
Ah si peut-être, exemple, comparer:
j'ai acheté un dictionnaire français.
et
Un français achète un dictionnaire.

Dans les deux phrases les deux mots français et dictionnaire sont présents, mais dans la première la distance est plus courte entre les 2.
C'est le seul rapport que je peux comprendre...
Pour le reste me manque surement certaines bases...

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:16
par Sékiltoyai
Ce n'est pas une distance entre deux mots, c'est une distance entre deux textes. La distance entre deux mots différents est de toute façon de 1 (si on compte entre 0 et 1).
La distance entre deux textes se mesure grosso-modo par le nombre d'occurrence des mots (voire même en tenant compte de l'ordre des mots, de leur position, ou en tenant compte des mots de la même famille, etc). Enfin surtout par la fréquence de chaque mot, c'est à dire que l'on regardera la fréquence de chaque mot dans chacun des textes et on associera un score représentant la distance entre ces textes.
Ce n'est pas basiquement compter les mots. Derrière, on met des racines carrées ou des sinus (selon la formule) pour calculer un score le plus adapté possible à la situation.

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:19
par Sékiltoyai
Ah si peut-être, exemple, comparer:
j'ai acheté un dictionnaire français.
et
Un français achète un dictionnaire.

Dans les deux phrases les deux mots français et dictionnaire sont présents, mais dans la première la distance est plus courte entre les 2.
Euh, non, c'est pas ça…
Dans ce cas, on dira :
Phrase 1 :
Avoir : 1 occurrence
Acheter : 1 occurrence
dictionnaire : 1 occurrence
France : 1 occurrence

Phrase 2 :
France : 1 occurrence
Acheter : 1 occurrence
dictionnaire : 1 occurrence

Et ensuite on passe une moulinette.

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:25
par Dr@ke
Ok je me compliquais la vie donc.
Merci

Re: Detection du "sujet" d'un article

Posté : 18 sept. 2009, 14:43
par paro
Donc il faut compter les occurences de chaque mot, les stocker dans deux tableaux et passer les deux tableaux dans la "moulinette" de correlation? c'est ca? :?