Exemplo n.º 1
0
 public function segmenter($texte)
 {
     $paras = array();
     if (test_pcre_unicode()) {
         $punct = '([[:punct:]]|' . plage_punct_unicode() . ')';
         $mode = 'u';
     } else {
         // Plages de poncutation pour preg_match bugge (ha ha)
         $punct = '([^\\w\\s\\x80-\\xFF]|' . plage_punct_unicode() . ')';
         $mode = '';
     }
     $preg = '/(' . $punct . '+)(\\s+|$)|(\\s+)(' . $punct . '*)/' . $mode;
     while (preg_match($preg, $texte, $regs)) {
         $p = strpos($texte, $regs[0]);
         $l = strlen($regs[0]);
         $punct = $regs[1] ? $regs[1] : $regs[6];
         $milieu = "";
         if ($punct) {
             // notes
             if ($punct == '[[') {
                 $avant = substr($texte, 0, $p) . $regs[5] . $punct;
                 $texte = $regs[4] . substr($texte, $p + $l);
             } else {
                 if ($punct == ']]') {
                     $avant = substr($texte, 0, $p) . $regs[5] . $punct;
                     $texte = substr($texte, $p + $l);
                 } else {
                     if (preg_match(',^[\\]}]+$,', $punct)) {
                         $avant = substr($texte, 0, $p) . (isset($regs[5]) ? $regs[5] : '') . $punct;
                         $texte = $regs[4] . substr($texte, $p + $l);
                     } else {
                         if (isset($regs[5]) && $regs[5] && preg_match(',^[\\[{]+$,', $punct)) {
                             $avant = substr($texte, 0, $p) . $regs[5];
                             $texte = $punct . substr($texte, $p + $l);
                         } else {
                             $avant = substr($texte, 0, $p);
                             $milieu = $regs[0];
                             $texte = substr($texte, $p + $l);
                         }
                     }
                 }
             }
         } else {
             $avant = substr($texte, 0, $p + $l);
             $texte = substr($texte, $p + $l);
         }
         if ($avant) {
             $paras[] = $avant;
         }
         if ($milieu) {
             $paras[] = $milieu;
         }
     }
     if ($texte) {
         $paras[] = $texte;
     }
     return $paras;
 }
Exemplo n.º 2
0
/**
 * Renvoie une plage de caractères alphanumeriques unicodes (incomplet...)
 *
 * Retourne pour une expression rationnelle une plage
 * de caractères alphanumériques à utiliser entre crochets [$plage]
 *
 * @internal
 *    N'est pas utilisé
 *    Servait à inc/ortho passé dans le grenier
 * @return string
 *    Plage de caractères
 **/
function pcre_lettres_unicode()
{
    static $plage_unicode;
    if (!$plage_unicode) {
        if (test_pcre_unicode()) {
            // cf. http://www.unicode.org/charts/
            $plage_unicode = '\\w' . '\\x{100}-\\x{24f}' . '\\x{300}-\\x{1cff}';
        } else {
            // fallback a trois sous
            $plage_unicode = '\\w';
        }
    }
    return $plage_unicode;
}
Exemplo n.º 3
0
function pcre_lettres_unicode() {
	static $plage_unicode;

	if (!$plage_unicode) {
		if (test_pcre_unicode()) {
			// cf. http://www.unicode.org/charts/
			$plage_unicode = '\w' // iso-latin
				. '\x{100}-\x{24f}' // europeen etendu
				. '\x{300}-\x{1cff}' // des tas de trucs
			;
		}
		else {
			// fallback a trois sous
			$plage_unicode = '\w';
		}
	}
	return $plage_unicode;
}
Exemplo n.º 4
0
	function segmenter($texte) {
		$paras = array();
		if (test_pcre_unicode()) {
			$punct = '([[:punct:]]|'.plage_punct_unicode().')';
			$mode = 'u';
		}
		else {
			// Plages de poncutation pour preg_match bugge (ha ha)
			$punct = '([^\w\s\x80-\xFF]|'.plage_punct_unicode().')';
			$mode = '';
		}
		$preg = '/('.$punct.'+)(\s+|$)|(\s+)('.$punct.'*)/'.$mode;
		while (preg_match($preg, $texte, $regs)) {
			$p = strpos($texte, $regs[0]);
			$l = strlen($regs[0]);
			$punct = $regs[1] ? $regs[1] : $regs[6];
			$milieu = "";
			if ($punct) {
				// notes
				if ($punct == '[[') {
					$avant = substr($texte, 0, $p) . $regs[5] . $punct;
					$texte = $regs[4] . substr($texte, $p + $l);
				}
				else
				if ($punct == ']]') {
					$avant = substr($texte, 0, $p) . $regs[5] . $punct;
					$texte = substr($texte, $p + $l);
				}
				// Attacher les raccourcis fermants au mot precedent
				else
				if (preg_match(',^[\]}]+$,', $punct)) {
					$avant = substr($texte, 0, $p) . $regs[5] . $punct;
					$texte = $regs[4] . substr($texte, $p + $l);
				}
				// Attacher les raccourcis ouvrants au mot suivant
				else if ($regs[5] && preg_match(',^[\[{]+$,', $punct)) {
					$avant = substr($texte, 0, $p) . $regs[5];
					$texte = $punct . substr($texte, $p + $l);
				}
				// Les autres signes de ponctuation sont des mots a part entiere
				else {
					$avant = substr($texte, 0, $p);
					$milieu = $regs[0];
					$texte = substr($texte, $p + $l);
				}
			}
			else {
				$avant = substr($texte, 0, $p + $l);
				$texte = substr($texte, $p + $l);
			}
			if ($avant) $paras[] = $avant;
			if ($milieu) $paras[] = $milieu;
		}
		if ($texte) $paras[] = $texte;
		return $paras;
	}