[PHP... ou autres] trouver les termes liés dans un texte

trouver les termes liés dans un texte [PHP... ou autres] - PHP - Programmation

Marsh Posté le 06-09-2006 à 16:41:09    

Bonjour,
 
Je cherche à écrire/adapter un script qui permet, dans un texte / contenu textuel de :
trouver les termes liés deux à deux ou trois à trois.
 
Par exemple dans :  
"la confédération paysanne a déclaré que le prix du porc ne devait pas passer sous la barre des 5 EUR. Mais face à eux, le Ministère de l'Agriculture maintient sa volonté de baisse du prix du porc. La confédération paysanne prépare un mouvement de contestation le 5 septembre."
le script doit trouver que "confédération paysanne" est une expression signifiante, puisqu'on la retrouve deux fois. Idem pour "prix du porc".
 
Il y a bien sur la voie brutale de faire des explode des termes deux à deux "la confédération", "confédération paysanne", "paysanne a", "a déclaré", "déclaré que", "que le", etc... et d'analyser la fréquence d'occurence de chaque doublette.
Et idem pour les triplettes, etc.
 
Mais il y a peut être des choses existantes / des voies plus intelligentes de faire la meme chose... qu'en pensez vous ?

Reply

Marsh Posté le 06-09-2006 à 16:41:09   

Reply

Marsh Posté le 06-09-2006 à 20:09:08    

:o je travaille sur un scrip equivalent :)
 
Merci pour l'idée !
 
=> Le passage au tableau me semble obligatoire
=> normalement avec une fonction recursive passé à un array_map c'est ok
=> la voie brutale me parait etre la plus rapide pour des petits tableaux
 
Problème difficile

Reply

Marsh Posté le 07-09-2006 à 12:03:17    

A première vue, c'est un pur problème d'algorithmique. Essayez de fouiller vers les algorithmes de compression à dictionnaires notamment LZW ça pourrait vous donner des idées sur la façon de créer le dictionnaire au fur et à mesure de la lecture du texte.


---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 07-09-2006 à 13:22:46    

Ouais la compression est un atout et évite relativement souvent d'avoir des problèmes en input.
 

Code :
  1. $unique = bin2hex($unique); // cote serveur
  2. $unique = pack("H*", unique); //cote requete ou client

Reply

Marsh Posté le 07-09-2006 à 16:33:10    

on s'oriente alors, dans l'esprit du lzw vers :
 
explode => tableau
selection de l'element n et n+1 (avec raffinement sur les elts syntaxiques)
tableau['elt1 elt2']++;
 
et ensuite on regarde les grosses valeurs du tableau.
 
A tester !

Reply

Marsh Posté le 07-09-2006 à 16:50:53    

tu peux aussi jeter un coup d'oeil sur l'algo "suffix tree" ( ou "Ukkonen's algorithm" )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed