NokitaKaze icon

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

NokitaKaze | PRO | 02/12/14 07:16:36 AM UTC | 0 ⭐ | 479 👁️ | Never ⏰ | []
PHP |

5.49 KB

|

None

|

0 👍

/

0 👎

<?php
/* ПРИШЛО ВРЕМЯ МОРФОЛОГИЧЕСКОГО АНАЛИЗА */
 function first_letter_smart($text){return $text;}
 
 
 
// Имя
 function get_given_name($given_name, $case, $gender){
  $given_name=mb_strtolower($given_name);
  switch($case){
   case 1:return first_letter_smart($given_name);
   case 2:return first_letter_smart(get_given_name_2($given_name, $gender));
   case 3:return first_letter_smart(get_given_name_3($given_name, $gender));
   default: return '';   
  }
 }
 
// Отчество
 function get_father_name($father_name, $case, $gender){
  $father_name=mb_strtolower($father_name);
  switch($case){
   case 1:return first_letter_smart($father_name);
   case 2:return first_letter_smart(get_father_name_2($father_name, $gender));
   case 3:return first_letter_smart(get_father_name_3($father_name, $gender));
   default: return '';   
  }
 }
 
// Фамилия
 function get_second_name($second_name, $case, $gender){
  $second_name=mb_strtolower($second_name);
  switch($case){
   case 1:return first_letter_smart($second_name);
   case 2:return first_letter_smart(get_second_name_2($second_name, $gender));
   case 3:return first_letter_smart(get_second_name_3($second_name, $gender));
   default: return '';   
  }
 }
 
/* Более тонко */
// Имя (род. падеж)
 function get_given_name_2($given_name, $gender){
  if ($gender==1){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
    return $given_name.'а';
   }
   if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
    return $a[1].'я';
   }
   if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
    return $a[1].'и';
   }
   if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
    return $a[1].$a[2].'ы';
   }
   if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
    return $a[1].'ля';
   }
   
  }
  
  if ($gender==0){
   if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
    return $a[1].'и';
   }
   if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
    return $a[1].$a[2].'ы';
   }
   if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
    return $a[1].'и';
   }
   
   return $given_name;
  }
 }
 
// Отчество (род. падеж)
 function get_father_name_2($father_name, $gender){
  if ($gender==1){
   if (preg_match('_ич$_ui', $father_name, $a)){
    return $father_name.'а';
   }else{
    // -оглы
    return $father_name;
   }
  }
  
  if ($gender==0){
   if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
    return $a[1].'ны';
   }else{
    return $father_name;
   }
  }
  
  
 }
 
// Фамилия (род. падеж)
 function get_second_name_2($second_name, $gender){
  if ($gender==1){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
    return $second_name.'а';
   }
   if (preg_match('_о$_ui', $second_name)){
    return $second_name;
   }
   if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
    return $a[1].'ого';
   }
   
   return $second_name;
  }
  
  if ($gender==0){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
    return $second_name;
   }
   if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
    return $a[1].'ой';
   }
  }
 }
 
/* Дательный падеж */
// Имя (дат. падеж)
 function get_given_name_3($given_name, $gender){
  if ($gender==1){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
    return $given_name.'у';
   }
   if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
    return $a[1].'ю';
   }
   if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
    return $a[1].'е';
   }
   if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
    return $a[1].$a[2].'е';
   }
   if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
    return $a[1].'лю';
   }
  }
  
  if ($gender==0){
   if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
    return $a[1].'е';
   }
   if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
    return $a[1].$a[2].'е';
   }
   if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
    return $a[1].'е';
   }
   
   return $given_name;
  }
 }
 
 
// Отчество (дат. падеж)
 function get_father_name_3($father_name, $gender){
  if ($gender==1){
   if (preg_match('_ич$_ui', $father_name, $a)){
    return $father_name.'у';
   }else{
    // -оглы
    return $father_name;
   }
  }
  
  if ($gender==0){
   if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
    return $a[1].'не';
   }else{
    return $father_name;
   }
  }
  
  
 }
 
// Фамилия (дат. падеж)
 function get_second_name_3($second_name, $gender){
  if ($gender==1){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
    return $second_name.'у';
   }
   if (preg_match('_о$_ui', $second_name)){
    return $second_name;
   }
   if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
    return $a[1].'ому';
   }
   
   return $second_name;
  }
  
  if ($gender==0){
   if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
    return $second_name;
   }
   if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
    return $a[1].'ой';
   }
  }
 }
 
 
 
?>

Comments