Поиграть


Фотографии знаменитостей, Герои нашего времени

Морфологическая схожесть слов (php)

Code (php)
  1.  
  2. <?php
  3.  
  4. //——————————————————————————
  5.  
  6. function dmword($string, $is_cyrillic = true)
  7. {       
  8.         static $codes = array(
  9.                 ‘A’ =>  array(array(0, -1, -1),
  10.                         ‘I’ =>  array(array(0, 1, -1)),
  11.                         ‘J’ =>  array(array(0, 1, -1)),
  12.                         ‘Y’ =>  array(array(0, 1, -1)),
  13.                         ‘U’ =>  array(array(0, 7, -1))),
  14.  
  15.                 ‘B’ =>  array(array(7, 7, 7)),
  16.  
  17.                 ‘C’ =>  array(array(5, 5, 5), array(4, 4, 4),
  18.                         ‘Z’ =>  array(array(4, 4, 4),
  19.                                 ‘S’ =>  array(array(4, 4, 4))),
  20.                         ‘S’ =>  array(array(4, 4, 4),
  21.                                 ‘Z’ =>  array(array(4, 4, 4))),
  22.                         ‘K’ =>  array(array(5, 5, 5), array(45, 45, 45)),
  23.                         ‘H’ =>  array(array(5, 5, 5), array(4, 4, 4),
  24.                                 ‘S’ =>  array(array(5, 54, 54)))),
  25.  
  26.                 ‘D’ =>  array(array(3, 3, 3),
  27.                         ‘T’ =>  array(array(3, 3, 3)),
  28.                         ‘Z’ =>  array(array(4, 4, 4),
  29.                                 ‘H’ =>  array(array(4, 4, 4)),
  30.                                 ‘S’ =>  array(array(4, 4, 4))),
  31.                         ‘S’ =>  array(array(4, 4, 4),
  32.                                 ‘H’ =>  array(array(4, 4, 4)),
  33.                                 ‘Z’ =>  array(array(4, 4, 4))),
  34.                         ‘R’ =>  array(
  35.                                 ‘S’ =>  array(array(4, 4, 4)),
  36.                                 ‘Z’ =>  array(array(4, 4, 4)))),
  37.  
  38.                 ‘E’ =>  array(array(0, -1, -1),
  39.                         ‘I’ =>  array(array(0, 1, -1)),
  40.                         ‘J’ =>  array(array(0, 1, -1)),
  41.                         ‘Y’ =>  array(array(0, 1, -1)),
  42.                         ‘U’ =>  array(array(1, 1, -1))),
  43.  
  44.                 ‘F’ =>  array(array(7, 7, 7),
  45.                         ‘B’ =>  array(array(7, 7, 7))),
  46.  
  47.                 ‘G’ =>  array(array(5, 5, 5)),
  48.  
  49.                 ‘H’ =>  array(array(5, 5, -1)),
  50.  
  51.                 ‘I’ =>  array(array(0, -1, -1),
  52.                         ‘A’ =>  array(array(1, -1, -1)),
  53.                         ‘E’ =>  array(array(1, -1, -1)),
  54.                         ‘O’ =>  array(array(1, -1, -1)),
  55.                         ‘U’ =>  array(array(1, -1, -1))),
  56.  
  57.                 ‘J’     =>   array(array(4, 4, 4)),
  58.  
  59.                 ‘K’ =>  array(array(5, 5, 5),
  60.                         ‘H’ =>  array(array(5, 5, 5)),
  61.                         ‘S’ =>  array(array(5, 54, 54))),
  62.  
  63.                 ‘L’ =>  array(array(8, 8, 8)),
  64.  
  65.                 ‘M’ =>  array(array(6, 6, 6),
  66.                         ‘N’ =>  array(array(66, 66, 66))),
  67.  
  68.                 ‘N’ =>  array(array(6, 6, 6),
  69.                         ‘M’ =>  array(array(66, 66, 66))),
  70.  
  71.                 ‘O’ =>  array(array(0, -1, -1),
  72.                         ‘I’ =>  array(array(0, 1, -1)),
  73.                         ‘J’ =>  array(array(0, 1, -1)),
  74.                         ‘Y’ =>  array(array(0, 1, -1))),
  75.  
  76.                 ‘P’ =>  array(array(7, 7, 7),
  77.                         ‘F’     =>   array(array(7, 7, 7)),
  78.                         ‘H’     =>   array(array(7, 7, 7))),
  79.  
  80.                 ‘Q’ =>  array(array(5, 5, 5)),
  81.  
  82.                 ‘R’ =>  array(array(9, 9, 9),
  83.                         ‘Z’     =>   array(array(94, 94, 94), array(94, 94, 94)), // special case
  84.                         ‘S’ =>  array(array(94, 94, 94), array(94, 94, 94))), // special case
  85.  
  86.                 ‘S’ =>  array(array(4, 4, 4),
  87.                         ‘Z’ =>  array(array(4, 4, 4),
  88.                                 ‘T’ =>  array(array(2, 43, 43)),
  89.                                 ‘C’ =>  array(
  90.                                         ‘Z’ => array(array(2, 4, 4)),
  91.                                         ‘S’ => array(array(2, 4, 4))),
  92.                                 ‘D’ =>  array(array(2, 43, 43))),
  93.                         ‘D’ =>  array(array(2, 43, 43)),
  94.                         ‘T’ =>  array(array(2, 43, 43),
  95.                                 ‘R’     =>   array(
  96.                                         ‘Z’ =>  array(array(2, 4, 4)),
  97.                                         ‘S’ =>  array(array(2, 4, 4))),
  98.                                 ‘C’ =>  array(
  99.                                         ‘H’ =>  array(array(2, 4, 4))),
  100.                                 ‘S’ =>  array(
  101.                                         ‘H’     =>   array(array(2, 4, 4)),
  102.                                         ‘C’ =>  array(
  103.                                                 ‘H’ =>  array(array(2, 4, 4))))),
  104.                         ‘C’     =>   array(array(2, 4, 4),
  105.                                 ‘H’ =>  array(array(4, 4, 4),
  106.                                         ‘T’ => array(array(2, 43, 43),
  107.                                                 ‘S’ => array(
  108.                                                         ‘C’ => array(
  109.                                                                 ‘H’ =>  array(array(2, 4, 4))),
  110.                                                         ‘H’ => array(array(2, 4, 4))),
  111.                                                 ‘C’ => array(
  112.                                                         ‘H’ =>  array(array(2, 4, 4)))),
  113.                                         ‘D’ =>  array(array(2, 43, 43)))),
  114.                         ‘H’ =>  array(array(4, 4, 4),
  115.                                 ‘T’     =>   array(array(2, 43, 43),
  116.                                         ‘C’ =>  array(
  117.                                                 ‘H’ =>  array(array(2, 4, 4))),
  118.                                         ‘S’ =>  array(
  119.                                                 ‘H’ =>  array(array(2, 4, 4)))),
  120.                                 ‘C’     =>   array(
  121.                                         ‘H’ =>  array(array(2, 4, 4))),
  122.                                 ‘D’ =>  array(array(2, 43, 43)))),
  123.  
  124.                 ‘T’ =>  array(array(3, 3, 3),
  125.                         ‘C’ =>  array(array(4, 4, 4),
  126.                                 ‘H’ =>  array(array(4, 4, 4))),
  127.                         ‘Z’     =>   array(array(4, 4, 4),
  128.                                 ‘S’ =>  array(array(4, 4, 4))),
  129.                         ‘S’ =>  array(array(4, 4, 4),
  130.                                 ‘Z’ =>  array(array(4, 4, 4)),
  131.                                 ‘H’ =>  array(array(4, 4, 4)),
  132.                                 ‘C’ =>  array(
  133.                                         ‘H’ =>  array(array(4, 4, 4)))),
  134.                         ‘T’ =>  array(
  135.                                 ‘S’ =>  array(array(4, 4, 4),
  136.                                         ‘Z’ =>  array(array(4, 4, 4)),
  137.                                         ‘C’ =>  array(
  138.                                                 ‘H’ =>  array(array(4, 4, 4)))),
  139.                                 ‘C’ =>  array(
  140.                                         ‘H’ =>  array(array(4, 4, 4))),
  141.                                 ‘Z’ =>  array(array(4, 4, 4))),
  142.                         ‘H’ =>  array(array(3, 3, 3)),
  143.                         ‘R’ =>  array(
  144.                                 ‘Z’ =>  array(array(4, 4, 4)),
  145.                                 ‘S’ =>  array(array(4, 4, 4)))),
  146.  
  147.                 ‘U’ =>  array(array(0, -1, -1),
  148.                         ‘E’ =>  array(array(0, -1, -1)),
  149.                         ‘I’ =>  array(array(0, 1, -1)),
  150.                         ‘J’ =>  array(array(0, 1, -1)),
  151.                         ‘Y’ =>  array(array(0, 1, -1))),
  152.  
  153.                 ‘V’ =>  array(array(7, 7, 7)),
  154.  
  155.                 ‘W’ =>  array(array(7, 7, 7)),
  156.  
  157.                 ‘X’ =>  array(array(5, 54, 54)),
  158.  
  159.                 ‘Y’ =>  array(array(1, -1, -1)),
  160.  
  161.                 ‘Z’ =>  array(array(4, 4, 4),
  162.                         ‘D’ =>  array(array(2, 43, 43),
  163.                                 ‘Z’ =>  array(array(2, 4, 4),
  164.                                         ‘H’ =>  array(array(2, 4, 4)))),
  165.                         ‘H’ =>  array(array(4, 4, 4),
  166.                                 ‘D’ => array(array(2, 43, 43),
  167.                                         ‘Z’ =>  array(
  168.                                                 ‘H’ =>  array(array(2, 4, 4))))),
  169.                         ‘S’ =>  array(array(4, 4, 4),
  170.                                 ‘H’ =>  array(array(4, 4, 4)),
  171.                                 ‘C’ =>  array(
  172.                                         ‘H’ =>  array(array(4, 4, 4))))));
  173.  
  174.         $length = strlen($string);
  175.         $output = ;
  176.         $i = 0;
  177.  
  178.         $previous = -1;
  179.  
  180.         while ($i < $length)
  181.         {              
  182.                 $current = $last = &$codes[$string[$i]];
  183.  
  184.                 for ($j = $k = 1; $k < 7; $k++)
  185.                 {                     
  186.                         if (!isset($string[$i + $k]) ||
  187.                                 !isset($current[$string[$i + $k]]))
  188.                                 break;
  189.  
  190.                         $current = &$current[$string[$i + $k]];      
  191.  
  192.                         if (isset($current[0]))
  193.                         {
  194.                                 $last = &$current;
  195.                                 $j = $k + 1;
  196.                         }
  197.                 }
  198.  
  199.                 if ($i == 0)
  200.                         $code = $last[0][0];
  201.                 elseif (!isset($string[$i + $j]) || ($codes[$string[$i + $j]][0][0] != 0))
  202.                         $code = $is_cyrillic ? (isset($last[1]) ? $last[1][2] : $last[0][2]) : $last[0][2];
  203.                 else
  204.                         $code = $is_cyrillic ? (isset($last[1]) ? $last[1][1] : $last[0][1]) : $last[0][1];
  205.  
  206.                 if (($code != -1) && ($code != $previous))
  207.                         $output .= $code;
  208.  
  209.                 $previous = $code;
  210.  
  211.                 $i += $j;
  212.  
  213.         }
  214.  
  215.         return str_pad(substr($output, 0, 6), 6, ‘0′);
  216. }
  217.  
  218. //——————————————————————————
  219.  
  220. function dmstring($string)
  221. {
  222.         $is_cyrillic = false;
  223.         if (preg_match(‘/[Р-пр-џ]/iu’, $string) === 1)
  224.         {
  225.                 $string = translit($string);
  226.                 $is_cyrillic = true;
  227.         }
  228.  
  229.         $string = preg_replace(array(‘/[^\w\s]|\d/iu’, ‘/\b[^\s]{1,3}\b/iu’, ‘/\s{2,}/iu’, ‘/^\s+|\s+$/iu’),
  230.                 array(, , ‘ ‘), strtoupper($string));
  231.  
  232.         if (!isset($string[0]))
  233.                 return null;
  234.  
  235.         $matches = explode(‘ ‘, $string);
  236.         foreach($matches as $key => $match)
  237.                 $matches[$key] = dmword($match, $is_cyrillic);     
  238.         return $matches;
  239. }
  240.  
  241. //——————————————————————————
  242.  
  243. function translit($string)
  244. {
  245.         static $ru = array(
  246.                 ‘Р’, ‘р’, ‘С’, ‘с’, ‘Т’, ‘т’, ‘У’, ‘у’, ‘Ф’, ‘ф’, ‘Х’, ‘х’, ‘Ј’, ‘И’, ‘Ц’, ‘ц’, ‘Ч’, ‘ч’,
  247.                 ‘Ш’, ‘ш’, ‘Щ’, ‘щ’, ‘Ъ’, ‘ъ’, ‘Ы’, ‘ы’, ‘Ь’, ‘ь’, ‘Э’, ‘э’, ‘Ю’, ‘ю’, ‘Я’, ‘я’, ‘а’, ‘№’,
  248.                 ‘б’, ‘ё’, ‘в’, ‘ђ’, ‘г’, ‘ѓ’, ‘д’, ‘є’, ‘е’, ‘ѕ’, ‘ж’, ‘і’, ‘з’, ‘ї’, ‘и’, ‘ј’, ‘й’, ‘љ’,
  249.                 ‘к’, ‘њ’, ‘л’, ‘ћ’, ‘м’, ‘ќ’, ‘н’, ‘§’, ‘о’, ‘ў’, ‘п’, ‘џ’
  250.         );
  251.  
  252.         static $en = array(
  253.                 ‘A’, ‘a’, ‘B’, ‘b’, ‘V’, ‘v’, ‘G’, ‘g’, ‘D’, ‘d’, ‘E’, ‘e’, ‘E’, ‘e’, ‘Zh’, ‘zh’, ‘Z’, ‘z’,
  254.                 ‘I’, ‘i’, ‘J’, ‘j’, ‘K’, ‘k’, ‘L’, ‘l’, ‘M’, ‘m’, ‘N’, ‘n’, ‘O’, ‘o’, ‘P’, ‘p’, ‘R’, ‘r’,
  255.                 ‘S’, ’s’, ‘T’, ‘t’, ‘U’, ‘u’, ‘F’, ‘f’, ‘H’, ‘h’, ‘C’, ‘c’, ‘Ch’, ‘ch’, ‘Sh’, ’sh’, ‘Sch’, ’sch’,
  256.                 \’, \’, ‘Y’, ‘y’\’, \’, ‘E’, ‘e’, ‘Ju’, ‘ju’, ‘Ja’, ‘ja’
  257.         );
  258.  
  259.         $string = str_replace($ru, $en, $string);       
  260.         return $string;
  261. }
  262.  
  263. //——————————————————————————
  264.  
  265. echo ‘<pre>’."\n";
  266. echo ‘Ьрщъы Фцю№фрэ ‘.implode(‘ ‘, dmstring(‘Ьрщъы Фцю№фрэ’))."\n";
  267. echo ‘Michael Jordan ‘.implode(‘ ‘, dmstring(‘Michael Jordan’))."\n";
  268. echo ‘Р№эюыќф итр№іэхуух№ ‘.implode(‘ ‘, dmstring(‘Р№эюыќф итр№іэхуух№’))."\n";
  269. echo ‘Arnold Schwarzenegger ‘.implode(‘ ‘, dmstring(‘Arnold Schwarzenegger’))."\n";
  270. echo ‘Ю№эюыќф итю№іэхуш№ ‘.implode(‘ ‘, dmstring(‘Ю№эюыќф итю№іэхуш№’))."\n";
  271. echo

‘;
?>

+1+2+3+4+5 (Ещё не голосовали)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / строительство очистных сооружений
известные гостиницы в Тюмени с питанием