Beispiel #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;
 }
Beispiel #2
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;
	}