Skip to content
Snippets Groups Projects

Performance improvements

Merged Laurent requested to merge performance_improvements into master
Compare and
10 files
+ 507
143
Preferences
Compare changes
Files
10
+ 89
126
@@ -22,25 +22,74 @@
class Class_Indexation {
protected static
$_instance,
$_alpha_maj_cache = [];
private $articles; // Articles rejetes
private $inclu; // Mots inclus
private $exclu; // Mots vides
private $pluriel; // Règles des pluriels
private $tableMajFrom, $tableMajTo = []; // Table de transco pour majuscules
private $tableMajUtf8; // Table de transco pour majuscules accentuées utf8
private $accents = ['É' => 'E', 'È' => 'E', 'Ë' => 'E', 'Ê' => 'E','Á' => 'A', 'À' => 'A', 'Ä' => 'A', 'Â' => 'A',
'Å' => 'A', 'Ã' => 'A', 'Æ' => 'E','Ï' => 'I', 'Î' => 'I', 'Ì' => 'I', 'Í' => 'I',
'Ô' => 'O', 'Ö' => 'O', 'Ò' => 'O', 'Ó' => 'O', 'Õ' => 'O', 'Ø' => 'O', 'Œ' => 'OEU',
'Ú' => 'U', 'Ù' => 'U', 'Û' => 'U', 'Ü' => 'U','Ñ' => 'N', 'Ç' => 'S', '¿' => 'E'];
private $min2maj = ['é' => 'É', 'è' => 'È', 'ë' => 'Ë', 'ê' => 'Ê','á' => 'Á', 'â' => 'Â', 'à' => 'À', 'Ä' => 'A',
'Â' => 'A', 'å' => 'Å', 'ã' => 'Ã', 'æ' => 'Æ', 'ï' => 'Ï', 'î' => 'Î', 'ì' => 'Ì', 'í' => 'Í',
'ô' => 'Ô', 'ö' => 'Ö', 'ò' => 'Ò', 'ó' => 'Ó','õ' => 'Õ', 'ø' => 'Ø', 'œ' => 'Œ',
'ú' => 'Ú', 'ù' => 'Ù', 'û' => 'Û', 'ü' => 'Ü','ç' => 'Ç', 'ñ' => 'Ñ', 'ß' => 'S'];
$_alpha_maj_cache = [],
$_accents = ['É' => 'E', 'È' => 'E', 'Ë' => 'E', 'Ê' => 'E','Á' => 'A', 'À' => 'A', 'Ä' => 'A', 'Â' => 'A',
'Å' => 'A', 'Ã' => 'A', 'Æ' => 'E','Ï' => 'I', 'Î' => 'I', 'Ì' => 'I', 'Í' => 'I',
'Ô' => 'O', 'Ö' => 'O', 'Ò' => 'O', 'Ó' => 'O', 'Õ' => 'O', 'Ø' => 'O', 'Œ' => 'OEU',
'Ú' => 'U', 'Ù' => 'U', 'Û' => 'U', 'Ü' => 'U','Ñ' => 'N', 'Ç' => 'S', '¿' => 'E'],
$_min2maj = ['é' => 'É', 'è' => 'È', 'ë' => 'Ë', 'ê' => 'Ê','á' => 'Á', 'â' => 'Â', 'à' => 'À', 'Ä' => 'A',
'Â' => 'A', 'å' => 'Å', 'ã' => 'Ã', 'æ' => 'Æ', 'ï' => 'Ï', 'î' => 'Î', 'ì' => 'Ì', 'í' => 'Í',
'ô' => 'Ô', 'ö' => 'Ö', 'ò' => 'Ò', 'ó' => 'Ó','õ' => 'Õ', 'ø' => 'Ø', 'œ' => 'Œ',
'ú' => 'Ú', 'ù' => 'Ù', 'û' => 'Û', 'ü' => 'Ü','ç' => 'Ç', 'ñ' => 'Ñ', 'ß' => 'S'],
$_articles = ['L\'','LE ','LA ','LES ','UN ','UNE '],
$_inclu = ['AN','AS','OR','U2','AI','LU','XO','DO','RE','MI','FA','SI','AC','DC','XX','B','C','D','E','F','G','H','I','J','K','M','P','Q','R','S','T','V','W','X','Y','Z','L','YU','UT','LI','OC','PI','ZU','WU','TO','OZ','ZZ','XX', 'PC', 'DS'],
$_exclu = ['L','LE','LA','LES','UN','UNE','LES','DES','MES','TES','CES'],
$_pluriel = [ ['AIL','AULX'],
['AVAL','AVALS'],
['BAIL','BAUX'],
['BAL','BALS'],
['BANAL','BANALS'],
['BANCAL','BANCALS'],
['BIJOU','BIJOUX'],
['BLEU','BLEUS'],
['CAILLOU','CAILLOUX'],
['CAL','CALS'],
['CARNAVAL','CARNAVALS'],
['CEREMONIAL','CEREMONIALS'],
['CHACAL','CHACALS'],
['CHORAL','CHORALS'],
['CHOU','CHOUX'],
['CORAIL','CORAUX'],
['DETAIL','DETAILS'],
['EMAIL','EMAUX'],
['EMEU','EMEUS'],
['ETAL','ETALS'],
['FATAL','FATALS'],
['FESTIVAL','FESTIVALS'],
['GEMMAIL','GEMMAUX'],
['GENOU','GENOUX'],
['HIBOU','HIBOUX'],
['JOUJOU','JOUJOUX'],
['LANDAU','LANDAUX'],
['NATAL','NATALS'],
['OEIL','YEUX'],
['PAL','PALS'],
['PNEU','PNEUS'],
['POU','POUX'],
['RECITAL','RECITALS'],
['REGAL','REGALS'],
['SARRAU','SARRAUS'],
['SOUPIRAIL','SOUPIRAUX'],
['TONAL','TONALS'],
['TRAVAIL','TRAVAUX'],
['VAL','VALS'],
['VENTAIL','VENTAUX'],
['VIRGINAL','VIRGINALS'],
['VITRAIL','VITRAUX'],
['*EAU','*EAUX'],
['*AL','*AUX'],
['*EU','*EUX'],
['*AU','*AUX'],
['PC','PC'],
['DS','DS']],
$_tableMajFrom,
$_tableMajTo;
public static function getInstance() {
if(!static::$_instance)
@@ -50,104 +99,18 @@ class Class_Indexation {
function __construct() {
// Lire formes rejetées
$this->articles = ['L\'','LE ','LA ','LES ','UN ','UNE '];
$this->inclu = ['AN','AS','OR','U2','AI','LU','XO','DO','RE','MI','FA','SI','AC','DC','XX','B','C','D','E','F','G','H','I','J','K','M','P','Q','R','S','T','V','W','X','Y','Z','L','YU','UT','LI','OC','PI','ZU','WU','TO','OZ','ZZ','XX', 'PC', 'DS'];
$this->exclu = ['L','LE','LA','LES','UN','UNE','LES','DES','MES','TES','CES'];
// Pluriels
$this->pluriel = [ ['AIL','AULX'],
['AVAL','AVALS'],
['BAIL','BAUX'],
['BAL','BALS'],
['BANAL','BANALS'],
['BANCAL','BANCALS'],
['BIJOU','BIJOUX'],
['BLEU','BLEUS'],
['CAILLOU','CAILLOUX'],
['CAL','CALS'],
['CARNAVAL','CARNAVALS'],
['CEREMONIAL','CEREMONIALS'],
['CHACAL','CHACALS'],
['CHORAL','CHORALS'],
['CHOU','CHOUX'],
['CORAIL','CORAUX'],
['DETAIL','DETAILS'],
['EMAIL','EMAUX'],
['EMEU','EMEUS'],
['ETAL','ETALS'],
['FATAL','FATALS'],
['FESTIVAL','FESTIVALS'],
['GEMMAIL','GEMMAUX'],
['GENOU','GENOUX'],
['HIBOU','HIBOUX'],
['JOUJOU','JOUJOUX'],
['LANDAU','LANDAUX'],
['NATAL','NATALS'],
['OEIL','YEUX'],
['PAL','PALS'],
['PNEU','PNEUS'],
['POU','POUX'],
['RECITAL','RECITALS'],
['REGAL','REGALS'],
['SARRAU','SARRAUS'],
['SOUPIRAIL','SOUPIRAUX'],
['TONAL','TONALS'],
['TRAVAIL','TRAVAUX'],
['VAL','VALS'],
['VENTAIL','VENTAUX'],
['VIRGINAL','VIRGINALS'],
['VITRAIL','VITRAUX'],
['*EAU','*EAUX'],
['*AL','*AUX'],
['*EU','*EUX'],
['*AU','*AUX'],
['PC','PC'],
['DS','DS']];
// Init table ascii pour majuscules
$this->tableMajTo = str_split(str_repeat( ' ', 42 )
. '* 0123456789 '
. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '
. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '
. str_repeat( ' ', 63)
.'AAAAAAACEEEEIIII NOOOOO UUUUY AAAAAAACEEEEIIII NOOOOO UUUUY Y');
for($i=0; $i<count($this->tableMajTo); $i++)
$this->tableMajFrom[] = chr($i);
$this->tableMajUtf8 = [chr(0xC9) => 'E',
'È' => 'E',
'Ë' => 'E',
'Ê' => 'E',
'Á' => 'A',
'À' => 'A',
'Ä' => 'A',
'Â' => 'A',
'Å' => 'A',
'Ã' => 'A',
'Æ' => 'E',
'Ï' => 'I',
'Î' => 'I',
'Ì' => 'I',
'Í' => 'I',
'Ô' => 'O',
'Ö' => 'O',
'Ò' => 'O',
'Ó' => 'O',
'Õ' => 'O',
'Ø' => 'O',
'Œ' => 'OEU',
'Ú' => 'U',
'Ù' => 'U',
'Û' => 'U',
'Ü' => 'U',
'Ñ' => 'N',
'Ç' => 'S',
'¿' => 'E'];
if (isset(static::$_tableMajTo))
return;
static::$_tableMajTo = str_split(str_repeat( ' ', 42 )
. '* 0123456789 '
. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '
. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '
. str_repeat( ' ', 63)
.'AAAAAAACEEEEIIII NOOOOO UUUUY AAAAAAACEEEEIIII NOOOOO UUUUY Y');
for($i=0; $i<count(static::$_tableMajTo); $i++)
static::$_tableMajFrom[] = chr($i);
}
@@ -155,7 +118,7 @@ class Class_Indexation {
public function codeAlphaTitre($titre)
{
$titre=$this->alphaMaj($titre);
foreach($this->articles as $article)
foreach(static::$_articles as $article)
{
$lg=strlen($article);
if(strLeft($titre, $lg)==$article) {$titre=strMid($titre,$lg,256); break;}
@@ -186,8 +149,8 @@ class Class_Indexation {
if (isset(static::$_alpha_maj_cache[$chaine]))
return static::$_alpha_maj_cache[$chaine];
return static::$_alpha_maj_cache[$chaine] = trim(str_replace($this->tableMajFrom,
$this->tableMajTo,
return static::$_alpha_maj_cache[$chaine] = trim(str_replace(static::$_tableMajFrom,
static::$_tableMajTo,
utf8_decode($chaine)));
}
@@ -222,14 +185,14 @@ class Class_Indexation {
foreach($words as $word) {
if(strlen($word) < 3 && intVal($word) == false) {
if(false == in_array($word, $this->inclu))
if(false == in_array($word, static::$_inclu))
continue;
if( 1 == strlen($word))
$word .= '00';
}
if(true == in_array($word, $this->exclu))
if(true == in_array($word, static::$_exclu))
continue;
$new[] = $word;
@@ -266,7 +229,7 @@ class Class_Indexation {
{
if( strToUpper($mot) != $mot ) $mot=$this->alphaMaj($mot);
if(!trim($mot)) return false;
foreach($this->pluriel as $regle)
foreach(static::$_pluriel as $regle)
{
if(strLeft($regle[0],1) != '*')
{
@@ -296,7 +259,7 @@ class Class_Indexation {
// ---------------------------------------------------
public function isMotInclu($mot)
{
return in_array($mot, $this->inclu);
return in_array($mot, static::$_inclu);
}
// ---------------------------------------------------
@@ -309,8 +272,8 @@ class Class_Indexation {
}
function phonetixCompute($sIn) {
$sIn = strtr( $sIn, $this->accents); // minuscules accentuées ou composées en majuscules simples
$sIn = strtr( $sIn, $this->min2maj); // majuscules accentuées ou composées en majuscules simples
$sIn = strtr( $sIn, static::$_accents); // minuscules accentuées ou composées en majuscules simples
$sIn = strtr( $sIn, static::$_min2maj); // majuscules accentuées ou composées en majuscules simples
$sIn = strtoupper( $sIn ); // on passe tout le reste en majuscules
$sIn = preg_replace( '`[^A-Z]`', '', $sIn ); // on garde uniquement les lettres de A à Z