X-Git-Url: https://git.cyclocoop.org/%7B%24admin_url%7Dmembres/modifier.php?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fmots.php;fp=www%2Fecrire%2Finc%2Fmots.php;h=e1571b09e38c5f58db192cacc29c7fbab3220106;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git
diff --git a/www/ecrire/inc/mots.php b/www/ecrire/inc/mots.php
new file mode 100644
index 0000000..e1571b0
--- /dev/null
+++ b/www/ecrire/inc/mots.php
@@ -0,0 +1,138 @@
+ 254 caracteres
+// http://doc.spip.org/@levenshtein255
+function levenshtein255 ($a, $b) {
+ $a = substr($a, 0, 254);
+ $b = substr($b, 0, 254);
+ return @levenshtein($a,$b);
+}
+
+// reduit un mot a sa valeur translitteree et en minuscules
+// http://doc.spip.org/@reduire_mot
+function reduire_mot($mot) {
+ return strtr(
+ translitteration(trim($mot)),
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'abcdefghijklmnopqrstuvwxyz'
+ );
+}
+
+// http://doc.spip.org/@mots_ressemblants
+function mots_ressemblants($mot, $table_mots, $table_ids='') {
+
+ $result = array();
+
+ if (!$table_mots) return $result;
+
+ $lim = 2;
+ $nb = 0;
+ $opt = 1000000;
+ $mot_opt = '';
+ $mot = reduire_mot($mot);
+ $len = strlen($mot);
+
+ while (!$nb AND $lim < 10) {
+ reset($table_mots);
+ if ($table_ids) reset($table_ids);
+ while (list(, $val) = each($table_mots)) {
+ if ($table_ids) list(, $id) = each($table_ids);
+ else $id = $val;
+ $val2 = trim($val);
+ if ($val2) {
+ if (!isset($distance[$id])) {
+ $val2 = reduire_mot($val2);
+ $len2 = strlen($val2);
+ if ($val2 == $mot)
+ $m = -2; # resultat exact
+ else if (substr($val2, 0, $len) == $mot)
+ $m = -1; # sous-chaine
+ else {
+ # distance
+ $m = levenshtein255($val2, $mot);
+ # ne pas compter la distance due a la longueur
+ $m -= max(0, $len2 - $len);
+ }
+ $distance[$id] = $m;
+ } else $m = 0;
+ if ($m <= $lim) {
+ $selection[$id] = $m;
+ if ($m < $opt) {
+ $opt = $m;
+ $mot_opt = $val;
+ }
+ $nb++;
+ }
+ }
+ }
+ $lim += 2;
+ }
+
+ if (!$nb) return $result;
+ reset($selection);
+ if ($opt > -1) {
+ $moy = 1;
+ while(list(, $val) = each($selection)) $moy *= $val;
+ if($moy) $moy = pow($moy, 1.0/$nb);
+ $lim = ($opt + $moy) / 2;
+ }
+ else $lim = -1;
+
+ reset($selection);
+ while (list($key, $val) = each($selection)) {
+ if ($val <= $lim) {
+ $result[] = $key;
+ }
+ }
+ return $result;
+}
+
+
+/*
+ * Affiche la liste des mots-cles associes a l'objet specifie
+ * plus le formulaire d'ajout de mot-cle
+ */
+
+// http://doc.spip.org/@affiche_mots_ressemblant
+function affiche_mots_ressemblant($cherche_mot, $objet, $id_objet, $resultat, $table, $table_id, $url_base)
+{
+ $les_mots = sql_in('id_mot', $resultat);
+ $res = sql_allfetsel("*", "spip_mots", $les_mots, "", "titre", "17");
+
+ foreach ($res as $k => $row) {
+ $id_mot = $row['id_mot'];
+ $titre = $row['titre'];
+ $type = typo($row['type']);
+ $descriptif = $row['descriptif'];
+
+ $res[$k]= ajax_action_auteur('editer_mots', "$id_objet,,$table,$table_id,$objet,$id_mot", $url_base, "$table_id=$id_objet", array(typo($titre),' title="' . _T('info_ajouter_mot') .'"'),"&id_objet=$id_objet&objet=$objet") .
+ (!$descriptif ? '' : ("\n(".supprimer_tags(couper(propre($descriptif), 100)).")
\n"));
+
+ }
+
+ $res2 = ($type
+ ? "$type : "
+ : '' )
+ . _T('info_plusieurs_mots_trouves', array('cherche_mot' => $cherche_mot))
+ ."
";
+
+ if (count($resultat) > 17)
+ $res2 .= "
" ._T('info_trop_resultat', array('cherche_mot' => $cherche_mot)) ."
\n";
+
+ return $res2 . '