Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2970 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  lier les mots d'un texte à un dictionnaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lier les mots d'un texte à un dictionnaire

n°2235263
lord brook
Posté le 08-08-2014 à 12:41:41  profilanswer
 

Bonjour,
 
Je cherche comment m'y prendre pour obtenir un texte dont les mots cliquables seraient reliés à un dictionnaire.
Je pense qu'il faudrait utiliser une régex pour retirer la ponctuation du texte, puis faire un explode pour récupérer les mots du texte.
 
Ensuite il faudrait vérifier si chaque mot existe dans le dictionnaire et si oui créer un lien sur le mot vers le dictionnaire.
 
(c'est la partie la plus importante, mais je vois pas trop comment faire...).
La première idée qui me vient à l'esprit serait de faire une boucle sur l'array (qui contient chaque mot) avec des requêtes sql, mais bon ça doit être un peu lourd :/
 
Un peu dans le même ordre d'idées, dans les articles de lemonde.fr, lorsque vous cliquez sur les verbes d'un article, vous êtes redirigé vers un site avec les différentes conjugaisons du verbe sur lequel vous avez cliqué.
 
L'intérêt est ensuite de ne pas avoir à donner la définition de chaque mot à chaque fois de façon statique, mais que ça puisse se faire automatiquement par détection.
 
Pour l'instant il n'y a pas de dictionnaire, je vais le créer après si j'arrive à faire ça.
Voilà et au passage si vous pensez qu'il serait mieux de faire cela dans un autre langage, merci de me l'indiquer.

mood
Publicité
Posté le 08-08-2014 à 12:41:41  profilanswer
 

n°2235279
rufo
Pas me confondre avec Lycos!
Posté le 08-08-2014 à 16:06:49  profilanswer
 

J'ai codé un truc similaire en php. $sArticle contient tout le texte à analyser et enrichir.
 
$ArrayWords = preg_split("/[\s,\.\(\)\/:><+]+/", $sArticle, -1, PREG_SPLIT_OFFSET_CAPTURE);
$ArrayWordsToReplace = array();
 
Avec ça, tu obtiens les mots seuls dans un tableau. Pour conserver les mots de manière unique, histoire de pas rechercher le même mot x fois :
$ArrayWords = array_unique($ArrayWords);
 
Ensuite, tu parcours ton tableau de mots. Pour chaque mot, tu le "nettoies" avec un str_replace() afin de retirer les "d'", "n'", "qu'" et "l'" et les guillemets. Après, tu voudras peut-être pas forcément mettre un lien sur tous les mots ayant "peu" de sens comme "ce", "son", "sa", "la", "le", "un", "une", "quel", "quelle", "celui", "celle"...
Là, tu vas avoir le mot dont il faut rechercher le lemme (ex : pour un verbe, sa forme à l'infinitif, pour un nom commun, sa forme masculin singulier). Pour obtenir le lemme associé à un mot, il existe une base sympa pour avoir pleins d'infos sur un mot, dont le lemme : Lexique.org ( http://www.lexique.org/telLexique.php ), la v3.80, que tu pourras facilement transformer en BD Mysql. Par contre, y'a pas la déf, il me semble ;)
 
Une fois le lemme obtenu, il te faudra aller sur un site ou une autre BD afin d'obtenir la déf. Une fois la déf obtenue, tu vas générer le code HTML qui remplacera le mot de l'article par le mot + sa déf représentée en html et tu le stockera dans un buffer, associé au mot à replacer. Ex :

Code :
  1. foreach($ArrayWords as $w => $CurrentWord)
  2. {
  3.    $CurrentWord = strtolower($CurrentWord);
  4.  
  5.    // On fait là tout le traitement de lemnisation et recherche
  6.    if (!in_array($CurrentWord, $ArrayWordsToReplace))
  7.    {
  8.        // On fait le test d'unicité car l'étape de lemnisation peu te donner le même mot
  9.        $ArrayWordsToReplace[$CurrentWord] = "<dfn title=\"$sDefinitionTrouvee\"">$CurrentWord</dfn>";
  10.    }
  11. }


 
A la fin, pour remplacer tous les mots par leur déf, tu feras :
$sArticle = str_ireplace(array_keys($ArrayWordsToReplace), array_values($ArrayWordsToReplace), $sArticle);
 
Voilà en gros la trame de l'algo.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2235285
lord brook
Posté le 08-08-2014 à 16:43:24  profilanswer
 

Franchement, un grand merci pour toutes ces infos :)
Et j'avais pas pensé à l'unicité, mais c'est cool, ça permet d'éviter les requêtes inutiles.

n°2235286
rufo
Pas me confondre avec Lycos!
Posté le 08-08-2014 à 16:58:18  profilanswer
 

Pas de quoi ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2235473
MaybeEijOr​Not
but someone at least
Posté le 12-08-2014 à 17:02:40  profilanswer
 

Quelles requêtes inutiles? Tu récupères tous tes mots du dictionnaire d'un coup que tu places dans un array, tu ne vas pas consulter ta bdd à chaque mon de ton texte, parce que là oui ça va être un massacre.

n°2236072
rufo
Pas me confondre avec Lycos!
Posté le 24-08-2014 à 20:47:51  profilanswer
 

requête inutile = rechercher x fois le même mot qui apparaîtrait plusieurs fois dans l'article.
Il vaut mieux faire la recherche dans la BD car un dico entier (environ 300000 mots pour Lexique3) dans un array, ça va ramer grave en PHP et faire exploser la RAM.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2236643
MaybeEijOr​Not
but someone at least
Posté le 30-08-2014 à 14:14:07  profilanswer
 

Évidemment mais je ne vois pas qui aurait besoin de 300000 mots, même s'il veut utiliser une bibliothèque il a intérêt à ne garder que les mots qui l'intéresse. Enfin après je ne connais pas la finalité.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2236650
rufo
Pas me confondre avec Lycos!
Posté le 30-08-2014 à 19:23:57  profilanswer
 

Une BD de 300000 comme Lexique3, ça prend seulement qq Mo et très rapide à exploiter quand transformée en BD Mysql. Vu que c'est pour des articles, il y aura un grand nb de mots (avec toutes leurs formes conjuguées ou déclinées). Il va pas s'amuser à virer ce qui ne lui sert pas car bien difficile d'évaluer les mots utilisés par les auteurs et ça serait bien long à faire. En plus, le jour où un auteur va utiliser un mot non présent dans le dico, faudra le remettre.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  lier les mots d'un texte à un dictionnaire

 

Sujets relatifs
[WORD] Remplacent de texteCapturer un texte variable dans une... variable
Générer un texte à partir de variableInsérer un séparateur dans un fichier texte
[Ada] Ecrire un éditeur de texte en mode texte[BATCH] Génerer un fichier texte et écrire dedans [...]
[python] nom de champ d'un dictionnaire en variableCouper des champs particuliers du fichier texte
importation de valeur de cellule dans un texte sous excel[Problème Maro Vba ] Exporter une colonne en fichier Texte.
Plus de sujets relatifs à : lier les mots d'un texte à un dictionnaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR