Script PHP de calcul de similarité par comparaison de mots.

Conseils, trucs et astuces pour progresser avec les différents languages de programmation. Apprenez à coder comme un pro ! Html, CSS, JS, PHP.

Créer une réponse à ce sujet

Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

partagepartagepartage
Il y a 2 messages dans cette section.
Page 1 sur 1
Créer un nouveau Sujet sur le Forum

Script PHP de calcul de similarité par comparaison de mots.

Message :N°1  Message

par
» Mer 12 Nov 2014 13:59

Code: Tout sélectionner

function extractSentence($string) {
   $return_array = Array();    
   foreach(preg_split("/[.!\n?;]+/",$string) as $element) {
      $element = trim($element);
      if (!empty($element))
         $return_array[] = $element;
   }
   return $return_array;
}

header('Cache-Control: no-cache');
header('Expires: -1');
header('Content-Type: text/html; charset=utf-8');

// Document source
$doc1 = "Je travaille dans le référencement. C’est un métier passionnant.";
// Document a tester
$doc2 = "Sur internet le métier sur le référencement est intéressant. c’est mon métier qui est passionnant.";

print 'DOC1 Texte Source:
'.$doc1.'
';
print 'DOC2 Texte a controler:
'.$doc2.'
';

echo "
";

// Post Traitement
// Conversion en minuscule
$doc1 = strtolower($doc1);
$doc2 = strtolower($doc2);

// Recherche des phrases.
$sentenceOrg = extractSentence($doc1);
$sentenceDup = extractSentence($doc2);

// On recherche tous les mots des phrases
$sentenceOrgCount = 0;
while (isset($sentenceOrg[$sentenceOrgCount]))
   $wordsOrg[] = array_unique(preg_split("/[\s,]+/", $sentenceOrg[$sentenceOrgCount++]));
$sentenceDupCount = 0;
while (isset($sentenceDup[$sentenceDupCount]))
   $wordsDup[] = array_unique(preg_split("/[\s,]+/", $sentenceDup[$sentenceDupCount++]));

// Comparaison des phrases mot par mot.
while ($wordsDupElement = current($wordsDup))
{
   while ($wordsOrgElement = current($wordsOrg))
   {
      $total = 0;
      foreach($wordsDupElement as $wordDupElement)
         if (in_array($wordDupElement, $wordsOrgElement))
            $total++;
      $percentSimilarity = round($total/count($wordsDupElement) * 100, 2);
      $resultSimilarity[$sentenceDup[key($wordsDup)]][$sentenceOrg[key($wordsOrg)]] = $percentSimilarity;
      $resultSimilarity[$sentenceDup[key($wordsDup)]]['max'] = max($resultSimilarity[$sentenceDup[key($wordsDup)]]);
      $resultSimilarity[$sentenceDup[key($wordsDup)]]['hit'] = 0;
      next($wordsOrg);
   }
   reset($wordsOrg);
    next($wordsDup);
}
reset($wordsDup);

$tolerance = 50;
$score = 0;
while($results = current($resultSimilarity))
{
   if ($results['max'] > $tolerance)
   {
      $score = $score + $results['max'];
      $resultSimilarity[key($resultSimilarity)]['hit'] = 1;
   }   
    next($resultSimilarity);
}
reset($resultSimilarity);

// Resultats
echo "Tolerance: ".$tolerance."%
";
echo "DOC2 Score: ".$score/count($resultSimilarity)." % similaire.
";
while($results = current($resultSimilarity))
{
   if ($results['hit'] == 1)
      echo "=> ".key($resultSimilarity)."
";
      
    next($resultSimilarity);
}
reset($resultSimilarity);
  • 0

Avatar de l’utilisateur
GHS Team
 
Messages: 5118
Inscription: Dim 22 Déc 2013 16:17
Localisation: Europe & Asie
Réputation: 1205
Récompenses: 12
Membre Contributeur (1) Protecteur de GHS Tools (1) Membre Financeur (1) + 100 Posts sur le Forum (1) + 200 Posts sur le Forum (1) Le meilleur Posteur (1) Traducteur (Anglais / Chinois) (1) Rédaction & Correction FR (1) Traducteur (Français /Anglais) (1) Développeur WEB (1)

Re: Script PHP de calcul de similarité par comparaison de m

Message :N°2  Message

par
» Mer 12 Nov 2014 14:00

Complément a tester :

function delStopWords($tab)
{
$newtab = array();
$stopWords = array(“à”,”mais”, “ou”, “où”, “et”, “donc”, “or”, “ni”, “car”, “puis”, “le”, “la”, “là”, “les”, “de”, “du”, “des”, “au”,”ce”,”si”,”ci”,”je”,”tu”,”il”,”elle”,”nous”,”vous”,”ils”,”elles”,”on”,”mes”,”tes”,”ses”,”mon”,”ton”,”ma”,”ta”,”sa”,”que”,”quel”,”quelle”,”quelles”,”quels”);

$i=0;

foreach($tab as $cle => $phrase)
{
foreach ($phrase as $words)
{
if ( !(in_array($words,$stopWords)))
{
$newtab[$cle][$i]=$words;
$i++;
}
}
}
return $newtab;

}
####################
Cette fonction prend en paramètre un tableau multidimentionel de mot.
Exemple: $newtab[0][2] représente le 3emme mots de la 2emme phrase. Ce qui correspond exactement au script.

ensuite il suffit d’ajouter: $wordsOrg=delStopWords($wordsOrg); aprés le remplissage de la variable $wordsOrg et faire de méme avec la variable $wordsDup.
  • 0

Avatar de l’utilisateur
GHS Team
 
Messages: 5118
Inscription: Dim 22 Déc 2013 16:17
Localisation: Europe & Asie
Réputation: 1205
Récompenses: 12
Membre Contributeur (1) Protecteur de GHS Tools (1) Membre Financeur (1) + 100 Posts sur le Forum (1) + 200 Posts sur le Forum (1) Le meilleur Posteur (1) Traducteur (Anglais / Chinois) (1) Rédaction & Correction FR (1) Traducteur (Français /Anglais) (1) Développeur WEB (1)


Répondre à ce sujet du Forum

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 303 invités

Retourner vers Programmation