SHARE
TWEET

Склонятель русских имён, фамилий и отчеств по двум падежам

NokitaKaze Feb 12th, 2014 143 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /* ПРИШЛО ВРЕМЯ МОРФОЛОГИЧЕСКОГО АНАЛИЗА */
  3.  function first_letter_smart($text){return $text;}
  4.  
  5.  
  6.  
  7. // Имя
  8.  function get_given_name($given_name, $case, $gender){
  9.   $given_name=mb_strtolower($given_name);
  10.   switch($case){
  11.    case 1:return first_letter_smart($given_name);
  12.    case 2:return first_letter_smart(get_given_name_2($given_name, $gender));
  13.    case 3:return first_letter_smart(get_given_name_3($given_name, $gender));
  14.    default: return '';  
  15.   }
  16.  }
  17.  
  18. // Отчество
  19.  function get_father_name($father_name, $case, $gender){
  20.   $father_name=mb_strtolower($father_name);
  21.   switch($case){
  22.    case 1:return first_letter_smart($father_name);
  23.    case 2:return first_letter_smart(get_father_name_2($father_name, $gender));
  24.    case 3:return first_letter_smart(get_father_name_3($father_name, $gender));
  25.    default: return '';  
  26.   }
  27.  }
  28.  
  29. // Фамилия
  30.  function get_second_name($second_name, $case, $gender){
  31.   $second_name=mb_strtolower($second_name);
  32.   switch($case){
  33.    case 1:return first_letter_smart($second_name);
  34.    case 2:return first_letter_smart(get_second_name_2($second_name, $gender));
  35.    case 3:return first_letter_smart(get_second_name_3($second_name, $gender));
  36.    default: return '';  
  37.   }
  38.  }
  39.  
  40. /* Более тонко */
  41. // Имя (род. падеж)
  42.  function get_given_name_2($given_name, $gender){
  43.   if ($gender==1){
  44.    if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
  45.     return $given_name.'а';
  46.    }
  47.    if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
  48.     return $a[1].'я';
  49.    }
  50.    if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
  51.     return $a[1].'и';
  52.    }
  53.    if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
  54.     return $a[1].$a[2].'ы';
  55.    }
  56.    if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
  57.     return $a[1].'ля';
  58.    }
  59.    
  60.   }
  61.  
  62.   if ($gender==0){
  63.    if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
  64.     return $a[1].'и';
  65.    }
  66.    if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
  67.     return $a[1].$a[2].'ы';
  68.    }
  69.    if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
  70.     return $a[1].'и';
  71.    }
  72.    
  73.    return $given_name;
  74.   }
  75.  }
  76.  
  77. // Отчество (род. падеж)
  78.  function get_father_name_2($father_name, $gender){
  79.   if ($gender==1){
  80.    if (preg_match('_ич$_ui', $father_name, $a)){
  81.     return $father_name.'а';
  82.    }else{
  83.     // -оглы
  84.     return $father_name;
  85.    }
  86.   }
  87.  
  88.   if ($gender==0){
  89.    if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
  90.     return $a[1].'ны';
  91.    }else{
  92.     return $father_name;
  93.    }
  94.   }
  95.  
  96.  
  97.  }
  98.  
  99. // Фамилия (род. падеж)
  100.  function get_second_name_2($second_name, $gender){
  101.   if ($gender==1){
  102.    if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
  103.     return $second_name.'а';
  104.    }
  105.    if (preg_match('_о$_ui', $second_name)){
  106.     return $second_name;
  107.    }
  108.    if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
  109.     return $a[1].'ого';
  110.    }
  111.    
  112.    return $second_name;
  113.   }
  114.  
  115.   if ($gender==0){
  116.    if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
  117.     return $second_name;
  118.    }
  119.    if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
  120.     return $a[1].'ой';
  121.    }
  122.   }
  123.  }
  124.  
  125. /* Дательный падеж */
  126. // Имя (дат. падеж)
  127.  function get_given_name_3($given_name, $gender){
  128.   if ($gender==1){
  129.    if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
  130.     return $given_name.'у';
  131.    }
  132.    if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
  133.     return $a[1].'ю';
  134.    }
  135.    if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
  136.     return $a[1].'е';
  137.    }
  138.    if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
  139.     return $a[1].$a[2].'е';
  140.    }
  141.    if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
  142.     return $a[1].'лю';
  143.    }
  144.   }
  145.  
  146.   if ($gender==0){
  147.    if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
  148.     return $a[1].'е';
  149.    }
  150.    if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
  151.     return $a[1].$a[2].'е';
  152.    }
  153.    if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
  154.     return $a[1].'е';
  155.    }
  156.    
  157.    return $given_name;
  158.   }
  159.  }
  160.  
  161.  
  162. // Отчество (дат. падеж)
  163.  function get_father_name_3($father_name, $gender){
  164.   if ($gender==1){
  165.    if (preg_match('_ич$_ui', $father_name, $a)){
  166.     return $father_name.'у';
  167.    }else{
  168.     // -оглы
  169.     return $father_name;
  170.    }
  171.   }
  172.  
  173.   if ($gender==0){
  174.    if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
  175.     return $a[1].'не';
  176.    }else{
  177.     return $father_name;
  178.    }
  179.   }
  180.  
  181.  
  182.  }
  183.  
  184. // Фамилия (дат. падеж)
  185.  function get_second_name_3($second_name, $gender){
  186.   if ($gender==1){
  187.    if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
  188.     return $second_name.'у';
  189.    }
  190.    if (preg_match('_о$_ui', $second_name)){
  191.     return $second_name;
  192.    }
  193.    if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
  194.     return $a[1].'ому';
  195.    }
  196.    
  197.    return $second_name;
  198.   }
  199.  
  200.   if ($gender==0){
  201.    if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
  202.     return $second_name;
  203.    }
  204.    if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
  205.     return $a[1].'ой';
  206.    }
  207.   }
  208.  }
  209.  
  210.  
  211.  
  212. ?>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top