Пример #1
0
 /**
  * Return $word in singular form.
  *
  * @param string $word Word in plural
  * @return string Word in singular
  * @access public
  * @static
  */
 function singularize($word)
 {
     $_this =& Inflector::getInstance();
     if (!isset($_this->singularRules) || empty($_this->singularRules)) {
         $_this->__initSingularRules();
     }
     if (isset($_this->singularized[$word])) {
         return $_this->singularized[$word];
     }
     extract($_this->singularRules);
     if (!isset($regexUninflected) || !isset($regexIrregular)) {
         $regexUninflected = __enclose(join('|', $uninflected));
         $regexIrregular = __enclose(join('|', array_keys($irregular)));
         $_this->singularRules['regexUninflected'] = $regexUninflected;
         $_this->singularRules['regexIrregular'] = $regexIrregular;
     }
     if (preg_match('/(.*)\\b(' . $regexIrregular . ')$/i', $word, $regs)) {
         $_this->singularized[$word] = $regs[1] . substr($word, 0, 1) . substr($irregular[strtolower($regs[2])], 1);
         return $_this->singularized[$word];
     }
     if (preg_match('/^(' . $regexUninflected . ')$/i', $word, $regs)) {
         $_this->singularized[$word] = $word;
         return $word;
     }
     foreach ($singularRules as $rule => $replacement) {
         if (preg_match($rule, $word)) {
             $_this->singularized[$word] = preg_replace($rule, $replacement, $word);
             return $_this->singularized[$word];
         }
     }
     $_this->singularized[$word] = $word;
     return $word;
 }
Пример #2
0
 /**
  * Return $word in singular form.
  *
  * @param string $word Word in plural
  * @return string Word in singular
  */
 function singularize($word)
 {
     $coreSingularRules = array('/(s)tatuses$/i' => '\\1\\2tatus', '/(matr)ices$/i' => '\\1ix', '/(vert|ind)ices$/i' => '\\1ex', '/^(ox)en/i' => '\\1', '/(alias)es$/i' => '\\1', '/([octop|vir])i$/i' => '\\1us', '/(cris|ax|test)es$/i' => '\\1is', '/(shoe)s$/i' => '\\1', '/(o)es$/i' => '\\1', '/(bus)es$/i' => '\\1', '/([m|l])ice$/i' => '\\1ouse', '/(x|ch|ss|sh)es$/i' => '\\1', '/(m)ovies$/i' => '\\1\\2ovie', '/(s)eries$/i' => '\\1\\2eries', '/([^aeiouy]|qu)ies$/i' => '\\1y', '/([lr])ves$/i' => '\\1f', '/(tive)s$/i' => '\\1', '/(hive)s$/i' => '\\1', '/(drive)s$/i' => '\\1', '/([^f])ves$/i' => '\\1fe', '/(^analy)ses$/i' => '\\1sis', '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\\1\\2sis', '/([ti])a$/i' => '\\1um', '/(p)eople$/i' => '\\1\\2erson', '/(m)en$/i' => '\\1an', '/(c)hildren$/i' => '\\1\\2hild', '/(n)ews$/i' => '\\1\\2ews', '/s$/i' => '');
     $coreUninflectedSingular = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*rice', '.*sheep', 'Amoyese', 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'Congoese', 'contretemps', 'corps', 'debris', 'diabetes', 'djinn', 'eland', 'elk', 'equipment', 'Faroese', 'flounder', 'Foochowese', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti', 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'Kiplingese', 'Kongoese', 'Lucchese', 'mackerel', 'Maltese', 'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', 'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese', 'proceedings', 'rabies', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass', 'series', 'Shavese', 'shears', 'siemens', 'species', 'swine', 'testes', 'trousers', 'trout', 'tuna', 'Vermontese', 'Wenchowese', 'whiting', 'wildebeest', 'Yengeese');
     $coreIrregularSingular = array('atlases' => 'atlas', 'beefs' => 'beef', 'brothers' => 'brother', 'children' => 'child', 'corpuses' => 'corpus', 'cows' => 'cow', 'ganglions' => 'ganglion', 'genies' => 'genie', 'genera' => 'genus', 'graffiti' => 'graffito', 'hoofs' => 'hoof', 'loaves' => 'loaf', 'men' => 'man', 'monies' => 'money', 'mongooses' => 'mongoose', 'moves' => 'move', 'mythoi' => 'mythos', 'numina' => 'numen', 'occiputs' => 'occiput', 'octopuses' => 'octopus', 'opuses' => 'opus', 'oxen' => 'ox', 'penises' => 'penis', 'people' => 'person', 'sexes' => 'sex', 'soliloquies' => 'soliloquy', 'testes' => 'testis', 'trilbys' => 'trilby', 'turfs' => 'turf');
     $singularRules = $coreSingularRules;
     $uninflected = $coreUninflectedSingular;
     $irregular = $coreIrregularSingular;
     $regexUninflected = __enclose(join('|', $uninflected));
     $regexIrregular = __enclose(join('|', array_keys($irregular)));
     if (preg_match('/^(' . $regexUninflected . ')$/i', $word, $regs)) {
         return $word;
     }
     if (preg_match('/(.*)\\b(' . $regexIrregular . ')$/i', $word, $regs)) {
         return $regs[1] . $irregular[strtolower($regs[2])];
     }
     foreach ($singularRules as $rule => $replacement) {
         if (preg_match($rule, $word)) {
             return preg_replace($rule, $replacement, $word);
         }
     }
     return $word;
 }