mirror of
https://github.com/retailcrm/NameCaseLib.git
synced 2024-12-05 03:16:06 +03:00
commit
85783f387d
875
Library/NCL.NameCase.core.php
Normal file
875
Library/NCL.NameCase.core.php
Normal file
@ -0,0 +1,875 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* NCL NameCase Core
|
||||
*
|
||||
* Клас, которые содержит базовые функции склонения по падежам.
|
||||
*
|
||||
* @license Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* @author Андрей Чайка http://seagull.net.ua/ bymer3@gmail.com
|
||||
* @version 0.1.2 05.05.2011
|
||||
*
|
||||
*/
|
||||
interface NCLNameCaseInterface
|
||||
{
|
||||
|
||||
public function setFirstName($firstname="");
|
||||
|
||||
public function setSecondName($secondname="");
|
||||
|
||||
public function setFatherName($fathername="");
|
||||
|
||||
public function setGender($gender=0);
|
||||
|
||||
public function setFullName($secondName="", $firstName="", $fatherName="");
|
||||
|
||||
public function setName($firstname="");
|
||||
|
||||
public function setLastName($secondname="");
|
||||
|
||||
public function setSirname($secondname="");
|
||||
|
||||
public function genderAutoDetect();
|
||||
|
||||
public function splitFullName($fullname);
|
||||
|
||||
public function getFirstNameCase($number=null);
|
||||
|
||||
public function getSecondNameCase($number=null);
|
||||
|
||||
public function getFatherNameCase($number=null);
|
||||
|
||||
public function qFirstName($firstName, $CaseNumber=null, $gender=0);
|
||||
|
||||
public function qSecondName($secondName, $CaseNumber=null, $gender=0);
|
||||
|
||||
public function qFatherName($fatherName, $CaseNumber=null, $gender=0);
|
||||
|
||||
public function getFormattedArray($format);
|
||||
|
||||
public function getFormatted($caseNum=0, $format="S N F");
|
||||
|
||||
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F");
|
||||
|
||||
public function getFirstNameRule();
|
||||
|
||||
public function getSecondNameRule();
|
||||
|
||||
public function q($fullname, $caseNum=null, $gender=null);
|
||||
}
|
||||
|
||||
class NCL
|
||||
{
|
||||
/*
|
||||
* @static integer
|
||||
*/
|
||||
static $MAN = 1;
|
||||
|
||||
/*
|
||||
* @static integer
|
||||
*/
|
||||
static $WOMAN = 2;
|
||||
|
||||
/*
|
||||
* @static integer
|
||||
* Падежи
|
||||
*/
|
||||
static $IMENITLN = 0;
|
||||
static $RODITLN = 1;
|
||||
static $DATELN = 2;
|
||||
static $VINITELN = 3;
|
||||
static $TVORITELN = 4;
|
||||
static $PREDLOGN = 5;
|
||||
|
||||
static $UaNazyvnyi = 0;
|
||||
static $UaRodovyi = 1;
|
||||
static $UaDavalnyi = 2;
|
||||
static $UaZnahidnyi = 3;
|
||||
static $UaOrudnyi = 4;
|
||||
static $UaMiszevyi = 5;
|
||||
static $UaKlychnyi = 6;
|
||||
}
|
||||
|
||||
class NCLNameCaseCore extends NCL
|
||||
{
|
||||
/*
|
||||
* Имя для склонения
|
||||
* @var string
|
||||
*/
|
||||
|
||||
protected $firstName = "";
|
||||
|
||||
|
||||
/*
|
||||
* Фамилия для склонения
|
||||
* @var string
|
||||
*/
|
||||
protected $secondName = "";
|
||||
|
||||
|
||||
/*
|
||||
* Отчество для склонения
|
||||
* @var string
|
||||
*/
|
||||
protected $fatherName = "";
|
||||
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Пол человека
|
||||
* <li>0 - не известно</li>
|
||||
* <li>1 - мужчина</li>
|
||||
* <li>2 - женщина</li>
|
||||
*/
|
||||
protected $gender = 0;
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения имени
|
||||
*/
|
||||
protected $firstResult = array();
|
||||
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения фамилии
|
||||
*/
|
||||
protected $secondResult = array();
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения отчества
|
||||
*/
|
||||
protected $fatherResult = array();
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому не склоняется имя/фамилия
|
||||
*/
|
||||
protected $error = "";
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому склоняется имя
|
||||
*/
|
||||
protected $frule = "";
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому не склоняется фамилия
|
||||
*/
|
||||
protected $srule = "";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected function makeFirstTheSame()
|
||||
{
|
||||
$this->firstResult = array_fill(0, $this->CaseCount, $this->firstName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function makeSecondTheSame()
|
||||
{
|
||||
$this->secondResult = array_fill(0, $this->CaseCount, $this->secondName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function makeFatherTheSame()
|
||||
{
|
||||
$this->fatherResult = array_fill(0, $this->CaseCount, $this->fatherName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция проверяет, входит ли буква в строку.
|
||||
*
|
||||
* @param $letter - буква
|
||||
* @param $string - строка
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function in($letter, $string)
|
||||
{
|
||||
|
||||
if ($letter and mb_strpos($string, $letter) === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция дополняет переданое слово нужными окончаниями.
|
||||
*
|
||||
* @param $word (string) - слово
|
||||
* @param $endings (array) - окончания
|
||||
* @param $replaceLast (boolean) - убрать последнюю букву
|
||||
* @param $replaceTwoLast (boolean) - убрать две последних буквы
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function padeg($word, $endings, $replaceLast=false, $replaceTwoLast=false)
|
||||
{
|
||||
$result = array($word);
|
||||
if ($replaceTwoLast == true)
|
||||
{
|
||||
//убираем последнею букву
|
||||
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 2, 'utf-8');
|
||||
}
|
||||
elseif ($replaceLast == true)
|
||||
{
|
||||
//убираем последнею букву
|
||||
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 1, 'utf-8');
|
||||
}
|
||||
$i = 0;
|
||||
for ($i == 0; $i < ($this->CaseCount-1); $i++)
|
||||
{
|
||||
$result[$i + 1] = $word . $endings[$i];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка имени
|
||||
*
|
||||
* @param $firstname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFirstName($firstname="")
|
||||
{
|
||||
$this->firstName = $firstname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setSecondName($secondname="")
|
||||
{
|
||||
$this->secondName = $secondname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Отчества
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFatherName($fathername="")
|
||||
{
|
||||
$this->fatherName = $fathername;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка пола
|
||||
*
|
||||
* @param $gender
|
||||
* - null - не определено
|
||||
* - NCL::$MAN - мужчина
|
||||
* - NCL::$WOMAN - женщина
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setGender($gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Имени, Фамилии, Отчества
|
||||
*
|
||||
* @param $firstName - имя
|
||||
* @param $secondName - фамилия
|
||||
* @param $fatherName - отчество
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFullName($secondName="", $firstName="", $fatherName="")
|
||||
{
|
||||
$this->setFirstName($firstName);
|
||||
$this->setSecondName($secondName);
|
||||
$this->setFatherName($fatherName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка имени
|
||||
*
|
||||
* @param $firstname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setName($firstname="")
|
||||
{
|
||||
$this->setFirstName($firstname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setLastName($secondname="")
|
||||
{
|
||||
$this->setSecondName($secondname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setSirname($secondname="")
|
||||
{
|
||||
$this->setSecondName($secondname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Автоматическое определение пола
|
||||
* Возвращает пол по ФИО
|
||||
* @return integer
|
||||
*/
|
||||
|
||||
public function genderAutoDetect()
|
||||
{
|
||||
$this->gender = null;
|
||||
$this->genderDetect();
|
||||
return $this->gender;
|
||||
}
|
||||
|
||||
/*
|
||||
* Разбиение фразы на слова и определение, где имя, где фамилия, где отчество
|
||||
* @return string $format - формат имен и фамилий
|
||||
*/
|
||||
|
||||
public function splitFullName($fullname)
|
||||
{
|
||||
$this->firstName = '';
|
||||
$this->secondName = '';
|
||||
$this->fatherName = '';
|
||||
$this->gender = null;
|
||||
|
||||
$fullname = trim($fullname);
|
||||
$list = explode(' ', $fullname);
|
||||
$found = array();
|
||||
$duplicate = array();
|
||||
$c = count($list);
|
||||
for ($i = 0; $i < $c; $i++)
|
||||
{
|
||||
if (trim($list[$i]))
|
||||
{
|
||||
$found[$i][0] = $this->detectNamePart($list[$i]);
|
||||
$found[$i][1] = $list[$i];
|
||||
if ($found[$i][0]=='N')
|
||||
{
|
||||
$this->firstName=$found[$i][1];
|
||||
}
|
||||
elseif ($found[$i][0]=='S')
|
||||
{
|
||||
$this->secondName=$found[$i][1];
|
||||
}
|
||||
elseif ($found[$i][0]=='F')
|
||||
{
|
||||
$this->fatherName=$found[$i][1];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$format = array();
|
||||
foreach ($found as $value)
|
||||
{
|
||||
$format[]=$value;
|
||||
}
|
||||
if (count($format)==1)
|
||||
{
|
||||
return $format[0][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
return $format;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение имени
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function FirstName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->firstName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
$result = $this->manFirstName();
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->womanFirstName();
|
||||
}
|
||||
$this->firstResult[0]=$this->firstName;
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = array_fill(0, $this->CaseCount, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение фамилии
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function SecondName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->secondName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
$result = $this->manSecondName();
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->womanSecondName();
|
||||
}
|
||||
$this->secondResult[0]=$this->secondName;
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = array_fill(0, $this->CaseCount, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение отчеств
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function FatherName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->fatherName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
$result = $this->manFatherName();
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->womanFatherName();
|
||||
}
|
||||
$this->fatherResult[0]=$this->fatherName;
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->fatherResult = array_fill(0, $this->CaseCount, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить имя в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFirstNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->firstResult[0]) or $this->firstResult[0] <> $this->firstName)
|
||||
{
|
||||
$this->FirstName();
|
||||
}
|
||||
if ($number < 0 or $number > ($this->CaseCount-1))
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->firstResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->firstResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getSecondNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->secondResult[0]) or $this->secondResult[0] <> $this->secondName)
|
||||
{
|
||||
$this->SecondName();
|
||||
}
|
||||
if ($number < 0 or $number > ($this->CaseCount-1))
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->secondResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->secondResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить отчество в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFatherNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->fatherResult[0]) or $this->fatherResult[0] <> $this->fatherName)
|
||||
{
|
||||
$this->FatherName();
|
||||
}
|
||||
if ($number < 0 or $number > ($this->CaseCount-1))
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->fatherResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->fatherResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFirstName($firstName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->firstName = $firstName;
|
||||
return $this->getFirstNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qSecondName($secondName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->secondName = $secondName;
|
||||
return $this->getSecondNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить отчество в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFatherName($fatherName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->fatherName = $fatherName;
|
||||
return $this->getFatherNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет во все падежи и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
||||
public function getFormattedArray($format)
|
||||
{
|
||||
if (is_array($format))
|
||||
{
|
||||
return $this->getFormattedArrayHard($format);
|
||||
}
|
||||
$length = mb_strlen($format);
|
||||
$result = array();
|
||||
$cases = array();
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$cases['S'] = $this->getSecondNameCase();
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$cases['N'] = $this->getFirstNameCase();
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$cases['F'] = $this->getFatherNameCase();
|
||||
}
|
||||
}
|
||||
|
||||
for ($curCase = 0; $curCase < $this->CaseCount; $curCase++)
|
||||
{
|
||||
$line = "";
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$line.=$cases['S'][$curCase];
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$line.=$cases['N'][$curCase];
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$line.=$cases['F'][$curCase];
|
||||
}
|
||||
else
|
||||
{
|
||||
$line.=$symbol;
|
||||
}
|
||||
}
|
||||
$result[] = $line;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getFormattedArrayHard($format)
|
||||
{
|
||||
|
||||
$result = array();
|
||||
$cases = array();
|
||||
foreach ($format as $value)
|
||||
{
|
||||
$symbol = $value[0];
|
||||
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$this->setSecondName($value[1]);
|
||||
$cases[] = array('S', $this->getSecondNameCase());
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$this->setFirstName($value[1]);
|
||||
$cases[] = array('N', $this->getFirstNameCase());
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$this->setFatherName($value[1]);
|
||||
$cases[] = array('F',$this->getFatherNameCase());
|
||||
}
|
||||
}
|
||||
|
||||
for ($curCase = 0; $curCase < $this->CaseCount; $curCase++)
|
||||
{
|
||||
$line = "";
|
||||
foreach ($cases as $value)
|
||||
{
|
||||
$symbol = $value[0];
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$line.=$value[1][$curCase].' ';
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$line.=$value[1][$curCase].' ';
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$line.=$value[1][$curCase].' ';
|
||||
}
|
||||
}
|
||||
$result[] = trim($line);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getFormattedHard($caseNum=0, $format=array())
|
||||
{
|
||||
$result = "";
|
||||
foreach ($format as $value)
|
||||
{
|
||||
$symbol = $value[0];
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$this->setSecondName($value[1]);
|
||||
$result.=$this->getSecondNameCase($caseNum).' ';
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$this->setFirstName($value[1]);
|
||||
$result.=$this->getFirstNameCase($caseNum).' ';
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$this->setFatherName($value[1]);
|
||||
$result.=$this->getFatherNameCase($caseNum).' ';
|
||||
}
|
||||
}
|
||||
return trim($result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет в падеж $caseNum, и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* Например getFormatted(1, 'N F')
|
||||
* Выведет имя и отчество в родительном падиже
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFormatted($caseNum=0, $format="S N F")
|
||||
{
|
||||
//Если не указан формат используем другую функцию
|
||||
if (is_null($caseNum))
|
||||
{
|
||||
return $this->getFormattedArray($format);
|
||||
}
|
||||
//Если формат сложный
|
||||
elseif (is_array($format))
|
||||
{
|
||||
return $this->getFormattedHard($caseNum, $format);
|
||||
}
|
||||
else
|
||||
{
|
||||
$length = mb_strlen($format);
|
||||
$result = "";
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$result.=$this->getSecondNameCase($caseNum);
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$result.=$this->getFirstNameCase($caseNum);
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$result.=$this->getFatherNameCase($caseNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result.=$symbol;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет фамилию имя отчество в падеж $caseNum, и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F")
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->firstName = $firstName;
|
||||
$this->secondName = $secondName;
|
||||
$this->fatherName = $fatherName;
|
||||
|
||||
return $this->getFormatted($caseNum, $format);
|
||||
}
|
||||
|
||||
public function getFirstNameRule()
|
||||
{
|
||||
return $this->frule;
|
||||
}
|
||||
|
||||
public function getSecondNameRule()
|
||||
{
|
||||
return $this->srule;
|
||||
}
|
||||
|
||||
/*
|
||||
* Быстрое склонение имени. Передается один параметр строка, где может быть ФИО в любом виде. Есть необязательный параметр пол. И так ще необязательный параметр падеж. Если падеж указан, тогда возвращается строка в том падеже, если нет тогда все возможные падежи.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function q($fullname, $caseNum=null, $gender=null)
|
||||
{
|
||||
$format = $this->splitFullName($fullname);
|
||||
$this->gender = $gender;
|
||||
$this->genderAutoDetect();
|
||||
return $this->getFormatted($caseNum, $format);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -10,61 +10,16 @@
|
||||
* @version 0.1.2 05.05.2011
|
||||
*
|
||||
*/
|
||||
require_once dirname(__FILE__) . '/NCL.NameCase.core.php';
|
||||
|
||||
class NCLNameCaseRu
|
||||
class NCLNameCaseRu extends NCLNameCaseCore implements NCLNameCaseInterface
|
||||
{
|
||||
/*
|
||||
* Имя для склонения
|
||||
* @var string
|
||||
* @static string
|
||||
* Количество падежов
|
||||
*/
|
||||
|
||||
private $firstName = "";
|
||||
|
||||
|
||||
/*
|
||||
* Фамилия для склонения
|
||||
* @var string
|
||||
*/
|
||||
private $secondName = "";
|
||||
|
||||
|
||||
/*
|
||||
* Отчество для склонения
|
||||
* @var string
|
||||
*/
|
||||
private $fatherName = "";
|
||||
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Пол человека
|
||||
* <li>0 - не известно</li>
|
||||
* <li>1 - мужчина</li>
|
||||
* <li>2 - женщина</li>
|
||||
*/
|
||||
private $gender = 0;
|
||||
|
||||
/*
|
||||
* @static integer
|
||||
*/
|
||||
static $MAN = 1;
|
||||
|
||||
/*
|
||||
* @static integer
|
||||
*/
|
||||
static $WOMAN = 2;
|
||||
|
||||
/*
|
||||
* @static integer
|
||||
* Падежи
|
||||
*/
|
||||
static $IMENITLN = 0;
|
||||
static $RODITLN = 1;
|
||||
static $DATELN = 2;
|
||||
static $VINITELN = 3;
|
||||
static $TVORITELN = 4;
|
||||
static $PREDLOGN = 5;
|
||||
|
||||
protected $CaseCount = 6;
|
||||
|
||||
/*
|
||||
* @static string
|
||||
* Список гласных
|
||||
@ -90,42 +45,6 @@ class NCLNameCaseRu
|
||||
*/
|
||||
private $ih = array('их', 'ых', 'ко');
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения имени
|
||||
*/
|
||||
private $firstResult = array();
|
||||
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения фамилии
|
||||
*/
|
||||
private $secondResult = array();
|
||||
|
||||
/*
|
||||
* @var array()
|
||||
* Результат склонения отчества
|
||||
*/
|
||||
private $fatherResult = array();
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому не склоняется имя/фамилия
|
||||
*/
|
||||
private $error = "";
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому склоняется имя
|
||||
*/
|
||||
private $frule = "";
|
||||
|
||||
/*
|
||||
* @var integer
|
||||
* Номер правила по которому не склоняется фамилия
|
||||
*/
|
||||
private $srule = "";
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения мужских имен.
|
||||
@ -133,7 +52,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function manFirstName()
|
||||
protected function manFirstName()
|
||||
{
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
|
||||
@ -232,7 +151,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function womanFirstName()
|
||||
protected function womanFirstName()
|
||||
{
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
|
||||
@ -320,7 +239,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function manSecondName()
|
||||
protected function manSecondName()
|
||||
{
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
|
||||
@ -413,6 +332,12 @@ class NCLNameCaseRu
|
||||
$this->srule = 301;
|
||||
return true;
|
||||
}
|
||||
elseif ($this->in($LastSymbol, 'р'))
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ом', 'е'), false);
|
||||
$this->srule = 302;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ым', 'е'), false);
|
||||
@ -467,7 +392,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function womanSecondName()
|
||||
protected function womanSecondName()
|
||||
{
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
|
||||
@ -542,7 +467,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function manFatherName()
|
||||
protected function manFatherName()
|
||||
{
|
||||
//Проверяем действительно ли отчество
|
||||
if ($this->fatherName == 'Ильич')
|
||||
@ -568,7 +493,7 @@ class NCLNameCaseRu
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function womanFatherName()
|
||||
protected function womanFatherName()
|
||||
{
|
||||
//Проверяем действительно ли отчество
|
||||
if (mb_substr($this->fatherName, -2, 2, 'utf-8') == 'на')
|
||||
@ -583,209 +508,12 @@ class NCLNameCaseRu
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая ставит имя во всех падежах в форме именительного падежа.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
private function makeFirstTheSame()
|
||||
{
|
||||
$this->firstResult = array_fill(0, 6, $this->firstName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
private function makeSecondTheSame()
|
||||
{
|
||||
$this->secondResult = array_fill(0, 6, $this->secondName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
private function makeFatherTheSame()
|
||||
{
|
||||
$this->fatherResult = array_fill(0, 6, $this->fatherName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция проверяет, входит ли буква в строку.
|
||||
*
|
||||
* @param $letter - буква
|
||||
* @param $string - строка
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function in($letter, $string)
|
||||
{
|
||||
|
||||
if ($letter and mb_strpos($string, $letter) === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция дополняет переданое слово нужными окончаниями.
|
||||
*
|
||||
* @param $word (string) - слово
|
||||
* @param $endings (array) - окончания
|
||||
* @param $replaceLast (boolean) - убрать последнюю букву
|
||||
* @param $replaceTwoLast (boolean) - убрать две последних буквы
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function padeg($word, $endings, $replaceLast=false, $replaceTwoLast=false)
|
||||
{
|
||||
$result = array($word);
|
||||
if ($replaceTwoLast == true)
|
||||
{
|
||||
//убираем последнею букву
|
||||
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 2, 'utf-8');
|
||||
}
|
||||
elseif ($replaceLast == true)
|
||||
{
|
||||
//убираем последнею букву
|
||||
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 1, 'utf-8');
|
||||
}
|
||||
$i = 0;
|
||||
for ($i == 0; $i < 5; $i++)
|
||||
{
|
||||
$result[$i + 1] = $word . $endings[$i];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка имени
|
||||
*
|
||||
* @param $firstname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFirstName($firstname="")
|
||||
{
|
||||
$this->firstName = $firstname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setSecondName($secondname="")
|
||||
{
|
||||
$this->secondName = $secondname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Отчества
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFatherName($fathername="")
|
||||
{
|
||||
$this->fatherName = $fathername;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка пола
|
||||
*
|
||||
* @param $gender
|
||||
* - null - не определено
|
||||
* - NCLNameCaseRu::$MAN - мужчина
|
||||
* - NCLNameCaseRu::$WOMAN - женщина
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setGender($gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Имени, Фамилии, Отчества
|
||||
*
|
||||
* @param $firstName - имя
|
||||
* @param $secondName - фамилия
|
||||
* @param $fatherName - отчество
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setFullName($secondName="", $firstName="", $fatherName="")
|
||||
{
|
||||
$this->setFirstName($firstName);
|
||||
$this->setSecondName($secondName);
|
||||
$this->setFatherName($fatherName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка имени
|
||||
*
|
||||
* @param $firstname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setName($firstname="")
|
||||
{
|
||||
$this->setFirstName($firstname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setLastName($secondname="")
|
||||
{
|
||||
$this->setSecondName($secondname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Установка Фамилии
|
||||
*
|
||||
* @param $secondname
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
public function setSirname($secondname="")
|
||||
{
|
||||
$this->setSecondName($secondname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Автоматическое определение пола
|
||||
* @return void
|
||||
*/
|
||||
|
||||
private function genderDetect()
|
||||
protected function genderDetect()
|
||||
{
|
||||
if (!$this->gender)
|
||||
{
|
||||
@ -795,12 +523,12 @@ class NCLNameCaseRu
|
||||
$LastTwo = mb_substr($this->fatherName, -2, 2, 'utf-8');
|
||||
if ($LastTwo == 'ич')
|
||||
{
|
||||
$this->gender = NCLNameCaseRu::$MAN; // мужчина
|
||||
$this->gender = NCL::$MAN; // мужчина
|
||||
return true;
|
||||
}
|
||||
if ($LastTwo == 'на')
|
||||
{
|
||||
$this->gender = NCLNameCaseRu::$WOMAN; // женщина
|
||||
$this->gender = NCL::$WOMAN; // женщина
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -878,7 +606,7 @@ class NCLNameCaseRu
|
||||
$man+=0.4;
|
||||
}
|
||||
|
||||
if (in_array($SLastThree, array('ова', 'ина', 'ева', 'ёва', 'ына', 'ая')))
|
||||
if (in_array($SLastThree, array('ова', 'ина', 'ева', 'ёва', 'ына')))
|
||||
{
|
||||
$woman+=0.4;
|
||||
}
|
||||
@ -891,34 +619,21 @@ class NCLNameCaseRu
|
||||
//Теперь смотрим, кто больше набрал
|
||||
if ($man > $woman)
|
||||
{
|
||||
$this->gender = NCLNameCaseRu::$MAN;
|
||||
$this->gender = NCL::$MAN;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->gender = NCLNameCaseRu::$WOMAN;
|
||||
$this->gender = NCL::$WOMAN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Автоматическое определение пола
|
||||
* Возвращает пол по ФИО
|
||||
* @return integer
|
||||
*/
|
||||
|
||||
public function genderAutoDetect()
|
||||
{
|
||||
$this->gender = null;
|
||||
$this->genderDetect();
|
||||
return $this->gender;
|
||||
}
|
||||
|
||||
/*
|
||||
* Определение текущее слово есть фамилией, именем или отчеством
|
||||
* @return integer $number - 1-фамили 2-имя 3-отчество
|
||||
*/
|
||||
|
||||
private function detectNamePart($namepart)
|
||||
protected function detectNamePart($namepart)
|
||||
{
|
||||
$LastSymbol = mb_substr($namepart, -1, 1, 'utf-8');
|
||||
$LastTwo = mb_substr($namepart, -2, 2, 'utf-8');
|
||||
@ -949,7 +664,7 @@ class NCLNameCaseRu
|
||||
}
|
||||
|
||||
//похоже на фамилию
|
||||
if (in_array($LastTwo, array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'ёк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр')))
|
||||
if (in_array($LastTwo, array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'ёк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр')))
|
||||
{
|
||||
$second+=0.4;
|
||||
}
|
||||
@ -981,438 +696,6 @@ class NCLNameCaseRu
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Разбиение фразы на слова и определение, где имя, где фамилия, где отчество
|
||||
* @return string $format - формат имен и фамилий
|
||||
*/
|
||||
|
||||
public function splitFullName($fullname)
|
||||
{
|
||||
$this->firstName = '';
|
||||
$this->secondName = '';
|
||||
$this->fatherName = '';
|
||||
$this->gender = null;
|
||||
|
||||
$fullname = trim($fullname);
|
||||
$list = explode(' ', $fullname);
|
||||
$found = array();
|
||||
$duplicate = array();
|
||||
$c = count($list);
|
||||
for ($i = 0; $i < $c; $i++)
|
||||
{
|
||||
if (trim($list[$i]))
|
||||
{
|
||||
$found[$i] = $this->detectNamePart($list[$i]);
|
||||
}
|
||||
}
|
||||
$look = array('S' => false, 'F' => false, 'N' => false);
|
||||
//Первая пробежка - ищем дупликаты
|
||||
foreach ($found as $key => $letter)
|
||||
{
|
||||
if ($look[$letter]) //Если уже есть
|
||||
{
|
||||
$duplicate[$key] = $letter;
|
||||
}
|
||||
else
|
||||
{
|
||||
$look[$letter] = true;
|
||||
}
|
||||
}
|
||||
//Вторая пробежка - тасуем дупликаты
|
||||
foreach ($duplicate as $key => $letter)
|
||||
{
|
||||
if (!$look['S'])
|
||||
{
|
||||
$found[$key] = 'S';
|
||||
}
|
||||
elseif (!$look['F'])
|
||||
{
|
||||
$found[$key] = 'F';
|
||||
}
|
||||
elseif (!$look['N'])
|
||||
{
|
||||
$found[$key] = 'N';
|
||||
}
|
||||
else
|
||||
{
|
||||
$found[$key] = ''; //4 слова одно игнорируем
|
||||
}
|
||||
}
|
||||
$format = '';
|
||||
foreach ($found as $key => $letter)
|
||||
{
|
||||
if ($letter == 'S')
|
||||
{
|
||||
$this->secondName = $list[$key];
|
||||
}
|
||||
elseif ($letter == 'N')
|
||||
{
|
||||
$this->firstName = $list[$key];
|
||||
}
|
||||
elseif ($letter == 'F')
|
||||
{
|
||||
$this->fatherName = $list[$key];
|
||||
}
|
||||
$format.=$letter . ' ';
|
||||
}
|
||||
return trim($format);
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение имени
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function FirstName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->firstName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
return $this->manFirstName();
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->womanFirstName();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = array_fill(0, 6, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение фамилии
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function SecondName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->secondName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
return $this->manSecondName();
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->womanSecondName();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = array_fill(0, 6, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склонение отчеств
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function FatherName()
|
||||
{
|
||||
$this->genderDetect();
|
||||
if ($this->fatherName)
|
||||
{
|
||||
if ($this->gender == 1)
|
||||
{
|
||||
return $this->manFatherName();
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->womanFatherName();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->fatherResult = array_fill(0, 6, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить имя в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFirstNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->firstResult[0]) or $this->firstResult[0] <> $this->firstName)
|
||||
{
|
||||
$this->FirstName();
|
||||
}
|
||||
if ($number < 0 or $number > 5)
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->firstResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->firstResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getSecondNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->secondResult[0]) or $this->secondResult[0] <> $this->secondName)
|
||||
{
|
||||
$this->SecondName();
|
||||
}
|
||||
if ($number < 0 or $number > 5)
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->secondResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->secondResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить отчество в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFatherNameCase($number=null)
|
||||
{
|
||||
if (!isset($this->fatherResult[0]) or $this->fatherResult[0] <> $this->fatherName)
|
||||
{
|
||||
$this->FatherName();
|
||||
}
|
||||
if ($number < 0 or $number > 5)
|
||||
{
|
||||
$number = null;
|
||||
}
|
||||
|
||||
if (is_null($number))
|
||||
{
|
||||
//Возвращаем все падежи
|
||||
return $this->fatherResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->fatherResult[$number];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFirstName($firstName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->firstName = $firstName;
|
||||
return $this->getFirstNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить фамилию в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qSecondName($secondName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->secondName = $secondName;
|
||||
return $this->getSecondNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Поставить отчество в определенный падеж
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFatherName($fatherName, $CaseNumber=null, $gender=0)
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->fatherName = $fatherName;
|
||||
return $this->getFatherNameCase($CaseNumber);
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет во все падежи и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
||||
public function getFormattedArray($format)
|
||||
{
|
||||
$length = mb_strlen($format);
|
||||
$result = array();
|
||||
$cases=array();
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$cases['S']=$this->getSecondNameCase();
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$cases['N']=$this->getFirstNameCase();
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$cases['F']=$this->getFatherNameCase();
|
||||
}
|
||||
}
|
||||
|
||||
for ($curCase = 0; $curCase<6; $curCase++)
|
||||
{
|
||||
$line="";
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$line.=$cases['S'][$curCase];
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$line.=$cases['N'][$curCase];
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$line.=$cases['F'][$curCase];
|
||||
}
|
||||
else
|
||||
{
|
||||
$line.=$symbol;
|
||||
}
|
||||
}
|
||||
$result[]=$line;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет в падеж $caseNum, и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* Например getFormatted(1, 'N F')
|
||||
* Выведет имя и отчество в родительном падиже
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function getFormatted($caseNum=0, $format="S N F")
|
||||
{
|
||||
if (is_null($caseNum))
|
||||
{
|
||||
return $this->getFormattedArray($format);
|
||||
}
|
||||
else
|
||||
{
|
||||
$length = mb_strlen($format);
|
||||
$result = "";
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$symbol = mb_substr($format, $i, 1);
|
||||
if ($symbol == 'S')
|
||||
{
|
||||
$result.=$this->getSecondNameCase($caseNum);
|
||||
}
|
||||
elseif ($symbol == 'N')
|
||||
{
|
||||
$result.=$this->getFirstNameCase($caseNum);
|
||||
}
|
||||
elseif ($symbol == 'F')
|
||||
{
|
||||
$result.=$this->getFatherNameCase($caseNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result.=$symbol;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Склоняет фамилию имя отчество в падеж $caseNum, и форматирует по шаблону $format
|
||||
* Шаблон $format
|
||||
* S - Фамилия
|
||||
* N - Имя
|
||||
* F - Отчество
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F")
|
||||
{
|
||||
$this->gender = $gender;
|
||||
$this->firstName = $firstName;
|
||||
$this->secondName = $secondName;
|
||||
$this->fatherName = $fatherName;
|
||||
|
||||
return $this->getFormatted($caseNum, $format);
|
||||
}
|
||||
|
||||
public function getFirstNameRule()
|
||||
{
|
||||
return $this->frule;
|
||||
}
|
||||
|
||||
public function getSecondNameRule()
|
||||
{
|
||||
return $this->srule;
|
||||
}
|
||||
|
||||
/*
|
||||
* Быстрое склонение имени. Передается один параметр строка, где может быть ФИО в любом виде. Есть необязательный параметр пол. И так ще необязательный параметр падеж. Если падеж указан, тогда возвращается строка в том падеже, если нет тогда все возможные падежи.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
public function q($fullname, $caseNum=null, $gender=null)
|
||||
{
|
||||
$format = $this->splitFullName($fullname);
|
||||
$this->gender = $gender;
|
||||
$this->genderAutoDetect();
|
||||
return $this->getFormatted($caseNum, $format);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
829
Library/NCL.NameCase.ua.php
Normal file
829
Library/NCL.NameCase.ua.php
Normal file
@ -0,0 +1,829 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* NCL NameCase Ukranian Language
|
||||
*
|
||||
* Клас, которые позволяет склонять украинские Имена, Фамили Отчества по падежам.
|
||||
*
|
||||
* @license Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* @author Андрей Чайка http://seagull.net.ua/ bymer3@gmail.com
|
||||
* @version 0.1.2 05.05.2011
|
||||
*
|
||||
*/
|
||||
require_once dirname(__FILE__) . '/NCL.NameCase.core.php';
|
||||
|
||||
class NCLNameCaseUa extends NCLNameCaseCore implements NCLNameCaseInterface
|
||||
{
|
||||
/*
|
||||
* @static string
|
||||
* Количество падежов
|
||||
*/
|
||||
|
||||
protected $CaseCount = 7;
|
||||
|
||||
/*
|
||||
* @static string
|
||||
* Список гласных
|
||||
*/
|
||||
private $vowels = "аеиоуіїєюя";
|
||||
|
||||
/*
|
||||
* @static string
|
||||
* Список согласных
|
||||
*/
|
||||
private $consonant = "бвгджзйклмнпрстфхцчшщ";
|
||||
|
||||
/*
|
||||
* @static string
|
||||
* Шиплячі приголосні
|
||||
*/
|
||||
private $shyplyachi = "жчшщ";
|
||||
private $neshyplyachi = "бвгдзклмнпрстфхц";
|
||||
private $myaki = 'ьюяєї';
|
||||
private $gubni = 'мвпбф';
|
||||
/*
|
||||
* Чергування г к х —» з ц с
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function inverseGKH($letter)
|
||||
{
|
||||
switch ($letter)
|
||||
{
|
||||
case 'г': return 'з';
|
||||
case 'к': return 'ц';
|
||||
case 'х': return 'с';
|
||||
}
|
||||
return $letter;
|
||||
}
|
||||
|
||||
/*
|
||||
* Чергування к —» ч
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function inverse2($letter)
|
||||
{
|
||||
switch ($letter)
|
||||
{
|
||||
case 'к': return 'ч';
|
||||
case 'г': return 'ж';
|
||||
}
|
||||
return $letter;
|
||||
}
|
||||
|
||||
/*
|
||||
* Визначення групи для іменників 2-ї відміни
|
||||
* 1 - тверда
|
||||
* 2 - мішана
|
||||
* 3 - м’яка
|
||||
*
|
||||
* Правило:
|
||||
* Іменники з основою на твердий нешиплячий належать до твердої групи: береза, дорога, Дніпро, шлях, віз, село, яблуко.
|
||||
* Іменники з основою на твердий шиплячий належать до мішаної групи: пожеж-а, пущ-а, тиш-а, алич-а, вуж, кущ, плющ, ключ, плече, прізвище.
|
||||
* Іменники з основою на будь-який м'який чи пом'якшений належать до м'якої групи: земля [земл'а], зоря [зор'а], армія [арм'ійа], сім'я [с'імйа], серпень, фахівець, трамвай, сузір'я [суз'ірйа], насіння [насін'н'а], узвишшя Іузвиш'ш'а
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
|
||||
private function detect2Group($word)
|
||||
{
|
||||
$osnova = $word;
|
||||
$stack = array();
|
||||
//Ріжемо слово поки не зустрінемо приголосний і записуемо в стек всі голосні які зустріли
|
||||
while ($this->in(mb_substr($osnova, -1, 1, 'utf-8'), $this->vowels . 'ь'))
|
||||
{
|
||||
$stack[] = mb_substr($osnova, -1, 1, 'utf-8');
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 1, 'utf-8');
|
||||
}
|
||||
$stacksize = count($stack);
|
||||
$Last = 'Z'; //нульове закінчення
|
||||
if ($stacksize)
|
||||
{
|
||||
$Last = $stack[count($stack) - 1];
|
||||
}
|
||||
|
||||
$osnovaEnd = mb_substr($osnova, -1, 1, 'utf-8');
|
||||
if ($this->in($osnovaEnd, $this->neshyplyachi) and !$this->in($Last, $this->myaki))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
elseif ($this->in($osnovaEnd, $this->shyplyachi) and !$this->in($Last, $this->myaki))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Повертає перший з кінця голосний
|
||||
*
|
||||
* @return char
|
||||
*/
|
||||
|
||||
private function FirstLastVowel($word, $vowels)
|
||||
{
|
||||
$length = mb_strlen($word, 'utf-8');
|
||||
for ($i = $length - 1; $i > 0; $i--)
|
||||
{
|
||||
$char = mb_substr($word, $i, 1, 'utf-8');
|
||||
if ($this->in($char, $vowels))
|
||||
{
|
||||
return $char;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Повертає основу слова
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
private function getOsnova($word)
|
||||
{
|
||||
$osnova = $word;
|
||||
//Ріжемо слово поки не зустрінемо приголосний
|
||||
while ($this->in(mb_substr($osnova, -1, 1, 'utf-8'), $this->vowels . 'ь'))
|
||||
{
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 1, 'utf-8');
|
||||
}
|
||||
return $osnova;
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения мужских имен.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function manFirstName()
|
||||
{
|
||||
/*
|
||||
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
|
||||
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
|
||||
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
|
||||
//Предпоследний символ
|
||||
$BeforeLast = mb_substr($this->firstName, -2, 1, 'utf-8');
|
||||
//Останні літера або а або я
|
||||
if ($LastSymbol == 'а')
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
|
||||
$this->frule = 101;
|
||||
return true;
|
||||
}
|
||||
elseif ($LastSymbol == 'я')
|
||||
{
|
||||
if ($BeforeLast == 'і')
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
|
||||
$this->frule = 103;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
|
||||
$this->frule = 102;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//Примітка 2. Імена, що в називному відмінку закінчуються на -р, у родовому мають закінчення -а: Віктор - Віктора, Макар - Макара, але: Ігор - Ігоря, Лазар - Лазаря.
|
||||
elseif ($LastSymbol == 'р')
|
||||
{
|
||||
|
||||
if ($this->firstName == 'Ігор' or $this->firstName == 'Лазар')
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array('я', 'еві', 'я', 'ем', 'еві', 'е'));
|
||||
$this->frule = 201;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$osnova = $this->firstName;
|
||||
if (mb_substr($osnova, -2, 1, 'utf-8') == 'і')
|
||||
{
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
|
||||
}
|
||||
$this->firstResult = $this->padeg($osnova, array('а', 'ові', 'а', 'ом', 'ові', 'е'));
|
||||
$this->frule = 202;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//2. Українські чоловічі імена, що в називному відмінку однини закінчуються на приголосний та -о , відмінюються як відповідні іменники ІІ відміни.
|
||||
elseif ($this->in($LastSymbol, $this->consonant . 'оь'))
|
||||
{
|
||||
$group = $this->detect2Group($this->firstName);
|
||||
$osnova = $this->getOsnova($this->firstName);
|
||||
//В іменах типу Антін, Нестір, Нечипір, Прокіп, Сидір, Тиміш, Федір голосний і виступає тільки в називному відмінку, у непрямих - о: Антона, Антонові
|
||||
//Чергування і -» о всередині
|
||||
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
|
||||
if ($osLast != 'й' and mb_substr($osnova, -2, 1, 'utf-8') == 'і' and !in_array(mb_substr(mb_strtolower($osnova, 'utf-8'), -4, 4, 'utf-8'), array('світ', 'цвіт')) and !in_array($this->firstName, array('Гліб')))
|
||||
{
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
|
||||
}
|
||||
//Випадання букви е при відмінюванні слів типу Орел
|
||||
if (mb_substr($osnova, 0, 1, 'utf-8') == 'О' and $this->FirstLastVowel($osnova, $this->vowels . 'гк') == 'е' and $BeforeLast . $LastSymbol != 'сь')
|
||||
{
|
||||
|
||||
$delim = mb_strrpos($osnova, 'е', null, 'utf-8');
|
||||
$osnova = mb_substr($osnova, 0, $delim, 'utf-8') . mb_substr($osnova, $delim + 1, mb_strlen($osnova, 'utf-8') - $delim, 'utf-8');
|
||||
}
|
||||
if ($group == 1)
|
||||
{
|
||||
//Тверда група
|
||||
$this->firstResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'ові', $osLast . 'а', $osLast . 'ом', $osLast . 'ові', $this->inverse2($osLast) . 'е'), true);
|
||||
$this->frule = 301;
|
||||
return true;
|
||||
}
|
||||
if ($group == 2)
|
||||
{
|
||||
//Мішана група
|
||||
$this->firstResult = $this->padeg($osnova, array('а', 'еві', 'а', 'ем', 'еві', 'е'));
|
||||
$this->frule = 302;
|
||||
return true;
|
||||
}
|
||||
if ($group == 3)
|
||||
{
|
||||
//М’яка група
|
||||
//Соловей
|
||||
if (mb_substr($this->firstName, -3, 2, 'utf-8') == 'ве')
|
||||
{
|
||||
$osnova = mb_substr($this->firstName, 0, mb_strlen($this->firstName, 'utf-8') - 2, 'utf-8') . '`';
|
||||
$this->firstResult = $this->padeg($osnova, array('я', 'єві', 'я', 'єм', 'єві', 'ю'));
|
||||
$this->frule = 305;
|
||||
return true;
|
||||
}
|
||||
elseif ($BeforeLast == 'і' or $LastSymbol == 'й')
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array('я', 'єві', 'я', 'єм', 'єві', 'ю'), true);
|
||||
$this->frule = 304;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = $this->padeg($osnova, array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
|
||||
$this->frule = 303;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeFirstTheSame();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения женских имен.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function womanFirstName()
|
||||
{
|
||||
/*
|
||||
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
|
||||
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
|
||||
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
|
||||
//Предпоследний символ
|
||||
$BeforeLast = mb_substr($this->firstName, -2, 1, 'utf-8');
|
||||
//Якщо закінчується на ніга -» нога
|
||||
if (mb_substr($this->firstName, -4, 4, 'utf-8') == 'ніга')
|
||||
{
|
||||
$osnova = mb_substr($this->firstName, 0, mb_strlen($this->firstName, 'utf-8') - 3, 'utf-8') . 'о';
|
||||
$this->firstResult = $this->padeg($osnova, array('ги', 'зі', 'гу', 'гою', 'зі', 'го'));
|
||||
$this->frule = 101;
|
||||
return true;
|
||||
}
|
||||
//Останні літера або а або я
|
||||
elseif ($LastSymbol == 'а')
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
|
||||
$this->frule = 101;
|
||||
return true;
|
||||
}
|
||||
elseif ($LastSymbol == 'я')
|
||||
{
|
||||
if ($this->in($BeforeLast, $this->vowels))
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
|
||||
$this->frule = 103;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
|
||||
$this->frule = 102;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//2. Українські жіночі імена, що в називному відмінку однини закінчуються на приголосний, відмінюються як відповідні іменники ІІІ відміни
|
||||
elseif ($this->in($LastSymbol, $this->consonant . 'ь'))
|
||||
{
|
||||
$osnova = $this->getOsnova($this->firstName);
|
||||
$apostrof = '';
|
||||
$duplicate = '';
|
||||
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
|
||||
$osBeforeLast = mb_substr($osnova, -2, 1, 'utf-8');
|
||||
//Чи треба ставити апостроф
|
||||
if ($this->in($osLast, 'мвпбф') and ($this->in($BeforeLast, $this->vowels)))
|
||||
{
|
||||
$apostrof = '`';
|
||||
}
|
||||
//Чи треба подвоювати
|
||||
if ($this->in($osLast, 'дтзсцлн'))
|
||||
{
|
||||
$duplicate = $osLast;
|
||||
}
|
||||
if ($LastSymbol == 'ь')
|
||||
{
|
||||
$this->firstResult = $this->padeg($osnova, array('і', 'і', 'ь', $duplicate . $apostrof . 'ю', 'і', 'е'));
|
||||
$this->frule = 402;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->firstResult = $this->padeg($osnova, array('і', 'і', '', $duplicate . $apostrof . 'ю', 'і', 'е'));
|
||||
$this->frule = 401;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeFirstTheSame();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет фамилию записаное в $this->secondName, по правилам склонения мужских фамилий.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function manSecondName()
|
||||
{
|
||||
/*
|
||||
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
|
||||
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
|
||||
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
|
||||
//Предпоследний символ
|
||||
$BeforeLast = mb_substr($this->secondName, -2, 1, 'utf-8');
|
||||
//Якщо закінчується на ий
|
||||
if ($BeforeLast . $LastSymbol == 'ий' or $BeforeLast . $LastSymbol == 'ой')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('ого', 'ому', 'ого', 'им', 'ому', 'ий'), true, true);
|
||||
$this->srule = 9;
|
||||
return true;
|
||||
}
|
||||
//Останні літера або а або я
|
||||
elseif ($LastSymbol == 'а')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
|
||||
$this->srule = 101;
|
||||
return true;
|
||||
}
|
||||
elseif ($LastSymbol == 'я')
|
||||
{
|
||||
if ($BeforeLast == 'і')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
|
||||
$this->srule = 103;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
|
||||
$this->srule = 102;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//Примітка 2. Імена, що в називному відмінку закінчуються на -р, у родовому мають закінчення -а: Віктор - Віктора, Макар - Макара, але: Ігор - Ігоря, Лазар - Лазаря.
|
||||
elseif ($LastSymbol == 'р')
|
||||
{
|
||||
|
||||
if ($this->secondName == 'Ігор' or $this->secondName == 'Лазар')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('я', 'еві', 'я', 'ем', 'еві', 'е'));
|
||||
$this->srule = 201;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$osnova = $this->secondName;
|
||||
if (mb_substr($osnova, -2, 1, 'utf-8') == 'і')
|
||||
{
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
|
||||
}
|
||||
$this->secondResult = $this->padeg($osnova, array('а', 'ові', 'а', 'ом', 'ові', 'е'));
|
||||
$this->srule = 202;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//2. Українські чоловічі імена, що в називному відмінку однини закінчуються на приголосний та -о , відмінюються як відповідні іменники ІІ відміни.
|
||||
elseif ($this->in($LastSymbol, $this->consonant . 'оь'))
|
||||
{
|
||||
$group = $this->detect2Group($this->secondName);
|
||||
$osnova = $this->getOsnova($this->secondName);
|
||||
//В іменах типу Антін, Нестір, Нечипір, Прокіп, Сидір, Тиміш, Федір голосний і виступає тільки в називному відмінку, у непрямих - о: Антона, Антонові
|
||||
//Чергування і -» о всередині
|
||||
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
|
||||
if ($osLast != 'й' and mb_substr($osnova, -2, 1, 'utf-8') == 'і' and !in_array(mb_substr(mb_strtolower($osnova, 'utf-8'), -4, 4, 'utf-8'), array('світ', 'цвіт')) and !in_array($this->secondName, array('Гліб')))
|
||||
{
|
||||
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
|
||||
}
|
||||
//Випадання букви е при відмінюванні слів типу Орел
|
||||
if (mb_substr($osnova, 0, 1, 'utf-8') == 'О' and $this->FirstLastVowel($osnova, $this->vowels . 'гк') == 'е' and $BeforeLast . $LastSymbol != 'сь')
|
||||
{
|
||||
|
||||
$delim = mb_strrpos($osnova, 'е', null, 'utf-8');
|
||||
$osnova = mb_substr($osnova, 0, $delim, 'utf-8') . mb_substr($osnova, $delim + 1, mb_strlen($osnova, 'utf-8') - $delim, 'utf-8');
|
||||
}
|
||||
if ($group == 1)
|
||||
{
|
||||
//Слова що закінчуються на ок
|
||||
if (mb_substr($this->secondName, -2, 2, 'utf-8') == 'ок')
|
||||
{
|
||||
$this->secondResult = $this->padeg(mb_substr($this->secondName, 0, (mb_strlen($this->secondName, 'utf-8') - 2), 'utf-8'), array('ка', 'кові', 'ка', 'ком', 'кові', 'че'));
|
||||
$this->srule = 30101;
|
||||
return true;
|
||||
}
|
||||
//Російські прізвища на ов, ев, єв
|
||||
elseif (in_array(mb_substr($this->secondName, -2, 2, 'utf-8'), array('ов', 'ев', 'єв')))
|
||||
{
|
||||
$this->secondResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'у', $osLast . 'а', $osLast . 'им', $osLast . 'у', $this->inverse2($osLast) . 'е'), true);
|
||||
$this->srule = 30102;
|
||||
return true;
|
||||
}
|
||||
//Російські прізвища на ін
|
||||
elseif (in_array(mb_substr($this->secondName, -2, 2, 'utf-8'), array('ін')))
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ом', 'у', 'е'));
|
||||
$this->srule = 30103;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Тверда група
|
||||
$this->secondResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'ові', $osLast . 'а', $osLast . 'ом', $osLast . 'ові', $this->inverse2($osLast) . 'е'), true);
|
||||
$this->srule = 301;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if ($group == 2)
|
||||
{
|
||||
//Мішана група
|
||||
$this->secondResult = $this->padeg($osnova, array('а', 'еві', 'а', 'ем', 'еві', 'е'));
|
||||
$this->srule = 302;
|
||||
return true;
|
||||
}
|
||||
if ($group == 3)
|
||||
{
|
||||
//М’яка група
|
||||
//Соловей
|
||||
if (mb_substr($this->secondName, -2, 2, 'utf-8') == 'ей' and $this->in(mb_substr($this->secondName, -3, 1, 'utf-8'), $this->gubni))
|
||||
{
|
||||
$osnova = mb_substr($this->secondName, 0, mb_strlen($this->secondName, 'utf-8') - 2, 'utf-8') . '’';
|
||||
$this->secondResult = $this->padeg($osnova, array('я', 'єві', 'я', 'єм', 'єві', 'ю'));
|
||||
$this->srule = 305;
|
||||
return true;
|
||||
}
|
||||
elseif ($BeforeLast == 'і' or $LastSymbol == 'й')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('я', 'єві', 'я', 'єм', 'єві', 'ю'), true);
|
||||
$this->srule = 304;
|
||||
return true;
|
||||
}
|
||||
//Слова що закінчуються на ець
|
||||
elseif (mb_substr($this->secondName, -3, 3, 'utf-8') == 'ець')
|
||||
{
|
||||
$this->secondResult = $this->padeg(mb_substr($this->secondName, 0, (mb_strlen($this->secondName, 'utf-8') - 3), 'utf-8') . 'ц', array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
|
||||
$this->srule = 305;
|
||||
return true;
|
||||
}
|
||||
//Слова що закінчуються на єць яць
|
||||
elseif (in_array(mb_substr($this->secondName, -3, 3, 'utf-8'), array('єць', 'яць')))
|
||||
{
|
||||
$this->secondResult = $this->padeg(mb_substr($this->secondName, 0, (mb_strlen($this->secondName, 'utf-8') - 3), 'utf-8') . 'йц', array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
|
||||
$this->srule = 306;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = $this->padeg($osnova, array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
|
||||
$this->srule = 303;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($LastSymbol == 'і')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('их', 'им', 'их', 'ими', 'их', 'і'), true);
|
||||
$this->srule = 4;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeSecondTheSame();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет фамилию записаное в $this->secondName, по правилам склонения женских фамилий.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function womanSecondName()
|
||||
{
|
||||
/*
|
||||
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
|
||||
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
|
||||
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
|
||||
//Последний символ
|
||||
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
|
||||
//Предпоследний символ
|
||||
$BeforeLast = mb_substr($this->secondName, -2, 1, 'utf-8');
|
||||
|
||||
//Якщо закінчується на ніга -» нога
|
||||
if (mb_substr($this->secondName, -4, 4, 'utf-8') == 'ніга')
|
||||
{
|
||||
$osnova = mb_substr($this->secondName, 0, mb_strlen($this->secondName, 'utf-8') - 3, 'utf-8') . 'о';
|
||||
$this->secondResult = $this->padeg($osnova, array('ги', 'зі', 'гу', 'гою', 'зі', 'го'));
|
||||
$this->srule = 10101;
|
||||
return true;
|
||||
}
|
||||
//Ті що на ськ
|
||||
elseif ($LastSymbol == 'а' and (in_array(mb_substr($this->secondName, -3, 2, 'utf-8'), array('ов', 'ев', 'єв', 'ив', 'ьк', 'тн', 'рн', 'ин'))))
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'ої', $BeforeLast . 'ій', $BeforeLast . 'у', $BeforeLast . 'ою', $BeforeLast . 'ій', $BeforeLast . 'о'), false, true);
|
||||
$this->srule = 10102;
|
||||
return true;
|
||||
}
|
||||
//Останні літера або а або я
|
||||
elseif ($LastSymbol == 'а')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'и', $BeforeLast . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $BeforeLast . 'і', $BeforeLast . 'о'), false, true);
|
||||
|
||||
$this->srule = 101;
|
||||
return true;
|
||||
}
|
||||
elseif ($LastSymbol == 'я')
|
||||
{
|
||||
//Донская
|
||||
if ($BeforeLast == 'а')
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('ої', 'ій', 'ую', 'ою', 'ій', 'ая'), true, true);
|
||||
$this->srule = 10301;
|
||||
return true;
|
||||
}
|
||||
elseif ($this->in($BeforeLast, $this->vowels))
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
|
||||
$this->srule = 103;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
|
||||
$this->srule = 102;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeSecondTheSame();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет отчество записаное в $this->secondName, по правилам склонения мужских отчеств.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function manFatherName()
|
||||
{
|
||||
$ending = mb_substr($this->fatherName, -2, 2, 'utf-8');
|
||||
if ($ending == 'ич' or $ending == 'іч')
|
||||
{
|
||||
$this->fatherResult = $this->padeg($this->fatherName, array('а', 'у', 'а', 'ем', 'у', 'у'), false, false);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeFatherTheSame();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Функция, которая склоняет отчество записаное в $this->fatherName, по правилам склонения женских отчеств.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
protected function womanFatherName()
|
||||
{
|
||||
if (mb_substr($this->fatherName, -3, 3, 'utf-8') == 'вна')
|
||||
{
|
||||
$this->fatherResult = $this->padeg($this->fatherName, array('и', 'і', 'у', 'ою', 'і', 'о'), true, false);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->makeFatherTheSame();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Автоматическое определение пола
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function genderDetect()
|
||||
{
|
||||
|
||||
//$this->gender = NCL::$MAN; // мужчина
|
||||
if (!$this->gender)
|
||||
{
|
||||
//Определение пола по отчеству
|
||||
if (isset($this->fatherName) and $this->fatherName)
|
||||
{
|
||||
$LastTwo = mb_substr($this->fatherName, -2, 2, 'utf-8');
|
||||
if ($LastTwo == 'ич')
|
||||
{
|
||||
$this->gender = NCL::$MAN; // мужчина
|
||||
return true;
|
||||
}
|
||||
if ($LastTwo == 'на')
|
||||
{
|
||||
$this->gender = NCL::$WOMAN; // женщина
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$man = 0; //Мужчина
|
||||
$woman = 0; //Женщина
|
||||
|
||||
$FLastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
|
||||
$FLastTwo = mb_substr($this->firstName, -2, 2, 'utf-8');
|
||||
$FLastThree = mb_substr($this->firstName, -3, 3, 'utf-8');
|
||||
$FLastFour = mb_substr($this->firstName, -4, 4, 'utf-8');
|
||||
|
||||
$SLastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
|
||||
$SLastTwo = mb_substr($this->secondName, -2, 2, 'utf-8');
|
||||
$SLastThree = mb_substr($this->secondName, -3, 3, 'utf-8');
|
||||
|
||||
//Если нет отчества, то определяем по имени и фамилии, будем считать вероятность
|
||||
if (isset($this->firstName) and $this->firstName)
|
||||
{
|
||||
//Попробуем выжать максимум из имени
|
||||
//Если имя заканчивается на й, то скорее всего мужчина
|
||||
if ($FLastSymbol == 'й')
|
||||
{
|
||||
$man+=0.9;
|
||||
}
|
||||
if (in_array($FLastTwo, array('он', 'ов', 'ав', 'ам', 'ол', 'ан', 'рд', 'мп', 'ко', 'ло')))
|
||||
{
|
||||
$man+=0.5;
|
||||
}
|
||||
if (in_array($FLastThree, array('бов', 'нка', 'яра', 'ила')))
|
||||
{
|
||||
$woman+=0.5;
|
||||
}
|
||||
if ($this->in($FLastSymbol, $this->consonant))
|
||||
{
|
||||
$man+=0.01;
|
||||
}
|
||||
if ($FLastSymbol == 'ь')
|
||||
{
|
||||
$man+=0.02;
|
||||
}
|
||||
|
||||
if (in_array($FLastTwo, array('дь')))
|
||||
{
|
||||
$woman+=0.1;
|
||||
}
|
||||
|
||||
if (in_array($FLastThree, array('ель', 'бов')))
|
||||
{
|
||||
$woman+=0.4;
|
||||
}
|
||||
}
|
||||
|
||||
// $man*=1.2;
|
||||
// $woman*=1.2;
|
||||
|
||||
if (isset($this->secondName) and $this->secondName)
|
||||
{
|
||||
if (in_array($SLastTwo, array('ов', 'ин', 'ев', 'єв', 'ін', 'їн', 'ий', 'їв', 'ів', 'ой', 'ей')))
|
||||
{
|
||||
$man+=0.4;
|
||||
}
|
||||
|
||||
if (in_array($SLastThree, array('ова', 'ина', 'ева', 'єва', 'іна')))
|
||||
{
|
||||
$woman+=0.4;
|
||||
}
|
||||
|
||||
if (in_array($SLastTwo, array('ая')))
|
||||
{
|
||||
$woman+=0.4;
|
||||
}
|
||||
}
|
||||
|
||||
//Теперь смотрим, кто больше набрал
|
||||
if ($man > $woman)
|
||||
{
|
||||
$this->gender = NCL::$MAN;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->gender = NCL::$WOMAN;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Определение текущее слово есть фамилией, именем или отчеством
|
||||
* @return integer $number - 1-фамили 2-имя 3-отчество
|
||||
*/
|
||||
|
||||
protected function detectNamePart($namepart)
|
||||
{
|
||||
$LastSymbol = mb_substr($namepart, -1, 1, 'utf-8');
|
||||
$LastTwo = mb_substr($namepart, -2, 2, 'utf-8');
|
||||
$LastThree = mb_substr($namepart, -3, 3, 'utf-8');
|
||||
$LastFour = mb_substr($namepart, -4, 4, 'utf-8');
|
||||
|
||||
//Считаем вероятность
|
||||
$first = 0;
|
||||
$second = 0;
|
||||
$father = 0;
|
||||
|
||||
//если смахивает на отчество
|
||||
if (in_array($LastThree, array('вна', 'чна', 'ліч')) or in_array($LastFour, array('ьмич', 'ович')))
|
||||
{
|
||||
$father+=3;
|
||||
}
|
||||
|
||||
//Похоже на имя
|
||||
if (in_array($LastThree, array('тин' /*{endings_sirname3}*/)) or in_array($LastFour, array('ьмич', 'юбов', 'івна', 'явка', 'орив', 'кіян' /*{endings_sirname4}*/)))
|
||||
{
|
||||
$first+=0.5;
|
||||
}
|
||||
|
||||
//Исключения
|
||||
if (in_array($namepart, array('Лев', 'Гаїна', 'Афіна', 'Антоніна', 'Ангеліна', 'Альвіна', 'Альбіна', 'Аліна', 'Павло', 'Олесь')))
|
||||
{
|
||||
$first+=10;
|
||||
}
|
||||
|
||||
//похоже на фамилию
|
||||
if (in_array($LastTwo, array('ов', 'ін', 'ев', 'єв', 'ий', 'ин', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'єк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр', 'іл', 'ів', 'ич', 'сь', 'ей', 'нс', 'яс', 'ер', 'ай', 'ян', 'ах', 'ць', 'ющ', 'іс', 'ач', 'уб', 'ох', 'юх','ут','ча','ул','вк','зь', 'уц', 'їн' /*{endings_name2}*/)))
|
||||
{
|
||||
$second+=0.4;
|
||||
}
|
||||
|
||||
if (in_array($LastThree, array('ова', 'ева', 'єва', 'тих', 'рик', 'вач', 'аха', 'шен', 'мей', 'арь', 'вка', 'шир', 'бан', 'чий', 'іна', 'їна', 'ька', 'ань', 'ива', 'аль','ура','ран','ало','ола','кур','оба','оль','нта','зій','ґан','іло','шта', 'юпа', 'рна', 'бла', 'еїн', 'има', 'мар', 'кар', 'оха', 'чур', 'ниш', 'ета', 'тна', 'зур', 'нір', 'йма', 'орж', 'рба', 'іла', 'лас', 'дід', 'роз', 'аба', 'лест', 'мара', 'обка', 'рока', 'сика', 'одна', 'нчар', 'вата', 'ндар', 'грій' /*{endings_name3}*/)))
|
||||
{
|
||||
$second+=0.4;
|
||||
}
|
||||
|
||||
if (in_array($LastFour, array('ьник', 'нчук', 'тник', 'кирь', 'ский', 'шена', 'шина', 'вина', 'нина', 'гана', 'гана', 'хній', 'зюба', 'орош', 'орон', 'сило', 'руба' /*{endings_name4}*/)))
|
||||
{
|
||||
$second+=0.4;
|
||||
}
|
||||
|
||||
|
||||
$max = max(array($first, $second, $father));
|
||||
|
||||
if ($first == $max)
|
||||
{
|
||||
return 'N';
|
||||
}
|
||||
elseif ($second == $max)
|
||||
{
|
||||
return 'S';
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'F';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
34
README.md
34
README.md
@ -1,32 +1,24 @@
|
||||
# NameCaseLib
|
||||
Библиотека для PHP5 позволяет склонять по падежам Фамилию Имя Отчество. Имеет очень хороший алгоритм склонения Имен, Отчеств и Фамилий. Это первая публичная версия библиотеки. Пожалуйста оставляйте все свои пожелания и замечания.
|
||||
Библиотека PHP5 позволяет склонять по падежам Фамилии Имена и Отчества. Имеет две версии для украинского и русского языка. Для обеих языков работаю одинаковые функция для склонения.
|
||||
В скором времени ожидается версия 0.4 с оптимизацией кода и версия 0.5, когда будет написана детальная инструкция по использованию и создан багтрекер.
|
||||
## Туториал
|
||||
Встроенные константы
|
||||
-----------
|
||||
|
||||
* NCLNameCaseRu::$IMENITLN - именительный падеж
|
||||
* NCLNameCaseRu::$RODITLN - родительные падеж
|
||||
* NCLNameCaseRu::$DATELN - дательные падеж
|
||||
* NCLNameCaseRu::$VINITELN - винительный падеж
|
||||
* NCLNameCaseRu::$TVORITELN - творительный падеж
|
||||
* NCLNameCaseRu::$PREDLOGN - предложный падеж
|
||||
|
||||
Пример для украинского и русского языка находится в папке Tutorial
|
||||
|
||||
Пример использования
|
||||
-----------
|
||||
|
||||
echo 'Отчет, ' .
|
||||
$nc->q("Афонин Николай Сергеевич", NCLNameCaseRu::$RODITLN)
|
||||
$nc->q("Афонин Николай Сергеевич", NCL::$RODITLN)
|
||||
. ' о проделаной работе вместе с его сыном ' .
|
||||
$nc->q("Афонин Никита", NCLNameCaseRu::$TVORITELN) .
|
||||
$nc->q("Афонин Никита", NCL::$TVORITELN) .
|
||||
' на осенних каникулах. Задание держалось на ' .
|
||||
$nc->q("Маргаритта Николаевна", NCLNameCaseRu::$PREDLOGN) .
|
||||
$nc->q("Маргаритта Николаевна", NCL::$PREDLOGN) .
|
||||
'; Поздравляем всех предчастных, в том числе и ' .
|
||||
$nc->q("Кардонский Серафим Ильич", NCLNameCaseRu::$VINITELN) . ' и ' .
|
||||
$nc->q("Лобудская София Викторовна", NCLNameCaseRu::$VINITELN) .
|
||||
$nc->q("Кардонский Серафим Ильич", NCL::$VINITELN) . ' и ' .
|
||||
$nc->q("Лобудская София Викторовна", NCL::$VINITELN) .
|
||||
'. Хотим передать поздравление также ' .
|
||||
$nc->q("Игнатьев Павел Викторович", NCLNameCaseRu::$DATELN) . ' и ' .
|
||||
$nc->q("Сумарский Лев", NCLNameCaseRu::$DATELN);
|
||||
$nc->q("Игнатьев Павел Викторович", NCL::$DATELN) . ' и ' .
|
||||
$nc->q("Сумарский Лев", NCL::$DATELN);
|
||||
|
||||
|
||||
Результат выполнения
|
||||
@ -41,6 +33,12 @@ echo 'Отчет, ' .
|
||||
-----------
|
||||
Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
|
||||
## 0.3 (2011-07-02)
|
||||
- Добавлен украинский язык
|
||||
- Все функции склонения работают одинаково для русского и украинского языков
|
||||
- Создан класс с общими функциями
|
||||
- Украинский язык может склонять в «кличний відмінок»
|
||||
|
||||
## 0.1.2 (2011-05-05)
|
||||
- Написана функция поиска имени, фамилии, отчества в строке.
|
||||
- Добавлена функция быстрого склонения NCLNameCaseRu::q(), которая принимает обязательный параметр ФИО в любом формате и возвращает строку в нужно падеже.
|
||||
|
2
Tests/AutoTest/Endings/.gitignore
vendored
Normal file
2
Tests/AutoTest/Endings/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.txt
|
||||
compiled/
|
106
Tests/AutoTest/Endings/BatchTester.php
Normal file
106
Tests/AutoTest/Endings/BatchTester.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Description of BathTester
|
||||
*
|
||||
* @author seagull
|
||||
*/
|
||||
require 'EndingsCompiler.php';
|
||||
|
||||
class BatchTester
|
||||
{
|
||||
|
||||
private $compiler;
|
||||
private $mode;
|
||||
public $epsilon;
|
||||
|
||||
public function __construct($mode, $direction)
|
||||
{
|
||||
copy('../../../Library/NCL.NameCase.core.php', 'compiled/NCL.NameCase.core.php');
|
||||
$testPHP = file_get_contents('../../Library/NameSplitUA' . $direction . '.php');
|
||||
$testPHP = str_replace("require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';", "require_once dirname(__FILE__) . '/NCL.NameCase.ua.php';", $testPHP);
|
||||
file_put_contents('compiled/Test.php', $testPHP);
|
||||
|
||||
$this->compiler = new EndingsCompiler($mode);
|
||||
$this->mode = $mode;
|
||||
$this->compiler->compile();
|
||||
|
||||
$this->epsilon = $this->runTest();
|
||||
}
|
||||
|
||||
public function testText($ending)
|
||||
{
|
||||
$this->compiler->compile($ending);
|
||||
|
||||
return $this->runTest();
|
||||
}
|
||||
|
||||
public function runTest()
|
||||
{
|
||||
exec("phpunit compiled/Test.php", $output);
|
||||
|
||||
preg_match_all('#Tests: ([\d]+), Assertions: ([\d]+), Failures: ([\d]+).#is', $output[count($output) - 1], $found);
|
||||
$tests = (float) $found[2][0];
|
||||
$bad = (float) $found[3][0];
|
||||
|
||||
return (1 - ($bad / $tests));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$direction = "sirname"; //sirname
|
||||
|
||||
for ($num = 2; $num <= 4; $num++)
|
||||
{
|
||||
$good = array();
|
||||
$bad = array();
|
||||
$mode = 'endings_'.$direction . $num;
|
||||
echo "\n===========\n{$mode}\n===========\n";
|
||||
$tester = new BatchTester($mode, $direction);
|
||||
|
||||
$epsilon = $tester->epsilon;
|
||||
|
||||
$endings = file($mode . '.txt');
|
||||
|
||||
|
||||
$old = array();
|
||||
foreach ($endings as $ending)
|
||||
{
|
||||
if (mb_substr(trim($ending), 0, 1, 'utf-8') != '#')
|
||||
{
|
||||
$persent = $tester->testText(trim($ending));
|
||||
echo trim($ending) . " - " . $persent . "\n";
|
||||
|
||||
if ($persent >= $epsilon)
|
||||
{
|
||||
$good[] = trim($ending);
|
||||
}
|
||||
else
|
||||
{
|
||||
$bad[] = trim($ending);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$old[] = $ending;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$content = implode('', $old);
|
||||
if ($good)
|
||||
{
|
||||
echo "\nGOOD \n";
|
||||
echo ", '" . implode("', '", $good) . "'";
|
||||
}
|
||||
if ($bad)
|
||||
{
|
||||
echo "\nBAD \n";
|
||||
echo implode(" ", $bad);
|
||||
$content .= '#'.implode("\n#", $bad);
|
||||
}
|
||||
//file_put_contens($mode . '.txt', '#'.implode("\n#", $bad));
|
||||
file_put_contents($mode . '.txt', $content);
|
||||
}
|
||||
echo "\n\n";
|
||||
?>
|
42
Tests/AutoTest/Endings/EndingsCompiler.php
Normal file
42
Tests/AutoTest/Endings/EndingsCompiler.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Description of EndingsCompiler
|
||||
*
|
||||
* @author seagull
|
||||
*/
|
||||
class EndingsCompiler
|
||||
{
|
||||
private $template;
|
||||
private $destination = 'compiled/NCL.NameCase.ua.php';
|
||||
private $sourceFile = '../../../Library/NCL.NameCase.ua.php';
|
||||
|
||||
private $compiled = '';
|
||||
|
||||
private $mode = 'endings3';
|
||||
|
||||
public function __construct($mode)
|
||||
{
|
||||
$this->template = file_get_contents($this->sourceFile);
|
||||
$this->mode = $mode;
|
||||
}
|
||||
|
||||
private function save()
|
||||
{
|
||||
file_put_contents($this->destination, $this->compiled);
|
||||
}
|
||||
|
||||
public function compile($text = '')
|
||||
{
|
||||
if($text)
|
||||
{
|
||||
$text = ", '".$text."'";
|
||||
}
|
||||
|
||||
$this->compiled = str_replace('/*{'.$this->mode.'}*/', $text , $this->template);
|
||||
//$this->compiled = $this->template;
|
||||
$this->save();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
9652
Tests/Library/GenderDetectUABoth.php
Normal file
9652
Tests/Library/GenderDetectUABoth.php
Normal file
File diff suppressed because it is too large
Load Diff
4219
Tests/Library/GenderDetectUAname.php
Normal file
4219
Tests/Library/GenderDetectUAname.php
Normal file
File diff suppressed because it is too large
Load Diff
8049
Tests/Library/GenderDetectUAsirname.php
Normal file
8049
Tests/Library/GenderDetectUAsirname.php
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
69
Tests/Library/NCLNameCaseUaTestFatherboy.php
Normal file
69
Tests/Library/NCLNameCaseUaTestFatherboy.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
|
||||
|
||||
|
||||
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NCLNameCaseRu
|
||||
*/
|
||||
protected $object;
|
||||
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$this->object = new NCLNameCaseUa;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testFatherMan0()
|
||||
{
|
||||
$this->object->setFatherName('Олександрович');
|
||||
$this->object->setGender(1);
|
||||
|
||||
$this->assertEquals(explode(',','Олександрович,Олександровича,Олександровичу,Олександровича,Олександровичем,Олександровичу,Олександровичу'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherMan1()
|
||||
{
|
||||
$this->object->setFatherName('Миколайович');
|
||||
$this->object->setGender(1);
|
||||
|
||||
$this->assertEquals(explode(',','Миколайович,Миколайовича,Миколайовичу,Миколайовича,Миколайовичем,Миколайовичу,Миколайовичу'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherMan2()
|
||||
{
|
||||
$this->object->setFatherName('Кузьмич');
|
||||
$this->object->setGender(1);
|
||||
|
||||
$this->assertEquals(explode(',','Кузьмич,Кузьмича,Кузьмичу,Кузьмича,Кузьмичем,Кузьмичу,Кузьмичу'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherMan3()
|
||||
{
|
||||
$this->object->setFatherName('Петрович');
|
||||
$this->object->setGender(1);
|
||||
|
||||
$this->assertEquals(explode(',','Петрович,Петровича,Петровичу,Петровича,Петровичем,Петровичу,Петровичу'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherMan4()
|
||||
{
|
||||
$this->object->setFatherName('Ілліч');
|
||||
$this->object->setGender(1);
|
||||
|
||||
$this->assertEquals(explode(',','Ілліч,Ілліча,Іллічу,Ілліча,Іллічем,Іллічу,Іллічу'), $this->object->getFatherNameCase());
|
||||
}
|
||||
|
||||
}
|
55
Tests/Library/NCLNameCaseUaTestFathergirl.php
Normal file
55
Tests/Library/NCLNameCaseUaTestFathergirl.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
|
||||
|
||||
|
||||
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NCLNameCaseRu
|
||||
*/
|
||||
protected $object;
|
||||
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$this->object = new NCLNameCaseUa;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testFatherWoman0()
|
||||
{
|
||||
$this->object->setFatherName('Василівна');
|
||||
$this->object->setGender(2);
|
||||
|
||||
$this->assertEquals(explode(',','Василівна,Василівни,Василівні,Василівну,Василівною,Василівні,Василівно'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherWoman1()
|
||||
{
|
||||
$this->object->setFatherName('Антонівна');
|
||||
$this->object->setGender(2);
|
||||
|
||||
$this->assertEquals(explode(',','Антонівна,Антонівни,Антонівні,Антонівну,Антонівною,Антонівні,Антонівно'), $this->object->getFatherNameCase());
|
||||
}
|
||||
public function testFatherWoman2()
|
||||
{
|
||||
$this->object->setFatherName('Яківна');
|
||||
$this->object->setGender(2);
|
||||
|
||||
$this->assertEquals(explode(',','Яківна,Яківни,Яківні,Яківну,Яківною,Яківні,Яківно'), $this->object->getFatherNameCase());
|
||||
}
|
||||
|
||||
}
|
3597
Tests/Library/NCLNameCaseUaTestNamesboy.php
Normal file
3597
Tests/Library/NCLNameCaseUaTestNamesboy.php
Normal file
File diff suppressed because it is too large
Load Diff
2330
Tests/Library/NCLNameCaseUaTestNamesgirl.php
Normal file
2330
Tests/Library/NCLNameCaseUaTestNamesgirl.php
Normal file
File diff suppressed because it is too large
Load Diff
5704
Tests/Library/NCLNameCaseUaTestSirnamesboy.php
Normal file
5704
Tests/Library/NCLNameCaseUaTestSirnamesboy.php
Normal file
File diff suppressed because it is too large
Load Diff
5725
Tests/Library/NCLNameCaseUaTestSirnamesgirl.php
Normal file
5725
Tests/Library/NCLNameCaseUaTestSirnamesgirl.php
Normal file
File diff suppressed because it is too large
Load Diff
66
Tests/Library/NameSplitUAfather.php
Normal file
66
Tests/Library/NameSplitUAfather.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
|
||||
|
||||
|
||||
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NCLNameCaseRu
|
||||
*/
|
||||
protected $object;
|
||||
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$this->object = new NCLNameCaseUa;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testSplDetect0()
|
||||
{
|
||||
$this->assertEquals('F-Олександрович', $this->object->splitFullName('Олександрович').'-Олександрович');
|
||||
}
|
||||
public function testSplDetect1()
|
||||
{
|
||||
$this->assertEquals('F-Миколайович', $this->object->splitFullName('Миколайович').'-Миколайович');
|
||||
}
|
||||
public function testSplDetect2()
|
||||
{
|
||||
$this->assertEquals('F-Кузьмич', $this->object->splitFullName('Кузьмич').'-Кузьмич');
|
||||
}
|
||||
public function testSplDetect3()
|
||||
{
|
||||
$this->assertEquals('F-Петрович', $this->object->splitFullName('Петрович').'-Петрович');
|
||||
}
|
||||
public function testSplDetect4()
|
||||
{
|
||||
$this->assertEquals('F-Ілліч', $this->object->splitFullName('Ілліч').'-Ілліч');
|
||||
}
|
||||
public function testSplDetect5()
|
||||
{
|
||||
$this->assertEquals('F-Василівна', $this->object->splitFullName('Василівна').'-Василівна');
|
||||
}
|
||||
public function testSplDetect6()
|
||||
{
|
||||
$this->assertEquals('F-Антонівна', $this->object->splitFullName('Антонівна').'-Антонівна');
|
||||
}
|
||||
public function testSplDetect7()
|
||||
{
|
||||
$this->assertEquals('F-Яківна', $this->object->splitFullName('Яківна').'-Яківна');
|
||||
}
|
||||
|
||||
}
|
3382
Tests/Library/NameSplitUAname.php
Normal file
3382
Tests/Library/NameSplitUAname.php
Normal file
File diff suppressed because it is too large
Load Diff
5894
Tests/Library/NameSplitUAsirname.php
Normal file
5894
Tests/Library/NameSplitUAsirname.php
Normal file
File diff suppressed because it is too large
Load Diff
442
Tests/Library/NameSplitfather.php
Normal file
442
Tests/Library/NameSplitfather.php
Normal file
@ -0,0 +1,442 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
|
||||
|
||||
|
||||
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NCLNameCaseRu
|
||||
*/
|
||||
protected $object;
|
||||
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$this->object = new NCLNameCaseRu;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testSplDetect0()
|
||||
{
|
||||
$this->assertEquals('F-Александрович', $this->object->splitFullName('Александрович').'-Александрович');
|
||||
}
|
||||
public function testSplDetect1()
|
||||
{
|
||||
$this->assertEquals('F-Алексеевич', $this->object->splitFullName('Алексеевич').'-Алексеевич');
|
||||
}
|
||||
public function testSplDetect2()
|
||||
{
|
||||
$this->assertEquals('F-Анатольевич', $this->object->splitFullName('Анатольевич').'-Анатольевич');
|
||||
}
|
||||
public function testSplDetect3()
|
||||
{
|
||||
$this->assertEquals('F-Андреевич', $this->object->splitFullName('Андреевич').'-Андреевич');
|
||||
}
|
||||
public function testSplDetect4()
|
||||
{
|
||||
$this->assertEquals('F-Антонович', $this->object->splitFullName('Антонович').'-Антонович');
|
||||
}
|
||||
public function testSplDetect5()
|
||||
{
|
||||
$this->assertEquals('F-Аркадьевич', $this->object->splitFullName('Аркадьевич').'-Аркадьевич');
|
||||
}
|
||||
public function testSplDetect6()
|
||||
{
|
||||
$this->assertEquals('F-Богданович', $this->object->splitFullName('Богданович').'-Богданович');
|
||||
}
|
||||
public function testSplDetect7()
|
||||
{
|
||||
$this->assertEquals('F-Борисович', $this->object->splitFullName('Борисович').'-Борисович');
|
||||
}
|
||||
public function testSplDetect8()
|
||||
{
|
||||
$this->assertEquals('F-Валентинович', $this->object->splitFullName('Валентинович').'-Валентинович');
|
||||
}
|
||||
public function testSplDetect9()
|
||||
{
|
||||
$this->assertEquals('F-Валерьевич', $this->object->splitFullName('Валерьевич').'-Валерьевич');
|
||||
}
|
||||
public function testSplDetect10()
|
||||
{
|
||||
$this->assertEquals('F-Васильевич', $this->object->splitFullName('Васильевич').'-Васильевич');
|
||||
}
|
||||
public function testSplDetect11()
|
||||
{
|
||||
$this->assertEquals('F-Викторович', $this->object->splitFullName('Викторович').'-Викторович');
|
||||
}
|
||||
public function testSplDetect12()
|
||||
{
|
||||
$this->assertEquals('F-Владимирович', $this->object->splitFullName('Владимирович').'-Владимирович');
|
||||
}
|
||||
public function testSplDetect13()
|
||||
{
|
||||
$this->assertEquals('F-Вячеславович', $this->object->splitFullName('Вячеславович').'-Вячеславович');
|
||||
}
|
||||
public function testSplDetect14()
|
||||
{
|
||||
$this->assertEquals('F-Генадиевич', $this->object->splitFullName('Генадиевич').'-Генадиевич');
|
||||
}
|
||||
public function testSplDetect15()
|
||||
{
|
||||
$this->assertEquals('F-Георгиевич', $this->object->splitFullName('Георгиевич').'-Георгиевич');
|
||||
}
|
||||
public function testSplDetect16()
|
||||
{
|
||||
$this->assertEquals('F-Григорьевич', $this->object->splitFullName('Григорьевич').'-Григорьевич');
|
||||
}
|
||||
public function testSplDetect17()
|
||||
{
|
||||
$this->assertEquals('F-Данилович', $this->object->splitFullName('Данилович').'-Данилович');
|
||||
}
|
||||
public function testSplDetect18()
|
||||
{
|
||||
$this->assertEquals('F-Дмитриевич', $this->object->splitFullName('Дмитриевич').'-Дмитриевич');
|
||||
}
|
||||
public function testSplDetect19()
|
||||
{
|
||||
$this->assertEquals('F-Евгеньевич', $this->object->splitFullName('Евгеньевич').'-Евгеньевич');
|
||||
}
|
||||
public function testSplDetect20()
|
||||
{
|
||||
$this->assertEquals('F-Егорович', $this->object->splitFullName('Егорович').'-Егорович');
|
||||
}
|
||||
public function testSplDetect21()
|
||||
{
|
||||
$this->assertEquals('F-Ефимович', $this->object->splitFullName('Ефимович').'-Ефимович');
|
||||
}
|
||||
public function testSplDetect22()
|
||||
{
|
||||
$this->assertEquals('F-Иванович', $this->object->splitFullName('Иванович').'-Иванович');
|
||||
}
|
||||
public function testSplDetect23()
|
||||
{
|
||||
$this->assertEquals('F-Игоревич', $this->object->splitFullName('Игоревич').'-Игоревич');
|
||||
}
|
||||
public function testSplDetect24()
|
||||
{
|
||||
$this->assertEquals('F-Ильич', $this->object->splitFullName('Ильич').'-Ильич');
|
||||
}
|
||||
public function testSplDetect25()
|
||||
{
|
||||
$this->assertEquals('F-Иосифович', $this->object->splitFullName('Иосифович').'-Иосифович');
|
||||
}
|
||||
public function testSplDetect26()
|
||||
{
|
||||
$this->assertEquals('F-Кириллович', $this->object->splitFullName('Кириллович').'-Кириллович');
|
||||
}
|
||||
public function testSplDetect27()
|
||||
{
|
||||
$this->assertEquals('F-Константинович', $this->object->splitFullName('Константинович').'-Константинович');
|
||||
}
|
||||
public function testSplDetect28()
|
||||
{
|
||||
$this->assertEquals('F-Леонидович', $this->object->splitFullName('Леонидович').'-Леонидович');
|
||||
}
|
||||
public function testSplDetect29()
|
||||
{
|
||||
$this->assertEquals('F-Львович', $this->object->splitFullName('Львович').'-Львович');
|
||||
}
|
||||
public function testSplDetect30()
|
||||
{
|
||||
$this->assertEquals('F-Максимович', $this->object->splitFullName('Максимович').'-Максимович');
|
||||
}
|
||||
public function testSplDetect31()
|
||||
{
|
||||
$this->assertEquals('F-Матвеевич', $this->object->splitFullName('Матвеевич').'-Матвеевич');
|
||||
}
|
||||
public function testSplDetect32()
|
||||
{
|
||||
$this->assertEquals('F-Михайлович', $this->object->splitFullName('Михайлович').'-Михайлович');
|
||||
}
|
||||
public function testSplDetect33()
|
||||
{
|
||||
$this->assertEquals('F-Николаевич', $this->object->splitFullName('Николаевич').'-Николаевич');
|
||||
}
|
||||
public function testSplDetect34()
|
||||
{
|
||||
$this->assertEquals('F-Олегович', $this->object->splitFullName('Олегович').'-Олегович');
|
||||
}
|
||||
public function testSplDetect35()
|
||||
{
|
||||
$this->assertEquals('F-Павлович', $this->object->splitFullName('Павлович').'-Павлович');
|
||||
}
|
||||
public function testSplDetect36()
|
||||
{
|
||||
$this->assertEquals('F-Петрович', $this->object->splitFullName('Петрович').'-Петрович');
|
||||
}
|
||||
public function testSplDetect37()
|
||||
{
|
||||
$this->assertEquals('F-Платонович', $this->object->splitFullName('Платонович').'-Платонович');
|
||||
}
|
||||
public function testSplDetect38()
|
||||
{
|
||||
$this->assertEquals('F-Робертович', $this->object->splitFullName('Робертович').'-Робертович');
|
||||
}
|
||||
public function testSplDetect39()
|
||||
{
|
||||
$this->assertEquals('F-Романович', $this->object->splitFullName('Романович').'-Романович');
|
||||
}
|
||||
public function testSplDetect40()
|
||||
{
|
||||
$this->assertEquals('F-Семенович', $this->object->splitFullName('Семенович').'-Семенович');
|
||||
}
|
||||
public function testSplDetect41()
|
||||
{
|
||||
$this->assertEquals('F-Сергеевич', $this->object->splitFullName('Сергеевич').'-Сергеевич');
|
||||
}
|
||||
public function testSplDetect42()
|
||||
{
|
||||
$this->assertEquals('F-Степанович', $this->object->splitFullName('Степанович').'-Степанович');
|
||||
}
|
||||
public function testSplDetect43()
|
||||
{
|
||||
$this->assertEquals('F-Станиславович', $this->object->splitFullName('Станиславович').'-Станиславович');
|
||||
}
|
||||
public function testSplDetect44()
|
||||
{
|
||||
$this->assertEquals('F-Тарасович', $this->object->splitFullName('Тарасович').'-Тарасович');
|
||||
}
|
||||
public function testSplDetect45()
|
||||
{
|
||||
$this->assertEquals('F-Тимофеевич', $this->object->splitFullName('Тимофеевич').'-Тимофеевич');
|
||||
}
|
||||
public function testSplDetect46()
|
||||
{
|
||||
$this->assertEquals('F-Федорович', $this->object->splitFullName('Федорович').'-Федорович');
|
||||
}
|
||||
public function testSplDetect47()
|
||||
{
|
||||
$this->assertEquals('F-Феликсович', $this->object->splitFullName('Феликсович').'-Феликсович');
|
||||
}
|
||||
public function testSplDetect48()
|
||||
{
|
||||
$this->assertEquals('F-Филиппович', $this->object->splitFullName('Филиппович').'-Филиппович');
|
||||
}
|
||||
public function testSplDetect49()
|
||||
{
|
||||
$this->assertEquals('F-Эдуардович', $this->object->splitFullName('Эдуардович').'-Эдуардович');
|
||||
}
|
||||
public function testSplDetect50()
|
||||
{
|
||||
$this->assertEquals('F-Юрьевич', $this->object->splitFullName('Юрьевич').'-Юрьевич');
|
||||
}
|
||||
public function testSplDetect51()
|
||||
{
|
||||
$this->assertEquals('F-Яковлевич', $this->object->splitFullName('Яковлевич').'-Яковлевич');
|
||||
}
|
||||
public function testSplDetect52()
|
||||
{
|
||||
$this->assertEquals('F-Ярославочвич', $this->object->splitFullName('Ярославочвич').'-Ярославочвич');
|
||||
}
|
||||
public function testSplDetect53()
|
||||
{
|
||||
$this->assertEquals('F-Александровна', $this->object->splitFullName('Александровна').'-Александровна');
|
||||
}
|
||||
public function testSplDetect54()
|
||||
{
|
||||
$this->assertEquals('F-Алексеевна', $this->object->splitFullName('Алексеевна').'-Алексеевна');
|
||||
}
|
||||
public function testSplDetect55()
|
||||
{
|
||||
$this->assertEquals('F-Анатольевна', $this->object->splitFullName('Анатольевна').'-Анатольевна');
|
||||
}
|
||||
public function testSplDetect56()
|
||||
{
|
||||
$this->assertEquals('F-Андреевна', $this->object->splitFullName('Андреевна').'-Андреевна');
|
||||
}
|
||||
public function testSplDetect57()
|
||||
{
|
||||
$this->assertEquals('F-Антоновна', $this->object->splitFullName('Антоновна').'-Антоновна');
|
||||
}
|
||||
public function testSplDetect58()
|
||||
{
|
||||
$this->assertEquals('F-Аркадьевна', $this->object->splitFullName('Аркадьевна').'-Аркадьевна');
|
||||
}
|
||||
public function testSplDetect59()
|
||||
{
|
||||
$this->assertEquals('F-Богдановна', $this->object->splitFullName('Богдановна').'-Богдановна');
|
||||
}
|
||||
public function testSplDetect60()
|
||||
{
|
||||
$this->assertEquals('F-Борисовна', $this->object->splitFullName('Борисовна').'-Борисовна');
|
||||
}
|
||||
public function testSplDetect61()
|
||||
{
|
||||
$this->assertEquals('F-Валентиновна', $this->object->splitFullName('Валентиновна').'-Валентиновна');
|
||||
}
|
||||
public function testSplDetect62()
|
||||
{
|
||||
$this->assertEquals('F-Валерьевна', $this->object->splitFullName('Валерьевна').'-Валерьевна');
|
||||
}
|
||||
public function testSplDetect63()
|
||||
{
|
||||
$this->assertEquals('F-Васильевна', $this->object->splitFullName('Васильевна').'-Васильевна');
|
||||
}
|
||||
public function testSplDetect64()
|
||||
{
|
||||
$this->assertEquals('F-Викторовна', $this->object->splitFullName('Викторовна').'-Викторовна');
|
||||
}
|
||||
public function testSplDetect65()
|
||||
{
|
||||
$this->assertEquals('F-Владимировна', $this->object->splitFullName('Владимировна').'-Владимировна');
|
||||
}
|
||||
public function testSplDetect66()
|
||||
{
|
||||
$this->assertEquals('F-Владиславовна', $this->object->splitFullName('Владиславовна').'-Владиславовна');
|
||||
}
|
||||
public function testSplDetect67()
|
||||
{
|
||||
$this->assertEquals('F-Вячеславовна', $this->object->splitFullName('Вячеславовна').'-Вячеславовна');
|
||||
}
|
||||
public function testSplDetect68()
|
||||
{
|
||||
$this->assertEquals('F-Генадиевна', $this->object->splitFullName('Генадиевна').'-Генадиевна');
|
||||
}
|
||||
public function testSplDetect69()
|
||||
{
|
||||
$this->assertEquals('F-Георгиевна', $this->object->splitFullName('Георгиевна').'-Георгиевна');
|
||||
}
|
||||
public function testSplDetect70()
|
||||
{
|
||||
$this->assertEquals('F-Григорьевна', $this->object->splitFullName('Григорьевна').'-Григорьевна');
|
||||
}
|
||||
public function testSplDetect71()
|
||||
{
|
||||
$this->assertEquals('F-Даниловна', $this->object->splitFullName('Даниловна').'-Даниловна');
|
||||
}
|
||||
public function testSplDetect72()
|
||||
{
|
||||
$this->assertEquals('F-Дмитриевна', $this->object->splitFullName('Дмитриевна').'-Дмитриевна');
|
||||
}
|
||||
public function testSplDetect73()
|
||||
{
|
||||
$this->assertEquals('F-Евгеньевна', $this->object->splitFullName('Евгеньевна').'-Евгеньевна');
|
||||
}
|
||||
public function testSplDetect74()
|
||||
{
|
||||
$this->assertEquals('F-Егоровна', $this->object->splitFullName('Егоровна').'-Егоровна');
|
||||
}
|
||||
public function testSplDetect75()
|
||||
{
|
||||
$this->assertEquals('F-Ефимовна', $this->object->splitFullName('Ефимовна').'-Ефимовна');
|
||||
}
|
||||
public function testSplDetect76()
|
||||
{
|
||||
$this->assertEquals('F-Ивановна', $this->object->splitFullName('Ивановна').'-Ивановна');
|
||||
}
|
||||
public function testSplDetect77()
|
||||
{
|
||||
$this->assertEquals('F-Игоревна', $this->object->splitFullName('Игоревна').'-Игоревна');
|
||||
}
|
||||
public function testSplDetect78()
|
||||
{
|
||||
$this->assertEquals('F-Ильинична', $this->object->splitFullName('Ильинична').'-Ильинична');
|
||||
}
|
||||
public function testSplDetect79()
|
||||
{
|
||||
$this->assertEquals('F-Кирилловна', $this->object->splitFullName('Кирилловна').'-Кирилловна');
|
||||
}
|
||||
public function testSplDetect80()
|
||||
{
|
||||
$this->assertEquals('F-Константиновна', $this->object->splitFullName('Константиновна').'-Константиновна');
|
||||
}
|
||||
public function testSplDetect81()
|
||||
{
|
||||
$this->assertEquals('F-Леонидовна', $this->object->splitFullName('Леонидовна').'-Леонидовна');
|
||||
}
|
||||
public function testSplDetect82()
|
||||
{
|
||||
$this->assertEquals('F-Львовна', $this->object->splitFullName('Львовна').'-Львовна');
|
||||
}
|
||||
public function testSplDetect83()
|
||||
{
|
||||
$this->assertEquals('F-Максимовна', $this->object->splitFullName('Максимовна').'-Максимовна');
|
||||
}
|
||||
public function testSplDetect84()
|
||||
{
|
||||
$this->assertEquals('F-Михайловна', $this->object->splitFullName('Михайловна').'-Михайловна');
|
||||
}
|
||||
public function testSplDetect85()
|
||||
{
|
||||
$this->assertEquals('F-Николаевна', $this->object->splitFullName('Николаевна').'-Николаевна');
|
||||
}
|
||||
public function testSplDetect86()
|
||||
{
|
||||
$this->assertEquals('F-Олеговна', $this->object->splitFullName('Олеговна').'-Олеговна');
|
||||
}
|
||||
public function testSplDetect87()
|
||||
{
|
||||
$this->assertEquals('F-Павловна', $this->object->splitFullName('Павловна').'-Павловна');
|
||||
}
|
||||
public function testSplDetect88()
|
||||
{
|
||||
$this->assertEquals('F-Петровна', $this->object->splitFullName('Петровна').'-Петровна');
|
||||
}
|
||||
public function testSplDetect89()
|
||||
{
|
||||
$this->assertEquals('F-Робертовна', $this->object->splitFullName('Робертовна').'-Робертовна');
|
||||
}
|
||||
public function testSplDetect90()
|
||||
{
|
||||
$this->assertEquals('F-Романовна', $this->object->splitFullName('Романовна').'-Романовна');
|
||||
}
|
||||
public function testSplDetect91()
|
||||
{
|
||||
$this->assertEquals('F-Семеновна', $this->object->splitFullName('Семеновна').'-Семеновна');
|
||||
}
|
||||
public function testSplDetect92()
|
||||
{
|
||||
$this->assertEquals('F-Сергеевна', $this->object->splitFullName('Сергеевна').'-Сергеевна');
|
||||
}
|
||||
public function testSplDetect93()
|
||||
{
|
||||
$this->assertEquals('F-Степановна', $this->object->splitFullName('Степановна').'-Степановна');
|
||||
}
|
||||
public function testSplDetect94()
|
||||
{
|
||||
$this->assertEquals('F-Станиславовна', $this->object->splitFullName('Станиславовна').'-Станиславовна');
|
||||
}
|
||||
public function testSplDetect95()
|
||||
{
|
||||
$this->assertEquals('F-Тарасовна', $this->object->splitFullName('Тарасовна').'-Тарасовна');
|
||||
}
|
||||
public function testSplDetect96()
|
||||
{
|
||||
$this->assertEquals('F-Федоровна', $this->object->splitFullName('Федоровна').'-Федоровна');
|
||||
}
|
||||
public function testSplDetect97()
|
||||
{
|
||||
$this->assertEquals('F-Феликсовна', $this->object->splitFullName('Феликсовна').'-Феликсовна');
|
||||
}
|
||||
public function testSplDetect98()
|
||||
{
|
||||
$this->assertEquals('F-Филипповна', $this->object->splitFullName('Филипповна').'-Филипповна');
|
||||
}
|
||||
public function testSplDetect99()
|
||||
{
|
||||
$this->assertEquals('F-Эдуардовна', $this->object->splitFullName('Эдуардовна').'-Эдуардовна');
|
||||
}
|
||||
public function testSplDetect100()
|
||||
{
|
||||
$this->assertEquals('F-Юрьевна', $this->object->splitFullName('Юрьевна').'-Юрьевна');
|
||||
}
|
||||
public function testSplDetect101()
|
||||
{
|
||||
$this->assertEquals('F-Яковлевна', $this->object->splitFullName('Яковлевна').'-Яковлевна');
|
||||
}
|
||||
|
||||
}
|
1626
Tests/Library/NameSplitname.php
Normal file
1626
Tests/Library/NameSplitname.php
Normal file
File diff suppressed because it is too large
Load Diff
8122
Tests/Library/NameSplitsirname.php
Normal file
8122
Tests/Library/NameSplitsirname.php
Normal file
File diff suppressed because it is too large
Load Diff
96
Tests/TestGenerator/NCLNameCaseUAGenerator.php
Normal file
96
Tests/TestGenerator/NCLNameCaseUAGenerator.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
class TestGeneratorDB
|
||||
{
|
||||
|
||||
public $maintemplate;
|
||||
public $testtemplate;
|
||||
public $resultArr = array();
|
||||
private $gender;
|
||||
private $tests;
|
||||
private $count = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
//$this->resultArr[]=file('Names/boy_full_result.txt');
|
||||
//$this->resultArr[]=file('Names/girl_full_result.txt');
|
||||
}
|
||||
|
||||
public function generate($fname, $gender)
|
||||
{
|
||||
$this->maintemplate = file_get_contents('Template/NCLNameCaseUaTest.main');
|
||||
$this->testtemplate = file_get_contents('Template/NCLNameCaseRuTest' . $fname . $gender . '.test');
|
||||
//$this->resultArr=file('Names/'.$gender.'_full_result.txt');
|
||||
$this->count = 0;
|
||||
$fnewname = $fname;
|
||||
if($fnewname=='Sirnames')
|
||||
{
|
||||
$fnewname = 'second';
|
||||
}
|
||||
if ($gender == 'boy')
|
||||
{
|
||||
$this->gender = 1;
|
||||
$this->dbTable = 'boy' . strtolower($fnewname);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->gender = 2;
|
||||
$this->dbTable = 'girl' . strtolower($fnewname) ;
|
||||
}
|
||||
$this->resultArr = mysql_query("SELECT * FROM {$this->dbTable}");
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
$all = array();
|
||||
while ($row = mysql_fetch_assoc($this->resultArr))
|
||||
{
|
||||
//$tmpnames=explode("#",trim(str_replace('ё','е',$name)));
|
||||
|
||||
$firstRes = array();
|
||||
$secondRes = array();
|
||||
$fatherRes = array();
|
||||
$secondRes = $fatherRes = $firstRes = explode('#', $row['nameCase']);
|
||||
|
||||
$this->generateTest($firstRes, $secondRes, $fatherRes);
|
||||
}
|
||||
//}
|
||||
$res = str_replace('{% tests %}', $this->tests, $this->maintemplate);
|
||||
$res = str_replace('{% name %}', $fname, $res);
|
||||
file_put_contents('../Library/NCLNameCaseUaTest' . $fname . $gender . '.php', $res);
|
||||
}
|
||||
|
||||
private function generateTest($firstRes, $secondRes, $fatherRes)
|
||||
{
|
||||
$tpl = $this->testtemplate;
|
||||
$tpl = str_replace('{% id %}', $this->count, $tpl);
|
||||
$tpl=str_replace('{% second %}', $secondRes[0], $tpl);
|
||||
$tpl = str_replace('{% first %}', $firstRes[0], $tpl);
|
||||
$tpl=str_replace('{% father %}', $fatherRes[0], $tpl);
|
||||
$tpl = str_replace('{% gender %}', $this->gender, $tpl);
|
||||
$tpl = str_replace('{% firstOK %}', implode(',', $firstRes), $tpl);
|
||||
$tpl = str_replace('{% secondOK %}', implode(',', $secondRes), $tpl);
|
||||
$tpl = str_replace('{% fatherOK %}', implode(',', $fatherRes), $tpl);
|
||||
$this->tests.=$tpl;
|
||||
$this->count++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Names', 'boy');
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Names', 'girl');
|
||||
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Father', 'boy');
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Father', 'girl');
|
||||
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Sirnames', 'boy');
|
||||
$p = new TestGeneratorDB;
|
||||
$p->generate('Sirnames', 'girl');
|
||||
?>
|
1016
Tests/TestGenerator/Names/boy_SF.txt
Normal file
1016
Tests/TestGenerator/Names/boy_SF.txt
Normal file
File diff suppressed because it is too large
Load Diff
1004
Tests/TestGenerator/Names/girl_SF.txt
Normal file
1004
Tests/TestGenerator/Names/girl_SF.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,8 @@
|
||||
Абрамов
|
||||
Авдеев
|
||||
Аверин
|
||||
Котляр
|
||||
Кобзарь
|
||||
Аверьянов
|
||||
Агапов
|
||||
Агафонов
|
||||
|
42
Tests/TestGenerator/NamesAll/compile2.php
Normal file
42
Tests/TestGenerator/NamesAll/compile2.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
function cl($text)
|
||||
{
|
||||
return trim($text);
|
||||
}
|
||||
$type='boy';
|
||||
|
||||
$names=file($type.'name.txt');
|
||||
$sirnames=file($type.'sirname.txt');
|
||||
|
||||
$countname=count($names);
|
||||
$countsirname=count($sirnames);
|
||||
|
||||
$all=max(array($countname, $countsirname));
|
||||
$res=array();
|
||||
$cur=0;
|
||||
for ($i=0;$i<$all;$i++)
|
||||
{
|
||||
$cur++;
|
||||
$full="";
|
||||
if ($cur>$countsirname)
|
||||
{
|
||||
$full=cl($sirnames[rand(0,($countsirname-1))]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$full=cl($sirnames[$i]);
|
||||
}
|
||||
$full.=' ';
|
||||
if ($cur>$countname)
|
||||
{
|
||||
$full.=cl($names[rand(0,($countname-1))]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$full.=cl($names[$i]);
|
||||
}
|
||||
$res[]=$full;
|
||||
}
|
||||
print_r(implode("\n", $res));
|
||||
file_put_contents('../Names/'.$type."_SF.txt", implode("\n", $res));
|
||||
?>
|
34
Tests/TestGenerator/Template/NCLNameCaseUaTest.main
Normal file
34
Tests/TestGenerator/Template/NCLNameCaseUaTest.main
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
|
||||
|
||||
|
||||
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NCLNameCaseRu
|
||||
*/
|
||||
protected $object;
|
||||
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$this->object = new NCLNameCaseUa;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
{% tests %}
|
||||
|
||||
}
|
5
Tests/TestGenerator/Template/NameSplit.test
Normal file
5
Tests/TestGenerator/Template/NameSplit.test
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
public function testSplDetect{% id %}()
|
||||
{
|
||||
$this->assertEquals('{% gender %}-{% name %}', $this->object->splitFullName('{% name %}').'-{% name %}');
|
||||
}
|
99
Tests/TestGenerator/UAGenderDetector.both.php.php
Normal file
99
Tests/TestGenerator/UAGenderDetector.both.php.php
Normal file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
class TestGenerator
|
||||
{
|
||||
public $maintemplate;
|
||||
public $testtemplate;
|
||||
|
||||
public $resultArrB=array();
|
||||
public $resultArrG=array();
|
||||
|
||||
private $gender;
|
||||
|
||||
private $tests;
|
||||
private $count=0;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
//$this->resultArr[]=file('Names/boy_full_result.txt');
|
||||
//$this->resultArr[]=file('Names/girl_full_result.txt');
|
||||
}
|
||||
|
||||
private function make($gender)
|
||||
{
|
||||
$res = mysql_query("SELECT * FROM {$gender}second");
|
||||
$secondArr = array();
|
||||
while($row = mysql_fetch_assoc($res))
|
||||
{
|
||||
$secondArr[] = $row['name'];
|
||||
}
|
||||
$res = mysql_query("SELECT * FROM {$gender}names");
|
||||
$firstArr = array();
|
||||
while($row = mysql_fetch_assoc($res))
|
||||
{
|
||||
$firstArr[] = $row['name'];
|
||||
}
|
||||
|
||||
$countFirst = count($firstArr);
|
||||
$countSecond = count($secondArr);
|
||||
|
||||
$max = max(array($countFirst, $countSecond));
|
||||
|
||||
$result = array();
|
||||
|
||||
for($i=0; $i<$max; $i++)
|
||||
{
|
||||
$indexFirst = $i % $countFirst;
|
||||
$indexSecond = $i % $countSecond;
|
||||
|
||||
$this->generateTest($secondArr[$indexSecond],$firstArr[$indexFirst]);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function generate()
|
||||
{
|
||||
$this->maintemplate = file_get_contents('Template/NCLNameCaseUaTest.main');
|
||||
$this->testtemplate = file_get_contents('Template/GenderGenBoth.test');
|
||||
|
||||
$this->count=0;
|
||||
|
||||
|
||||
$this->gender = 1;
|
||||
$this->make('boy');
|
||||
|
||||
|
||||
$this->gender = 2;
|
||||
$this->make('girl');
|
||||
|
||||
|
||||
$res=str_replace('{% tests %}', $this->tests, $this->maintemplate);
|
||||
file_put_contents('../Library/GenderDetectUABoth.php',$res);
|
||||
}
|
||||
|
||||
private function generateTest($sname, $fname)
|
||||
{
|
||||
$tpl=$this->testtemplate;
|
||||
$tpl=str_replace('{% id %}', $this->count, $tpl);
|
||||
$tpl=str_replace('{% name %}', $fname, $tpl);
|
||||
$tpl=str_replace('{% sname %}', $sname, $tpl);
|
||||
$tpl=str_replace('{% gender %}', $this->gender, $tpl);
|
||||
|
||||
$this->tests.=$tpl;
|
||||
$this->count++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
$p= new TestGenerator;
|
||||
$p->generate('Both');
|
||||
|
||||
|
||||
?>
|
87
Tests/TestGenerator/UAGenderDetector.generator.php.php
Normal file
87
Tests/TestGenerator/UAGenderDetector.generator.php.php
Normal file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
class TestGenerator
|
||||
{
|
||||
|
||||
public $maintemplate;
|
||||
public $testtemplate;
|
||||
public $resultArrB = array();
|
||||
public $resultArrG = array();
|
||||
private $gender;
|
||||
private $tests;
|
||||
private $count = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
//$this->resultArr[]=file('Names/boy_full_result.txt');
|
||||
//$this->resultArr[]=file('Names/girl_full_result.txt');
|
||||
}
|
||||
|
||||
public function generate($fname)
|
||||
{
|
||||
$this->maintemplate = file_get_contents('Template/NCLNameCaseUaTest.main');
|
||||
$this->testtemplate = file_get_contents('Template/GenderGen' . $fname . '.test');
|
||||
// $this->resultArrB=file('NamesAll/boy'.$fname.'.txt');
|
||||
// $this->resultArrG=file('NamesAll/girl'.$fname.'.txt');
|
||||
$this->count = 0;
|
||||
|
||||
|
||||
$fnewname = $fname;
|
||||
if ($fnewname == 'sirname')
|
||||
{
|
||||
$fnewname = 'second';
|
||||
}
|
||||
else
|
||||
{
|
||||
$fnewname = 'names';
|
||||
}
|
||||
|
||||
|
||||
$this->gender = 1;
|
||||
$this->dbTable = 'boy' . strtolower($fnewname);
|
||||
$this->resultArr = mysql_query("SELECT * FROM {$this->dbTable}");
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
while ($row = mysql_fetch_array($this->resultArr))
|
||||
{
|
||||
$this->generateTest(trim($row['name']));
|
||||
}
|
||||
|
||||
$this->dbTable = 'girl' . strtolower($fnewname);
|
||||
$this->gender = 2;
|
||||
$this->resultArr = mysql_query("SELECT * FROM {$this->dbTable}");
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
while ($row = mysql_fetch_array($this->resultArr))
|
||||
{
|
||||
$this->generateTest(trim($row['name']));
|
||||
}
|
||||
//}
|
||||
$res = str_replace('{% tests %}', $this->tests, $this->maintemplate);
|
||||
$res = str_replace('{% name %}', $fname, $res);
|
||||
file_put_contents('../Library/GenderDetectUA' . $fname . '.php', $res);
|
||||
}
|
||||
|
||||
private function generateTest($name)
|
||||
{
|
||||
$tpl = $this->testtemplate;
|
||||
$tpl = str_replace('{% id %}', $this->count, $tpl);
|
||||
$tpl = str_replace('{% name %}', $name, $tpl);
|
||||
$tpl = str_replace('{% gender %}', $this->gender, $tpl);
|
||||
|
||||
$this->tests.=$tpl;
|
||||
$this->count++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$p = new TestGenerator;
|
||||
$p->generate('name');
|
||||
$p = new TestGenerator;
|
||||
$p->generate('sirname');
|
||||
?>
|
96
Tests/TestGenerator/UAnameSplit.generator.php.php
Normal file
96
Tests/TestGenerator/UAnameSplit.generator.php.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
class TestGenerator
|
||||
{
|
||||
|
||||
public $maintemplate;
|
||||
public $testtemplate;
|
||||
public $resultArrB = array();
|
||||
public $resultArrG = array();
|
||||
private $gender;
|
||||
private $tests;
|
||||
private $count = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
}
|
||||
|
||||
private function getList($gender, $type)
|
||||
{
|
||||
$res = mysql_query("SELECT * FROM {$gender}{$type}");
|
||||
$resultArr = array();
|
||||
while($row = mysql_fetch_assoc($res))
|
||||
{
|
||||
$resultArr[] = $row['name'];
|
||||
}
|
||||
return $resultArr;
|
||||
}
|
||||
|
||||
public function generate($fname)
|
||||
{
|
||||
$this->maintemplate = file_get_contents('Template/NCLNameCaseUaTest.main');
|
||||
$this->testtemplate = file_get_contents('Template/NameSplit.test');
|
||||
|
||||
$this->count = 0;
|
||||
if ($fname == 'name')
|
||||
{
|
||||
$this->gender = 'N';
|
||||
$tableName = 'names';
|
||||
}
|
||||
elseif ($fname == 'sirname')
|
||||
{
|
||||
$this->gender = 'S';
|
||||
$tableName = 'second';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->gender = 'F';
|
||||
$tableName = 'father';
|
||||
}
|
||||
|
||||
$names = array_merge($this->getList('boy', $tableName), $this->getList('girl', $tableName));
|
||||
|
||||
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
foreach ($names as $id => $name)
|
||||
{
|
||||
$this->generateTest(trim($name));
|
||||
}
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
// foreach ($this->resultArrG as $id => $name)
|
||||
// {
|
||||
// $this->generateTest(trim($name));
|
||||
// }
|
||||
//}
|
||||
$res = str_replace('{% tests %}', $this->tests, $this->maintemplate);
|
||||
$res = str_replace('{% name %}', $fname, $res);
|
||||
file_put_contents('../Library/NameSplitUA' . $fname . '.php', $res);
|
||||
}
|
||||
|
||||
private function generateTest($name)
|
||||
{
|
||||
$tpl = $this->testtemplate;
|
||||
$tpl = str_replace('{% id %}', $this->count, $tpl);
|
||||
$tpl = str_replace('{% name %}', $name, $tpl);
|
||||
$tpl = str_replace('{% gender %}', $this->gender, $tpl);
|
||||
|
||||
$this->tests.=$tpl;
|
||||
$this->count++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$p = new TestGenerator;
|
||||
$p->generate('name');
|
||||
$p = new TestGenerator;
|
||||
$p->generate('sirname');
|
||||
$p = new TestGenerator;
|
||||
$p->generate('father');
|
||||
?>
|
79
Tests/TestGenerator/nameSplit.generator.php.php
Normal file
79
Tests/TestGenerator/nameSplit.generator.php.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
class TestGenerator
|
||||
{
|
||||
public $maintemplate;
|
||||
public $testtemplate;
|
||||
|
||||
public $resultArrB=array();
|
||||
public $resultArrG=array();
|
||||
|
||||
private $gender;
|
||||
|
||||
private $tests;
|
||||
private $count=0;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
//$this->resultArr[]=file('Names/boy_full_result.txt');
|
||||
//$this->resultArr[]=file('Names/girl_full_result.txt');
|
||||
}
|
||||
|
||||
public function generate($fname)
|
||||
{
|
||||
$this->maintemplate = file_get_contents('Template/NCLNameCaseRuTest.main');
|
||||
$this->testtemplate = file_get_contents('Template/NameSplit.test');
|
||||
$this->resultArrB=file('NamesAll/boy'.$fname.'.txt');
|
||||
$this->resultArrG=file('NamesAll/girl'.$fname.'.txt');
|
||||
$this->count=0;
|
||||
if ($fname=='name')
|
||||
$this->gender='N';
|
||||
elseif($fname=='sirname')
|
||||
$this->gender='S';
|
||||
else
|
||||
{
|
||||
$this->gender='F';
|
||||
}
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
foreach ($this->resultArrB as $id=>$name)
|
||||
{
|
||||
$this->generateTest(trim($name));
|
||||
}
|
||||
//foreach ($this->resultArr as $key=>$value)
|
||||
//{
|
||||
//$this->gender=$key+1;
|
||||
foreach ($this->resultArrG as $id=>$name)
|
||||
{
|
||||
$this->generateTest(trim($name));
|
||||
}
|
||||
//}
|
||||
$res=str_replace('{% tests %}', $this->tests, $this->maintemplate);
|
||||
$res=str_replace('{% name %}', $fname, $res);
|
||||
file_put_contents('../Library/NameSplit'.$fname.'.php',$res);
|
||||
}
|
||||
|
||||
private function generateTest($name)
|
||||
{
|
||||
$tpl=$this->testtemplate;
|
||||
$tpl=str_replace('{% id %}', $this->count, $tpl);
|
||||
$tpl=str_replace('{% name %}', $name, $tpl);
|
||||
$tpl=str_replace('{% gender %}', $this->gender, $tpl);
|
||||
|
||||
$this->tests.=$tpl;
|
||||
$this->count++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
$p= new TestGenerator;
|
||||
$p->generate('name');
|
||||
$p= new TestGenerator;
|
||||
$p->generate('sirname');
|
||||
$p= new TestGenerator;
|
||||
$p->generate('father');
|
||||
?>
|
5
Tests/TestGenerator/uagenerator/boyfather.txt
Normal file
5
Tests/TestGenerator/uagenerator/boyfather.txt
Normal file
@ -0,0 +1,5 @@
|
||||
Олександрович
|
||||
Миколайович
|
||||
Кузьмич
|
||||
Петрович
|
||||
Ілліч
|
513
Tests/TestGenerator/uagenerator/boyname.txt
Normal file
513
Tests/TestGenerator/uagenerator/boyname.txt
Normal file
@ -0,0 +1,513 @@
|
||||
Аарон
|
||||
Абакум
|
||||
Абрам
|
||||
Августин
|
||||
Авесалом
|
||||
Авксентій
|
||||
Аврелій
|
||||
Автоном
|
||||
Адам
|
||||
Адріян
|
||||
Адріан
|
||||
Азар
|
||||
Алевтин
|
||||
Альберт
|
||||
Амвросій
|
||||
Амнон
|
||||
Амос
|
||||
Анастас
|
||||
Анастасій
|
||||
Андрій
|
||||
Антоній
|
||||
Антон
|
||||
Анісій
|
||||
Аркадій
|
||||
Арсен
|
||||
Арсеній
|
||||
Артем
|
||||
Архип
|
||||
Артем
|
||||
Атанас
|
||||
Аскольд
|
||||
Бажан
|
||||
Біловид
|
||||
Білогост
|
||||
Біломир
|
||||
Білослав
|
||||
Білотур
|
||||
Білян
|
||||
Благовид
|
||||
Благовіст
|
||||
Благодар
|
||||
Благодат
|
||||
Благомир
|
||||
Благослав
|
||||
Богдан
|
||||
Боговір
|
||||
Боговіст
|
||||
Богодар
|
||||
Боголад
|
||||
Боголіп
|
||||
Боголюб
|
||||
Богород
|
||||
Богосвят
|
||||
Богумил
|
||||
Богумир
|
||||
Богуслав
|
||||
Бож
|
||||
Божан
|
||||
Божедар
|
||||
Божейко
|
||||
Божемир
|
||||
Божен
|
||||
Божко
|
||||
Болеслав
|
||||
Боримир
|
||||
Боримисл
|
||||
Борис
|
||||
Борислав
|
||||
Боян
|
||||
Братан
|
||||
Бративой
|
||||
Братимир
|
||||
Братислав
|
||||
Братко
|
||||
Братомил
|
||||
Братослав
|
||||
Брячислав
|
||||
Боронислав
|
||||
Будивид
|
||||
Будивой
|
||||
Будимил
|
||||
Будимир
|
||||
Будислав
|
||||
Буймир
|
||||
Буйтур
|
||||
Буревій
|
||||
Буревіст
|
||||
Василь
|
||||
Ведан
|
||||
Велемир
|
||||
Велемудр
|
||||
Велет
|
||||
Величар
|
||||
Величко
|
||||
Вербан
|
||||
Вернидуб
|
||||
Вернислав
|
||||
Веселан
|
||||
Витомир
|
||||
Вишата
|
||||
Вишезор
|
||||
Вишеслав
|
||||
Вір
|
||||
Віродан
|
||||
Віродар
|
||||
Вірослав
|
||||
Віст
|
||||
Вістан
|
||||
Вітан
|
||||
Вітомир
|
||||
Вітрян
|
||||
Влад
|
||||
Владислав
|
||||
Власт
|
||||
Вогнедар
|
||||
Вогнян
|
||||
Водограй
|
||||
Водотрав
|
||||
Воїслав
|
||||
Волелюб
|
||||
Володар
|
||||
Володимир
|
||||
Володислав
|
||||
Воля
|
||||
Воротислав
|
||||
Вратан
|
||||
Вратислав
|
||||
Всевлад
|
||||
Всеволод
|
||||
Вселюб
|
||||
Вселюд
|
||||
Всеслав
|
||||
В'ячеслав
|
||||
Гарнослав
|
||||
Гатусил
|
||||
Гатуслав
|
||||
Гервасій
|
||||
Гладко
|
||||
Гліб
|
||||
Годомир
|
||||
Голубко
|
||||
Горун
|
||||
Гордій
|
||||
Гордислав
|
||||
Гордогост
|
||||
Гордодум
|
||||
Гордомисл
|
||||
Гордослав
|
||||
Гордята
|
||||
Горигляд
|
||||
Горимир
|
||||
Горимисл
|
||||
Горисвіт
|
||||
Горислав
|
||||
Горицвіт
|
||||
Гостомисл
|
||||
Гострозір
|
||||
Гостята
|
||||
Градимир
|
||||
Градислав
|
||||
Гранислав
|
||||
Грива
|
||||
Григорій
|
||||
Гремислав
|
||||
Грозан
|
||||
Громовик
|
||||
Гуляйвітер
|
||||
Густомисл
|
||||
Далемил
|
||||
Далемир
|
||||
Далібор
|
||||
Дан
|
||||
Данило
|
||||
Данко
|
||||
Дантур
|
||||
Дар
|
||||
Дарій
|
||||
Дарибог
|
||||
Даромир
|
||||
Держикрай
|
||||
Держислав
|
||||
Дибач
|
||||
Дивозір
|
||||
Дій
|
||||
Добрибій
|
||||
Добривод
|
||||
Добрик
|
||||
Добрило
|
||||
Добриня
|
||||
Добрисвіт
|
||||
Добровіст
|
||||
Доброгост
|
||||
Добродум
|
||||
Добролик
|
||||
Добролюб
|
||||
Добромил
|
||||
Добромир
|
||||
Добромисл
|
||||
Доброслав
|
||||
Доморад
|
||||
Домослав
|
||||
Дорогобуг
|
||||
Дорогомир
|
||||
Дорогомисл
|
||||
Дорогосил
|
||||
Дорогочин
|
||||
Драган
|
||||
Дружелюб
|
||||
Жадан
|
||||
Ждан
|
||||
Живорід
|
||||
Живосил
|
||||
Живослав
|
||||
Житомир
|
||||
Життєлюб
|
||||
Збоїслав
|
||||
Зборислав
|
||||
Звенигор
|
||||
Звенимир
|
||||
Звенислав
|
||||
Здоровега
|
||||
Земислав
|
||||
Зеновій
|
||||
Зіновій
|
||||
Зиновій
|
||||
Злат
|
||||
Златомир
|
||||
Златоус
|
||||
Златодан
|
||||
Злотан
|
||||
Злотодан
|
||||
Зорегляд
|
||||
Зоремир
|
||||
Зорепад
|
||||
Зореслав
|
||||
Зорян
|
||||
Ізяслав
|
||||
Ігор
|
||||
Іван
|
||||
Квітан
|
||||
Києслав
|
||||
Кий
|
||||
Кирило
|
||||
Киян
|
||||
Княжослав
|
||||
Корній
|
||||
Колодар
|
||||
Колодій
|
||||
Косак
|
||||
Красун
|
||||
Крилач
|
||||
Куйбіда
|
||||
Курило
|
||||
Лад
|
||||
Ладимир
|
||||
Ладислав
|
||||
Ладолюб
|
||||
Ладомир
|
||||
Лев
|
||||
Левко
|
||||
Листвич
|
||||
Ліпослав
|
||||
Лоліт
|
||||
Лук'ян
|
||||
Любим
|
||||
Любовир
|
||||
Любодар
|
||||
Любозар
|
||||
Любомил
|
||||
Любомир
|
||||
Любомисл
|
||||
Любомудр
|
||||
Любослав
|
||||
Людомил
|
||||
Людомир
|
||||
Людислав
|
||||
Лютобор
|
||||
Лютомисл
|
||||
Магадар
|
||||
Магамир
|
||||
Магаслав
|
||||
Маркіян
|
||||
Май
|
||||
Мал
|
||||
Малик
|
||||
Маломир
|
||||
Марко
|
||||
Мар'ян
|
||||
Медомир
|
||||
Межамир
|
||||
Мечислав
|
||||
Мизамир
|
||||
Милан
|
||||
Милован
|
||||
Милодар
|
||||
Милодух
|
||||
Милослав
|
||||
Мир
|
||||
Миробог
|
||||
Мирогост
|
||||
Миролюб
|
||||
Мирослав
|
||||
Мовчан
|
||||
Молибог
|
||||
Мстибог
|
||||
Мстивой
|
||||
Мстислав
|
||||
Мудролюб
|
||||
Нагнибіда
|
||||
Надій
|
||||
Найден
|
||||
Наслав
|
||||
Недан
|
||||
Немир
|
||||
Непобор
|
||||
Нігослав
|
||||
Назар
|
||||
Одинець
|
||||
Олег
|
||||
Олександр
|
||||
Олексій
|
||||
Олесь
|
||||
Олелько
|
||||
Орел
|
||||
Орест
|
||||
Орь
|
||||
Оримир
|
||||
Осмомисл
|
||||
Острозор
|
||||
Остромир
|
||||
Остромов
|
||||
Охрім
|
||||
Павло
|
||||
Первушко
|
||||
Перелюб
|
||||
Перемил
|
||||
Перемисл
|
||||
Пересвіт
|
||||
Переяслав
|
||||
Першик
|
||||
Подолян
|
||||
Позвізд
|
||||
Полель
|
||||
Полян
|
||||
Пребислав
|
||||
Предислав
|
||||
Пугач
|
||||
Путило
|
||||
Путята
|
||||
Рава
|
||||
Рад
|
||||
Радечко
|
||||
Радивой
|
||||
Радило
|
||||
Радим
|
||||
Радимир
|
||||
Радислав
|
||||
Радко
|
||||
Радован
|
||||
Радогост
|
||||
Радомир
|
||||
Радомисл
|
||||
Радослав
|
||||
Ратибор
|
||||
Ратимир
|
||||
Ратислав
|
||||
Ревун
|
||||
Рід
|
||||
Рогволод
|
||||
Родан
|
||||
Родослав
|
||||
Рожден
|
||||
Розум
|
||||
Роксолан
|
||||
Роман
|
||||
Ростислав
|
||||
Ростичар
|
||||
Ростун
|
||||
Рудан
|
||||
Рус
|
||||
Руслан
|
||||
Русудан
|
||||
Сармат
|
||||
Сварг
|
||||
Сват
|
||||
Світ
|
||||
Світлан
|
||||
Світлогор
|
||||
Світогор
|
||||
Світовид
|
||||
Світодар
|
||||
Світозар
|
||||
Світокол
|
||||
Світолик
|
||||
Світолюб
|
||||
Світомир
|
||||
Світослав
|
||||
Світояр
|
||||
Свободан
|
||||
Святовид
|
||||
Святогор
|
||||
Святолюб
|
||||
Святополк
|
||||
Святослав
|
||||
Семибор
|
||||
Семирад
|
||||
Сердитко
|
||||
Сила
|
||||
Силолюб
|
||||
Силослав
|
||||
Синьоок
|
||||
Скол
|
||||
Слава
|
||||
Славобор
|
||||
Славолюб
|
||||
Славомир
|
||||
Славута
|
||||
Снага
|
||||
Сніжан
|
||||
Сновид
|
||||
Снозір
|
||||
Собібор
|
||||
Собімир
|
||||
Собіслав
|
||||
Сокіл
|
||||
Соловей
|
||||
Сологуб
|
||||
Сонцевид
|
||||
Сонцедар
|
||||
Сонцелик
|
||||
Спас
|
||||
Станимир
|
||||
Станіслав
|
||||
Стародум
|
||||
Степан
|
||||
Стефаній
|
||||
Стожар
|
||||
Стоймир
|
||||
Стоян
|
||||
Судивой
|
||||
Судимир
|
||||
Судислав
|
||||
Сурма
|
||||
Тарас
|
||||
Татолюб
|
||||
Татомир
|
||||
Твердигост
|
||||
Твердислав
|
||||
Творилад
|
||||
Творимир
|
||||
Творислав
|
||||
Тихомир
|
||||
Тихон
|
||||
Толигнів
|
||||
Толислав
|
||||
Тригост
|
||||
Троян
|
||||
Триріг
|
||||
Тур
|
||||
Турбог
|
||||
Турбрід
|
||||
Уличан
|
||||
Ус
|
||||
Хвала
|
||||
Хвалибог
|
||||
Хвалимир
|
||||
Ходота
|
||||
Хорив
|
||||
Хорошко
|
||||
Хорошун
|
||||
Хотибор
|
||||
Хотимир
|
||||
Хотян
|
||||
Хранимир
|
||||
Худан
|
||||
Царко
|
||||
Цвітан
|
||||
Чара
|
||||
Чернин
|
||||
Чеслав
|
||||
Чесмил
|
||||
Честислав
|
||||
Чорновіл
|
||||
Чорнота
|
||||
Чорнотур
|
||||
Щастибог
|
||||
Щастислав
|
||||
Щедрогост
|
||||
Щек
|
||||
Юрій
|
||||
Юлій
|
||||
Ява
|
||||
Явір
|
||||
Яволод
|
||||
Яр
|
||||
Ярема
|
||||
Ярило
|
||||
Яровид
|
||||
Яровит
|
||||
Яромил
|
||||
Яромир
|
||||
Яромисл
|
||||
Ярополк
|
||||
Яросвіт
|
||||
Ярослав
|
||||
Ярош
|
||||
Яртур
|
||||
Ярчик
|
||||
Ясен
|
||||
Ясновид
|
||||
Ясногор
|
||||
Яснозір
|
||||
Яснолик
|
830
Tests/TestGenerator/uagenerator/boysecond.txt
Normal file
830
Tests/TestGenerator/uagenerator/boysecond.txt
Normal file
@ -0,0 +1,830 @@
|
||||
Єрмоленко
|
||||
Єсипенко
|
||||
Іванів
|
||||
Іваненко
|
||||
Іванченко
|
||||
Іванчук
|
||||
Іванюк
|
||||
Івахненко
|
||||
Івашко
|
||||
Іващенко
|
||||
Івченко
|
||||
Іллєнко
|
||||
Іловайські
|
||||
Ільницький
|
||||
Ільченко
|
||||
Іщенко
|
||||
Абраменко
|
||||
Абрамчук
|
||||
Адамчук
|
||||
Акуленко
|
||||
Алексєєнко
|
||||
Алексійчук
|
||||
Андрієнко
|
||||
Андрійчук
|
||||
Андрейко
|
||||
Андрусів
|
||||
Андрушків
|
||||
Андрущенко
|
||||
Анищенко
|
||||
Антонюк
|
||||
Арсенич
|
||||
Артюх
|
||||
Атаманчук
|
||||
Біла
|
||||
Білас
|
||||
Білий
|
||||
Білодід
|
||||
Білоус
|
||||
Баб'юк
|
||||
Бабійчук
|
||||
Бабак
|
||||
Бабчук
|
||||
Багмут
|
||||
Багрій
|
||||
Бадлак
|
||||
Бажан
|
||||
Балтача
|
||||
Бандура
|
||||
Баран
|
||||
Баранець
|
||||
Барановський
|
||||
Баранюк
|
||||
Батюк
|
||||
Бачинський
|
||||
Бебешко
|
||||
Бевзенко
|
||||
Безбородьки
|
||||
Березовчук
|
||||
Блонські
|
||||
Божик
|
||||
Божко
|
||||
Бойко
|
||||
Бойцун
|
||||
Бойчак
|
||||
Бойчишин
|
||||
Бойчук
|
||||
Бондар
|
||||
Бондаренко
|
||||
Бондарчук
|
||||
Борисенко
|
||||
Борисикевич
|
||||
Братусь
|
||||
Букатевич
|
||||
Бурбан
|
||||
Бурячок
|
||||
Бутейко
|
||||
Бутенко
|
||||
Бутник
|
||||
Бутовичі
|
||||
Бухало
|
||||
Візерські
|
||||
Василашко
|
||||
Василенко
|
||||
Васильченко
|
||||
Васильчук
|
||||
Васкул
|
||||
Васьковичі
|
||||
Вахній
|
||||
Ващенко-Захарченко
|
||||
Вдовиченко
|
||||
Величко
|
||||
Величковські
|
||||
Вертипорох
|
||||
Верхола
|
||||
Винокур
|
||||
Висоцькі
|
||||
Вишневецькі
|
||||
Влох
|
||||
Воблий
|
||||
Вовк
|
||||
Возняк
|
||||
Войнаровські
|
||||
Волох
|
||||
Волошин
|
||||
Волощук
|
||||
Вороновський
|
||||
Гаврилів
|
||||
Гавриленко
|
||||
Гаврилюк
|
||||
Галенковські
|
||||
Гальченко
|
||||
Гамалія
|
||||
Ганицький
|
||||
Гарань
|
||||
Гармаш
|
||||
Гасай
|
||||
Гасюк
|
||||
Герасименко
|
||||
Геращенко
|
||||
Герцик
|
||||
Герцики
|
||||
Гладченко
|
||||
Глоба
|
||||
Гнідичі
|
||||
Гнатюк
|
||||
Гоголі
|
||||
Гоголь
|
||||
Годунок
|
||||
Головатий
|
||||
Головко
|
||||
Голуб
|
||||
Голубничий
|
||||
Гольшанські
|
||||
Гонта
|
||||
Гончар
|
||||
Гончаренко
|
||||
Гончаров
|
||||
Горбаль
|
||||
Гордієнко
|
||||
Гординські
|
||||
Гошовські
|
||||
Гошовський
|
||||
Грінченко
|
||||
Грабович
|
||||
Грабовський
|
||||
Григоренко
|
||||
Григорович
|
||||
Григорович-Барський
|
||||
Григорчук
|
||||
Грицак
|
||||
Гриценко
|
||||
Гришко
|
||||
Громики
|
||||
Гудзій
|
||||
Гудзь
|
||||
Гуменюк
|
||||
Гунько
|
||||
Діденко
|
||||
Даниленко
|
||||
Даньків
|
||||
Данькевич
|
||||
Дараган
|
||||
Дашкевич
|
||||
Дем'яненко
|
||||
Дем'янчук
|
||||
Денисенко
|
||||
Джус
|
||||
Дзюба
|
||||
Дикань
|
||||
Дмитерко
|
||||
Довженко
|
||||
Домонтовичі
|
||||
Дорош
|
||||
Дорошенко
|
||||
Доценко
|
||||
Дочинець
|
||||
Драгоманови
|
||||
Дудко
|
||||
Дунін-Борковські
|
||||
Дяків
|
||||
Дяченко
|
||||
Ейбоженко
|
||||
Жайворон
|
||||
Жаліло
|
||||
Ждановичі
|
||||
Жежерін
|
||||
Желєзняк
|
||||
Железняк
|
||||
Жилко
|
||||
Жирко
|
||||
Жук
|
||||
Жупанський
|
||||
Жураківські
|
||||
Зінов'єв
|
||||
Заєць
|
||||
Забашта
|
||||
Заболотний
|
||||
Завальнюк
|
||||
Закревські
|
||||
Закусило
|
||||
Залізняк
|
||||
Заруба
|
||||
Засядько
|
||||
Захаренко
|
||||
Захарчук
|
||||
Заяць
|
||||
Заячківський
|
||||
Збаразькі
|
||||
Зленко
|
||||
Значко-Яворські
|
||||
Золотаренко
|
||||
Кабачок
|
||||
Каганець
|
||||
Калашники
|
||||
Калинович
|
||||
Кандиби
|
||||
Карашевичі
|
||||
Кармалюк
|
||||
Карпенко
|
||||
Кириленко
|
||||
Кисилі
|
||||
Китастий
|
||||
Кицай
|
||||
Клименко
|
||||
Климчук
|
||||
Кмета
|
||||
Книш
|
||||
Ковалів
|
||||
Коваленко
|
||||
Коваль
|
||||
Ковальчик
|
||||
Ковальчук
|
||||
Кованько
|
||||
Ковтун
|
||||
Козаченко
|
||||
Козачинський
|
||||
Козачок
|
||||
Козубенко
|
||||
Колесник
|
||||
Колодій
|
||||
Колодний
|
||||
Коломієць
|
||||
Комар
|
||||
Кондратюк
|
||||
Кониські
|
||||
Корецький
|
||||
Корж
|
||||
Корнійчук
|
||||
Коробка
|
||||
Королюк
|
||||
Короткевич
|
||||
Корпанюк
|
||||
Корчак
|
||||
Корчинський
|
||||
Косенко
|
||||
Костенко
|
||||
Коструба
|
||||
Костюк
|
||||
Котляр
|
||||
Котляревський
|
||||
Кравців
|
||||
Кравченко
|
||||
Кравчук
|
||||
Красовський
|
||||
Криворучко
|
||||
Крикуненко
|
||||
Крупські
|
||||
Кузьмінський
|
||||
Кулиняк
|
||||
Кульчицький
|
||||
Купчинський
|
||||
Курцевичі
|
||||
Кухаренко
|
||||
Куц
|
||||
Куценко
|
||||
Кучер
|
||||
Кучеренко
|
||||
Кушнір
|
||||
Лаба
|
||||
Лаврін
|
||||
Лаврик
|
||||
Лавриненко
|
||||
Лазаревські
|
||||
Лазарчук
|
||||
Лазорко
|
||||
Лашкевичі
|
||||
Левицький
|
||||
Левковські
|
||||
Левченко
|
||||
Леонтовичі
|
||||
Лесів
|
||||
Лесевичі
|
||||
Лисенко
|
||||
Литвин
|
||||
Литвиненко
|
||||
Литвинов
|
||||
Литовченко
|
||||
Лозина-Лозинський
|
||||
Лопатинський
|
||||
Лук'яненко
|
||||
Лукашевичі
|
||||
Лукомський
|
||||
Луценко
|
||||
Людкевич
|
||||
Ляшенко
|
||||
Ляшенко
|
||||
Мірошниченко
|
||||
Мірчук
|
||||
Міщенко
|
||||
Мазаракі
|
||||
Мазепи
|
||||
Мазур
|
||||
Макаренко
|
||||
Максименко
|
||||
Маланчук
|
||||
Малаховські
|
||||
Малишко
|
||||
Малкович
|
||||
Мамчур
|
||||
Маркевич
|
||||
Маркевичі
|
||||
Мартиненко
|
||||
Мартоси
|
||||
Марунчак
|
||||
Марценюк
|
||||
Марченко
|
||||
Марчук
|
||||
Масоха
|
||||
Матвієнко
|
||||
Матюшенко
|
||||
Маценко
|
||||
Мацюк
|
||||
Мельник
|
||||
Мельниченко
|
||||
Мельничук
|
||||
Микитенко
|
||||
Микитин
|
||||
Милорадовичі
|
||||
Мирон
|
||||
Михайленко
|
||||
Михайличенко
|
||||
Михайлюк
|
||||
Мицик
|
||||
Мовчан
|
||||
Могили
|
||||
Модзалевські
|
||||
Моргун
|
||||
Мороз
|
||||
Мосендзи
|
||||
Москаленко
|
||||
Москаль
|
||||
Мошак
|
||||
Муратова
|
||||
Мусієнко
|
||||
Назаренко
|
||||
Наливайко
|
||||
Нащинські
|
||||
Негребецький
|
||||
Непорожній
|
||||
Нестеренко
|
||||
Нечай
|
||||
Нечипоренко
|
||||
Оберемченко
|
||||
Овчаренко
|
||||
Ограновичі
|
||||
Олійник
|
||||
Олексієнко
|
||||
Омельченко
|
||||
Омельчук
|
||||
Онищенко
|
||||
Онопенко
|
||||
Опанасенко
|
||||
Орлики
|
||||
Осадчук
|
||||
Осика
|
||||
Остапенко
|
||||
Остроградський
|
||||
Острозькі
|
||||
Півторак
|
||||
Підопригора
|
||||
Павленко
|
||||
Павлюк
|
||||
Павлюченко
|
||||
Пазенко
|
||||
Паламарчук
|
||||
Панас
|
||||
Панасюк
|
||||
Паньківський
|
||||
Пархоменко
|
||||
Пасічник
|
||||
Пасько
|
||||
Пашко
|
||||
Пащенко
|
||||
Перебийніс
|
||||
Петренко
|
||||
Пилипенко
|
||||
Пилипишин
|
||||
Пилипчук
|
||||
Писаренко
|
||||
Писарчук
|
||||
Плющ
|
||||
Покотило
|
||||
Поліщук
|
||||
Польовий
|
||||
Полянський
|
||||
Пономаренко
|
||||
Пономарьов
|
||||
Попадюк
|
||||
Попенко
|
||||
Потапенко
|
||||
Потебенько
|
||||
Прийма
|
||||
Приймак
|
||||
Присяжнюк
|
||||
Приходько
|
||||
Продан
|
||||
Проценко
|
||||
Проць
|
||||
Процюк
|
||||
Пушкар
|
||||
Різенки
|
||||
Різун
|
||||
Радченко
|
||||
Рибальченко
|
||||
Римар
|
||||
Римар
|
||||
Родзянки
|
||||
Рожок
|
||||
Розумовські
|
||||
Романенко
|
||||
Романишин
|
||||
Романчук
|
||||
Романюк
|
||||
Рошкевич
|
||||
Рубан
|
||||
Рубани
|
||||
Руденко
|
||||
Рябовіл
|
||||
Сімашкевич
|
||||
Саєнко
|
||||
Савенко
|
||||
Савицька
|
||||
Савка
|
||||
Савченко
|
||||
Савчук
|
||||
Сак
|
||||
Самборський
|
||||
Самойлович
|
||||
Самусь
|
||||
Свида
|
||||
Семашко
|
||||
Семененко
|
||||
Семенець
|
||||
Семенина
|
||||
Семенченко
|
||||
Семенюк
|
||||
Семеренко
|
||||
Сидоренко
|
||||
Силенко
|
||||
Симоненко
|
||||
Симчич
|
||||
Скаржинські
|
||||
Скоропадські
|
||||
Скрипник
|
||||
Скуратівський
|
||||
Слободян
|
||||
Слободянюк
|
||||
Смик
|
||||
Смогоржевський
|
||||
Собчук
|
||||
Сопронюк
|
||||
Сорока
|
||||
Сохань
|
||||
Стадник
|
||||
Стельмах
|
||||
Степаненко
|
||||
Степура
|
||||
Стеценко
|
||||
Стецюк
|
||||
Стороженки
|
||||
Струтинський
|
||||
Сулима
|
||||
Сулими
|
||||
Супруненко
|
||||
Танські
|
||||
Тараненко
|
||||
Тарновські
|
||||
Татаренко
|
||||
Теплицький
|
||||
Терещенко
|
||||
Терещук
|
||||
Тесленко
|
||||
Тимошенко
|
||||
Тимощук
|
||||
Тимчак
|
||||
Титаренко
|
||||
Тишкевичі
|
||||
Тищенко
|
||||
Ткач
|
||||
Ткаченко
|
||||
Ткачук
|
||||
Тобілевичі
|
||||
Толочко
|
||||
Томенко
|
||||
Трощинські
|
||||
Тулуб
|
||||
Удовенко
|
||||
Удовиченко
|
||||
Усенко
|
||||
Філоненко
|
||||
Феденко
|
||||
Федоренко
|
||||
Федорук
|
||||
Фещенко
|
||||
Фоменко
|
||||
Ханенки
|
||||
Ханенко
|
||||
Харитоненки
|
||||
Харчук
|
||||
Хміляр
|
||||
Хмара
|
||||
Хмельницькі
|
||||
Холодовський
|
||||
Хоменко
|
||||
Царук
|
||||
Цибуленко
|
||||
Цюпа
|
||||
Чабаненко
|
||||
Чанов
|
||||
Чередниченко
|
||||
Чернявський
|
||||
Чорний
|
||||
Чорний
|
||||
Чорновіл
|
||||
Чуйкевич
|
||||
Чумак
|
||||
Чумаченко
|
||||
Шахрай
|
||||
Шевченко
|
||||
Шевчук
|
||||
Шелест
|
||||
Шептицькі
|
||||
Шинкарук
|
||||
Шкрібляк
|
||||
Шнайдер
|
||||
Шовкопляс
|
||||
Шульга
|
||||
Шухевич
|
||||
Щерба
|
||||
Щербак
|
||||
Щербань
|
||||
Юрженко
|
||||
Юрченко
|
||||
Юрчишин
|
||||
Юхименко
|
||||
Ющенко
|
||||
Яковенко
|
||||
Яковина
|
||||
Янко
|
||||
Ярема
|
||||
Яременко
|
||||
Яремко
|
||||
Яремчук
|
||||
Ярмоленко
|
||||
Ярмолюк
|
||||
Ярошенко
|
||||
Яценко
|
||||
Ященко
|
||||
Ґалаґан
|
||||
Євсєєв
|
||||
Єгоров
|
||||
Єлізаров
|
||||
Єрмилов
|
||||
Єрофєєв
|
||||
Єршов
|
||||
Єфімов
|
||||
Єфремов
|
||||
Іванов
|
||||
Ігнатов
|
||||
Іллюшин
|
||||
Ільїн
|
||||
Аєдоницький
|
||||
Абатуров
|
||||
Абдулов
|
||||
Абрамов
|
||||
Авілов
|
||||
Авдєєнко
|
||||
Аврамов
|
||||
Алексєєв
|
||||
Александров
|
||||
Альошин
|
||||
Анісімов
|
||||
Анісов
|
||||
Ананьєв
|
||||
Андріанов
|
||||
Андріяшев
|
||||
Андреєв
|
||||
Антипов
|
||||
Антонов
|
||||
Анциферов
|
||||
Апухтін
|
||||
Арбузов
|
||||
Аржанов
|
||||
Артем'єв
|
||||
Архипов
|
||||
Арцибушев
|
||||
Астраханцев
|
||||
Афіногенов
|
||||
Афанасьєв
|
||||
Бєлов
|
||||
Бєлоглазов
|
||||
Бєлоусов
|
||||
Бєляєв
|
||||
Бібиков
|
||||
Бажанов
|
||||
Баранов
|
||||
Барановський
|
||||
Баришніков
|
||||
Барсов
|
||||
Батюшков
|
||||
Биков
|
||||
Блохін
|
||||
Бобров
|
||||
Богданов
|
||||
Богомазов
|
||||
Бойков
|
||||
Большаков
|
||||
Борисов
|
||||
Бочков
|
||||
Бризгалов
|
||||
Брусилов
|
||||
Бутурлін
|
||||
Бутусов
|
||||
Варламов
|
||||
Васильєв
|
||||
Виноградов
|
||||
Власов
|
||||
Внуков
|
||||
Волков
|
||||
Воробей
|
||||
Воробйов
|
||||
Воронін
|
||||
Воронцов
|
||||
Ворошилов
|
||||
Гаврилов
|
||||
Герасимов
|
||||
Гончаров
|
||||
Горбунов
|
||||
Горчаков
|
||||
Горшков
|
||||
Григор'єв
|
||||
Громов
|
||||
Гусєв
|
||||
Давидов
|
||||
Данилов
|
||||
Дараган
|
||||
Дементьєв
|
||||
Денисов
|
||||
Дмитрієв
|
||||
Добролюбов
|
||||
Донськой
|
||||
Дорофєєв
|
||||
Дубров
|
||||
Железняков
|
||||
Жердєв
|
||||
Жуков
|
||||
Журавльов
|
||||
Зінов'єв
|
||||
Заваров
|
||||
Загаров
|
||||
Зайцев
|
||||
Захаров
|
||||
Звєрєв
|
||||
Зеров
|
||||
Золотухін
|
||||
Зубов
|
||||
Казаков
|
||||
Калінін
|
||||
Калашников
|
||||
Карпов
|
||||
Каштанов
|
||||
Кисельов
|
||||
Ковальов
|
||||
Кожевников
|
||||
Козлов
|
||||
Колесников
|
||||
Кольцов
|
||||
Комаров
|
||||
Коновалов
|
||||
Конюхов
|
||||
Копилов
|
||||
Кормильцев
|
||||
Коробов
|
||||
Коровкін
|
||||
Корольов
|
||||
Котов
|
||||
Краснов
|
||||
Крилов
|
||||
Кримов
|
||||
Крюков
|
||||
Кудряшов
|
||||
Кузнецов
|
||||
Кузьмін
|
||||
Кулаков
|
||||
Куликов
|
||||
Курков
|
||||
Курочкін
|
||||
Лєсков
|
||||
Лідов
|
||||
Ладигін
|
||||
Лазарєв
|
||||
Лебедєв
|
||||
Левицький
|
||||
Лихоносов
|
||||
Лозина-Лозинський
|
||||
Лосєв
|
||||
Львов
|
||||
Любимов
|
||||
Мілютін
|
||||
Макаров
|
||||
Максимов
|
||||
Малаков
|
||||
Мамонов
|
||||
Манасеїн
|
||||
Марков
|
||||
Мартенс
|
||||
Мартинов
|
||||
Масленніков
|
||||
Маслов
|
||||
Матвєєв
|
||||
Медведєв
|
||||
Мельников
|
||||
Миронов
|
||||
Михайлов
|
||||
Моїсєєв
|
||||
Моргунов
|
||||
Морков
|
||||
Морозов
|
||||
Мухін
|
||||
Нікітін
|
||||
Ніколаєв
|
||||
Нікулін
|
||||
Набоков
|
||||
Некрасов
|
||||
Новиков
|
||||
Орлов
|
||||
Осипов
|
||||
Остроградський
|
||||
Павлов
|
||||
Павлушков
|
||||
Панов
|
||||
Петров
|
||||
Пильчиков
|
||||
Платонов
|
||||
Плеханов
|
||||
Польовий
|
||||
Поляков
|
||||
Пономарьов
|
||||
Попов
|
||||
Поярков
|
||||
Пригунов
|
||||
Прошкін
|
||||
Решетников
|
||||
Рожков
|
||||
Романов
|
||||
Рябов
|
||||
Саблін
|
||||
Савін
|
||||
Сазонов
|
||||
Сальников
|
||||
Самойлов
|
||||
Самсонов
|
||||
Сбітнєв
|
||||
Свиридов
|
||||
Селезньов
|
||||
Семенов
|
||||
Сербін
|
||||
Сергєєв
|
||||
Сибіряков
|
||||
Сидоров
|
||||
Симонов
|
||||
Синельников
|
||||
Скобелев
|
||||
Скоблін
|
||||
Смирнов
|
||||
Снєгірьов
|
||||
Соболєв
|
||||
Соколов
|
||||
Солнцев
|
||||
Соловйов
|
||||
Сомов
|
||||
Сорокін
|
||||
Стєклов
|
||||
Старков
|
||||
Степанов
|
||||
Табаков
|
||||
Тарасов
|
||||
Терентьєв
|
||||
Тимофєєв
|
||||
Титов
|
||||
Тихомиров
|
||||
Тихонов
|
||||
Тюленєв
|
||||
Уваров
|
||||
Усов
|
||||
Устинов
|
||||
Філіппов
|
||||
Філатов
|
||||
Федоров
|
||||
Фомін
|
||||
Фролов
|
||||
Хілков
|
||||
Хвостов
|
||||
Худяков
|
||||
Цвєтков
|
||||
Чанов
|
||||
Чевкін
|
||||
Черенков
|
||||
Черепков
|
||||
Чулков
|
||||
Шевельов
|
||||
Шеліхов
|
||||
Шинін
|
||||
Ширяєв
|
||||
Шишов
|
||||
Шулаков
|
||||
Щапов
|
||||
Щасливий
|
||||
Яковлєв
|
||||
Яшин
|
25
Tests/TestGenerator/uagenerator/girlFatherDB.php
Normal file
25
Tests/TestGenerator/uagenerator/girlFatherDB.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
$type = 'girl';
|
||||
$val = 'father';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
if(implode('#', $nc->qFatherName($row['name'], null, 2))!=$row['nameCase'])
|
||||
{
|
||||
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
|
||||
$t.= "<font style='font-size:12px;'>".
|
||||
implode('<br>', $nc->qFatherName($row['name'], null, 2))
|
||||
."</font><br>";
|
||||
}
|
||||
|
||||
}
|
||||
echo $t;
|
||||
?>
|
25
Tests/TestGenerator/uagenerator/girlSecondDB.php
Normal file
25
Tests/TestGenerator/uagenerator/girlSecondDB.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
$type = 'girl';
|
||||
$val = 'second';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
if(implode('#', $nc->qSecondName($row['name'], null, 2))!=$row['nameCase'])
|
||||
{
|
||||
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
|
||||
$t.= "<font style='font-size:12px;'>".
|
||||
implode('<br>', $nc->qSecondName($row['name'], null, 2))
|
||||
."</font><br>";
|
||||
}
|
||||
|
||||
}
|
||||
echo $t;
|
||||
?>
|
3
Tests/TestGenerator/uagenerator/girlfather.txt
Normal file
3
Tests/TestGenerator/uagenerator/girlfather.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Василівна
|
||||
Антонівна
|
||||
Яківна
|
329
Tests/TestGenerator/uagenerator/girlname.txt
Normal file
329
Tests/TestGenerator/uagenerator/girlname.txt
Normal file
@ -0,0 +1,329 @@
|
||||
Августа
|
||||
Аврелія
|
||||
Аврора
|
||||
Агнія
|
||||
Агрипина
|
||||
Ада
|
||||
Аделаїда
|
||||
Адріана
|
||||
Аза
|
||||
Азалія
|
||||
Аліна
|
||||
Аліса
|
||||
Алла
|
||||
Альбертина
|
||||
Альбіна
|
||||
Альвіна
|
||||
Анастасія
|
||||
Ангеліна
|
||||
Анжела
|
||||
Антоніна
|
||||
Анфіса
|
||||
Аріадна
|
||||
Арсена
|
||||
Ася
|
||||
Афіна
|
||||
Афродіта
|
||||
Бажана
|
||||
Берегиня
|
||||
Біловида
|
||||
Біломира
|
||||
Білослава
|
||||
Біляна
|
||||
Благиня
|
||||
Благовида
|
||||
Благовіра
|
||||
Благовіста
|
||||
Благослава
|
||||
Богдана
|
||||
Боговіра
|
||||
Боговіста
|
||||
Богодара
|
||||
Боголіпа
|
||||
Боголюба
|
||||
Богосвята
|
||||
Богумила
|
||||
Богумира
|
||||
Богуслава
|
||||
Божедана
|
||||
Божедара
|
||||
Божемила
|
||||
Божена
|
||||
Божиця
|
||||
Болеслава
|
||||
Борислава
|
||||
Боронислава
|
||||
Братолюба
|
||||
Братомила
|
||||
Брячислава
|
||||
Будана
|
||||
Будимира
|
||||
Будислава
|
||||
Богумила
|
||||
Ведана
|
||||
Велимира
|
||||
Вербава
|
||||
Верхуслава
|
||||
Веселина
|
||||
Веселка
|
||||
Весна
|
||||
Вишена
|
||||
Вишеслава
|
||||
Вишня
|
||||
Віра
|
||||
Віродана
|
||||
Віродара
|
||||
Вірослава
|
||||
Віста
|
||||
Вістуна
|
||||
Вітана
|
||||
Влада
|
||||
Владислава
|
||||
Власта
|
||||
Вогнедара
|
||||
Вогняна
|
||||
Волелюба
|
||||
Володимира
|
||||
Волошка
|
||||
Воля
|
||||
Всеволода
|
||||
Вселюба
|
||||
Всемира
|
||||
Всеслава
|
||||
В’ячеслава
|
||||
Гаїна
|
||||
Гатусила
|
||||
Гарнослава
|
||||
Голубка
|
||||
Горигляда
|
||||
Горислава
|
||||
Городислава
|
||||
Гострозора
|
||||
Градислава
|
||||
Гранислава
|
||||
Гремислава
|
||||
Далібора
|
||||
Дана
|
||||
Дарина
|
||||
Дзвенимира
|
||||
Дзвенислава
|
||||
Дзвінка
|
||||
Діяна
|
||||
Добринка
|
||||
Добровіста
|
||||
Доброгніва
|
||||
Добролюба
|
||||
Добромила
|
||||
Добромира
|
||||
Доброніга
|
||||
Доброслава
|
||||
Долина
|
||||
Доля
|
||||
Домаха
|
||||
Доморада
|
||||
Дружелюба
|
||||
Жадана
|
||||
Ждана
|
||||
Живосила
|
||||
Живослава
|
||||
Житомира
|
||||
Життєлюба
|
||||
Забава
|
||||
Звенигора
|
||||
Звенислава
|
||||
Звонимира
|
||||
Зірка
|
||||
Злата
|
||||
Златомира
|
||||
Златоуста
|
||||
Золотодана
|
||||
Зорегляда
|
||||
Зореслава
|
||||
Зорина
|
||||
Зоря
|
||||
Зоряна
|
||||
Казка
|
||||
Калина
|
||||
Квітка
|
||||
Колодара
|
||||
Красава
|
||||
Красимира
|
||||
Красновида
|
||||
Краснолика
|
||||
Красуня
|
||||
Купава
|
||||
Лада
|
||||
Ладислава
|
||||
Ладомила
|
||||
Ладомира
|
||||
Левина
|
||||
Лель
|
||||
Леля
|
||||
Леся
|
||||
Либідь
|
||||
Лілея
|
||||
Лоліта
|
||||
Любава
|
||||
Любаня
|
||||
Любислава
|
||||
Любов
|
||||
Любомила
|
||||
Любомира
|
||||
Люборада
|
||||
Людмила
|
||||
Людомила
|
||||
Любослава
|
||||
Льоля
|
||||
Мавка
|
||||
Магадара
|
||||
Маїна
|
||||
Маківка
|
||||
Малуня
|
||||
Малуша
|
||||
Мальва
|
||||
Марута
|
||||
Мая
|
||||
Медорада
|
||||
Мечислава
|
||||
Милана
|
||||
Милована
|
||||
Миловида
|
||||
Милодара
|
||||
Милослава
|
||||
Мирана
|
||||
Миробога
|
||||
Миролюба
|
||||
Мирослава
|
||||
Млада
|
||||
Мокрина
|
||||
Мстислава
|
||||
Мудролюба
|
||||
Надія
|
||||
Найда
|
||||
Найдена
|
||||
Наслава
|
||||
Немира
|
||||
Нігослава
|
||||
Незабудка
|
||||
Огняна
|
||||
Оримира
|
||||
Орина
|
||||
Орислава
|
||||
Орися
|
||||
Оріяна
|
||||
Орогоста
|
||||
Острозора
|
||||
Остромира
|
||||
Осмомисла
|
||||
Остромова
|
||||
Пава
|
||||
Палажка
|
||||
Палазга
|
||||
Перелюба
|
||||
Перемила
|
||||
Перемисла
|
||||
Півонія
|
||||
Позвізда
|
||||
Полеза
|
||||
Поляна
|
||||
Потішана
|
||||
Предслава
|
||||
Рада
|
||||
Радана
|
||||
Радимира
|
||||
Радогоста
|
||||
Радомира
|
||||
Радослава
|
||||
Рідна
|
||||
Рогволода
|
||||
Рогніда
|
||||
Родослава
|
||||
Рожана
|
||||
Роксолана
|
||||
Ромашка
|
||||
Росава
|
||||
Росина
|
||||
Ростислава
|
||||
Ростичара
|
||||
Ростуня
|
||||
Рудана
|
||||
Ружа
|
||||
Русана
|
||||
Русудана
|
||||
Русява
|
||||
Русявка
|
||||
Рута
|
||||
Світана
|
||||
Світлана
|
||||
Світовида
|
||||
Світогора
|
||||
Світодара
|
||||
Світозара
|
||||
Світолика
|
||||
Світолюба
|
||||
Світослава
|
||||
Світояра
|
||||
Свободана
|
||||
Святогора
|
||||
Святолюба
|
||||
Святослава
|
||||
Силата
|
||||
Силолюба
|
||||
Силослава
|
||||
Синезора
|
||||
Синьоока
|
||||
Сіверина
|
||||
Слава
|
||||
Славина
|
||||
Славолюба
|
||||
Славомила
|
||||
Сміяна
|
||||
Сніжана
|
||||
Сніжинка
|
||||
Собіслава
|
||||
Соловія
|
||||
Сологуба
|
||||
Сонцевида
|
||||
Сонцедара
|
||||
Сонцелика
|
||||
Сонцеслава
|
||||
Ссанимира
|
||||
Станислава
|
||||
Судимира
|
||||
Судислава
|
||||
Татолюба
|
||||
Твердислава
|
||||
Твердогоста
|
||||
Творимира
|
||||
Творислава
|
||||
Толигніва
|
||||
Тонкостана
|
||||
Трояна
|
||||
Хвала
|
||||
Хвалибого
|
||||
Хвалимира
|
||||
Хвалина
|
||||
Хорошка
|
||||
Хорошуня
|
||||
Хотимра
|
||||
Хотяна
|
||||
Хранимира
|
||||
Худана
|
||||
Цвітана
|
||||
Чайка
|
||||
Чарівна
|
||||
Чарівниця
|
||||
Чаруна
|
||||
Чеслава
|
||||
Ява
|
||||
Яворина
|
||||
Ялина
|
||||
Ярина
|
||||
Яромила
|
||||
Яромира
|
||||
Ярослава
|
||||
Ясна
|
||||
Ясновида
|
||||
Ясногора
|
||||
Яснолика
|
||||
Яснослава
|
830
Tests/TestGenerator/uagenerator/girlsecond.txt
Normal file
830
Tests/TestGenerator/uagenerator/girlsecond.txt
Normal file
@ -0,0 +1,830 @@
|
||||
Єрмоленко
|
||||
Єсипенко
|
||||
Іванів
|
||||
Іваненко
|
||||
Іванченко
|
||||
Іванчук
|
||||
Іванюк
|
||||
Івахненко
|
||||
Івашко
|
||||
Іващенко
|
||||
Івченко
|
||||
Іллєнко
|
||||
Іловайські
|
||||
Ільницька
|
||||
Ільченко
|
||||
Іщенко
|
||||
Абраменко
|
||||
Абрамчук
|
||||
Адамчук
|
||||
Акуленко
|
||||
Алексєєнко
|
||||
Алексійчук
|
||||
Андрієнко
|
||||
Андрійчук
|
||||
Андрейко
|
||||
Андрусів
|
||||
Андрушків
|
||||
Андрущенко
|
||||
Анищенко
|
||||
Антонюк
|
||||
Арсенич
|
||||
Артюх
|
||||
Атаманчук
|
||||
Біла
|
||||
Білас
|
||||
Біла
|
||||
Білодід
|
||||
Білоус
|
||||
Баб'юк
|
||||
Бабійчук
|
||||
Бабак
|
||||
Бабчук
|
||||
Багмут
|
||||
Багрій
|
||||
Бадлак
|
||||
Бажан
|
||||
Балтача
|
||||
Бандура
|
||||
Баран
|
||||
Баранець
|
||||
Барановська
|
||||
Баранюк
|
||||
Батюк
|
||||
Бачинська
|
||||
Бебешко
|
||||
Бевзенко
|
||||
Безбородьки
|
||||
Березовчук
|
||||
Блонські
|
||||
Божик
|
||||
Божко
|
||||
Бойко
|
||||
Бойцун
|
||||
Бойчак
|
||||
Бойчишин
|
||||
Бойчук
|
||||
Бондар
|
||||
Бондаренко
|
||||
Бондарчук
|
||||
Борисенко
|
||||
Борисикевич
|
||||
Братусь
|
||||
Букатевич
|
||||
Бурбан
|
||||
Бурячок
|
||||
Бутейко
|
||||
Бутенко
|
||||
Бутник
|
||||
Бутовичі
|
||||
Бухало
|
||||
Візерські
|
||||
Василашко
|
||||
Василенко
|
||||
Васильченко
|
||||
Васильчук
|
||||
Васкул
|
||||
Васьковичі
|
||||
Вахній
|
||||
Ващенко-Захарченко
|
||||
Вдовиченко
|
||||
Величко
|
||||
Величковські
|
||||
Вертипорох
|
||||
Верхола
|
||||
Винокур
|
||||
Висоцькі
|
||||
Вишневецькі
|
||||
Влох
|
||||
Вобла
|
||||
Вовк
|
||||
Возняк
|
||||
Войнаровські
|
||||
Волох
|
||||
Волошин
|
||||
Волощук
|
||||
Вороновська
|
||||
Гаврилів
|
||||
Гавриленко
|
||||
Гаврилюк
|
||||
Галенковські
|
||||
Гальченко
|
||||
Гамалія
|
||||
Ганицька
|
||||
Гарань
|
||||
Гармаш
|
||||
Гасай
|
||||
Гасюк
|
||||
Герасименко
|
||||
Геращенко
|
||||
Герцик
|
||||
Герцики
|
||||
Гладченко
|
||||
Глоба
|
||||
Гнідичі
|
||||
Гнатюк
|
||||
Гоголі
|
||||
Гоголь
|
||||
Годунок
|
||||
Головата
|
||||
Головко
|
||||
Голуб
|
||||
Голубнича
|
||||
Гольшанські
|
||||
Гонта
|
||||
Гончар
|
||||
Гончаренко
|
||||
Гончаров
|
||||
Горбаль
|
||||
Гордієнко
|
||||
Гординські
|
||||
Гошовські
|
||||
Гошовська
|
||||
Грінченко
|
||||
Грабович
|
||||
Грабовська
|
||||
Григоренко
|
||||
Григорович
|
||||
Григорович-Барська
|
||||
Григорчук
|
||||
Грицак
|
||||
Гриценко
|
||||
Гришко
|
||||
Громики
|
||||
Гудзій
|
||||
Гудзь
|
||||
Гуменюк
|
||||
Гунько
|
||||
Діденко
|
||||
Даниленко
|
||||
Даньків
|
||||
Данькевич
|
||||
Дараган
|
||||
Дашкевич
|
||||
Дем'яненко
|
||||
Дем'янчук
|
||||
Денисенко
|
||||
Джус
|
||||
Дзюба
|
||||
Дикань
|
||||
Дмитерко
|
||||
Довженко
|
||||
Домонтовичі
|
||||
Дорош
|
||||
Дорошенко
|
||||
Доценко
|
||||
Дочинець
|
||||
Драгоманови
|
||||
Дудко
|
||||
Дунін-Борковські
|
||||
Дяків
|
||||
Дяченко
|
||||
Ейбоженко
|
||||
Жайворон
|
||||
Жаліло
|
||||
Ждановичі
|
||||
Жежерін
|
||||
Желєзняк
|
||||
Железняк
|
||||
Жилко
|
||||
Жирко
|
||||
Жук
|
||||
Жупанська
|
||||
Жураківські
|
||||
Зінов'єв
|
||||
Заєць
|
||||
Забашта
|
||||
Заболотна
|
||||
Завальнюк
|
||||
Закревські
|
||||
Закусило
|
||||
Залізняк
|
||||
Заруба
|
||||
Засядько
|
||||
Захаренко
|
||||
Захарчук
|
||||
Заяць
|
||||
Заячківська
|
||||
Збаразькі
|
||||
Зленко
|
||||
Значко-Яворські
|
||||
Золотаренко
|
||||
Кабачок
|
||||
Каганець
|
||||
Калашники
|
||||
Калинович
|
||||
Кандиби
|
||||
Карашевичі
|
||||
Кармалюк
|
||||
Карпенко
|
||||
Кириленко
|
||||
Кисилі
|
||||
Китаста
|
||||
Кицай
|
||||
Клименко
|
||||
Климчук
|
||||
Кмета
|
||||
Книш
|
||||
Ковалів
|
||||
Коваленко
|
||||
Коваль
|
||||
Ковальчик
|
||||
Ковальчук
|
||||
Кованько
|
||||
Ковтун
|
||||
Козаченко
|
||||
Козачинська
|
||||
Козачок
|
||||
Козубенко
|
||||
Колесник
|
||||
Колодій
|
||||
Колодна
|
||||
Коломієць
|
||||
Комар
|
||||
Кондратюк
|
||||
Кониські
|
||||
Корецька
|
||||
Корж
|
||||
Корнійчук
|
||||
Коробка
|
||||
Королюк
|
||||
Короткевич
|
||||
Корпанюк
|
||||
Корчак
|
||||
Корчинська
|
||||
Косенко
|
||||
Костенко
|
||||
Коструба
|
||||
Костюк
|
||||
Котляр
|
||||
Котляревська
|
||||
Кравців
|
||||
Кравченко
|
||||
Кравчук
|
||||
Красовська
|
||||
Криворучко
|
||||
Крикуненко
|
||||
Крупські
|
||||
Кузьмінська
|
||||
Кулиняк
|
||||
Кульчицька
|
||||
Купчинська
|
||||
Курцевичі
|
||||
Кухаренко
|
||||
Куц
|
||||
Куценко
|
||||
Кучер
|
||||
Кучеренко
|
||||
Кушнір
|
||||
Лаба
|
||||
Лаврін
|
||||
Лаврик
|
||||
Лавриненко
|
||||
Лазаревські
|
||||
Лазарчук
|
||||
Лазорко
|
||||
Лашкевичі
|
||||
Левицька
|
||||
Левковські
|
||||
Левченко
|
||||
Леонтовичі
|
||||
Лесів
|
||||
Лесевичі
|
||||
Лисенко
|
||||
Литвин
|
||||
Литвиненко
|
||||
Литвинов
|
||||
Литовченко
|
||||
Лозина-Лозинська
|
||||
Лопатинська
|
||||
Лук'яненко
|
||||
Лукашевичі
|
||||
Лукомська
|
||||
Луценко
|
||||
Людкевич
|
||||
Ляшенко
|
||||
Ляшенко
|
||||
Мірошниченко
|
||||
Мірчук
|
||||
Міщенко
|
||||
Мазаракі
|
||||
Мазепи
|
||||
Мазур
|
||||
Макаренко
|
||||
Максименко
|
||||
Маланчук
|
||||
Малаховські
|
||||
Малишко
|
||||
Малкович
|
||||
Мамчур
|
||||
Маркевич
|
||||
Маркевичі
|
||||
Мартиненко
|
||||
Мартоси
|
||||
Марунчак
|
||||
Марценюк
|
||||
Марченко
|
||||
Марчук
|
||||
Масоха
|
||||
Матвієнко
|
||||
Матюшенко
|
||||
Маценко
|
||||
Мацюк
|
||||
Мельник
|
||||
Мельниченко
|
||||
Мельничук
|
||||
Микитенко
|
||||
Микитин
|
||||
Милорадовичі
|
||||
Мирон
|
||||
Михайленко
|
||||
Михайличенко
|
||||
Михайлюк
|
||||
Мицик
|
||||
Мовчан
|
||||
Могили
|
||||
Модзалевські
|
||||
Моргун
|
||||
Мороз
|
||||
Мосендзи
|
||||
Москаленко
|
||||
Москаль
|
||||
Мошак
|
||||
Муратова
|
||||
Мусієнко
|
||||
Назаренко
|
||||
Наливайко
|
||||
Нащинські
|
||||
Негребецька
|
||||
Непорожній
|
||||
Нестеренко
|
||||
Нечай
|
||||
Нечипоренко
|
||||
Оберемченко
|
||||
Овчаренко
|
||||
Ограновичі
|
||||
Олійник
|
||||
Олексієнко
|
||||
Омельченко
|
||||
Омельчук
|
||||
Онищенко
|
||||
Онопенко
|
||||
Опанасенко
|
||||
Орлики
|
||||
Осадчук
|
||||
Осика
|
||||
Остапенко
|
||||
Остроградська
|
||||
Острозькі
|
||||
Півторак
|
||||
Підопригора
|
||||
Павленко
|
||||
Павлюк
|
||||
Павлюченко
|
||||
Пазенко
|
||||
Паламарчук
|
||||
Панас
|
||||
Панасюк
|
||||
Паньківська
|
||||
Пархоменко
|
||||
Пасічник
|
||||
Пасько
|
||||
Пашко
|
||||
Пащенко
|
||||
Перебийніс
|
||||
Петренко
|
||||
Пилипенко
|
||||
Пилипишин
|
||||
Пилипчук
|
||||
Писаренко
|
||||
Писарчук
|
||||
Плющ
|
||||
Покотило
|
||||
Поліщук
|
||||
Польова
|
||||
Полянська
|
||||
Пономаренко
|
||||
Пономарьов
|
||||
Попадюк
|
||||
Попенко
|
||||
Потапенко
|
||||
Потебенько
|
||||
Прийма
|
||||
Приймак
|
||||
Присяжнюк
|
||||
Приходько
|
||||
Продан
|
||||
Проценко
|
||||
Проць
|
||||
Процюк
|
||||
Пушкар
|
||||
Різенки
|
||||
Різун
|
||||
Радченко
|
||||
Рибальченко
|
||||
Римар
|
||||
Римар
|
||||
Родзянки
|
||||
Рожок
|
||||
Розумовські
|
||||
Романенко
|
||||
Романишин
|
||||
Романчук
|
||||
Романюк
|
||||
Рошкевич
|
||||
Рубан
|
||||
Рубани
|
||||
Руденко
|
||||
Рябовіл
|
||||
Сімашкевич
|
||||
Саєнко
|
||||
Савенко
|
||||
Савицька
|
||||
Савка
|
||||
Савченко
|
||||
Савчук
|
||||
Сак
|
||||
Самборська
|
||||
Самойлович
|
||||
Самусь
|
||||
Свида
|
||||
Семашко
|
||||
Семененко
|
||||
Семенець
|
||||
Семенина
|
||||
Семенченко
|
||||
Семенюк
|
||||
Семеренко
|
||||
Сидоренко
|
||||
Силенко
|
||||
Симоненко
|
||||
Симчич
|
||||
Скаржинські
|
||||
Скоропадські
|
||||
Скрипник
|
||||
Скуратівська
|
||||
Слободян
|
||||
Слободянюк
|
||||
Смик
|
||||
Смогоржевська
|
||||
Собчук
|
||||
Сопронюк
|
||||
Сорока
|
||||
Сохань
|
||||
Стадник
|
||||
Стельмах
|
||||
Степаненко
|
||||
Степура
|
||||
Стеценко
|
||||
Стецюк
|
||||
Стороженки
|
||||
Струтинська
|
||||
Сулима
|
||||
Сулими
|
||||
Супруненко
|
||||
Танські
|
||||
Тараненко
|
||||
Тарновські
|
||||
Татаренко
|
||||
Теплицька
|
||||
Терещенко
|
||||
Терещук
|
||||
Тесленко
|
||||
Тимошенко
|
||||
Тимощук
|
||||
Тимчак
|
||||
Титаренко
|
||||
Тишкевичі
|
||||
Тищенко
|
||||
Ткач
|
||||
Ткаченко
|
||||
Ткачук
|
||||
Тобілевичі
|
||||
Толочко
|
||||
Томенко
|
||||
Трощинські
|
||||
Тулуб
|
||||
Удовенко
|
||||
Удовиченко
|
||||
Усенко
|
||||
Філоненко
|
||||
Феденко
|
||||
Федоренко
|
||||
Федорук
|
||||
Фещенко
|
||||
Фоменко
|
||||
Ханенки
|
||||
Ханенко
|
||||
Харитоненки
|
||||
Харчук
|
||||
Хміляр
|
||||
Хмара
|
||||
Хмельницькі
|
||||
Холодовська
|
||||
Хоменко
|
||||
Царук
|
||||
Цибуленко
|
||||
Цюпа
|
||||
Чабаненко
|
||||
Чанов
|
||||
Чередниченко
|
||||
Чернявська
|
||||
Чорна
|
||||
Чорна
|
||||
Чорновіл
|
||||
Чуйкевич
|
||||
Чумак
|
||||
Чумаченко
|
||||
Шахрай
|
||||
Шевченко
|
||||
Шевчук
|
||||
Шелест
|
||||
Шептицькі
|
||||
Шинкарук
|
||||
Шкрібляк
|
||||
Шнайдер
|
||||
Шовкопляс
|
||||
Шульга
|
||||
Шухевич
|
||||
Щерба
|
||||
Щербак
|
||||
Щербань
|
||||
Юрженко
|
||||
Юрченко
|
||||
Юрчишин
|
||||
Юхименко
|
||||
Ющенко
|
||||
Яковенко
|
||||
Яковина
|
||||
Янко
|
||||
Ярема
|
||||
Яременко
|
||||
Яремко
|
||||
Яремчук
|
||||
Ярмоленко
|
||||
Ярмолюк
|
||||
Ярошенко
|
||||
Яценко
|
||||
Ященко
|
||||
Ґалаґан
|
||||
Євсєєва
|
||||
Єгорова
|
||||
Єлізарова
|
||||
Єрмилова
|
||||
Єрофєєва
|
||||
Єршова
|
||||
Єфімова
|
||||
Єфремова
|
||||
Іванова
|
||||
Ігнатова
|
||||
Іллюшина
|
||||
Ільїна
|
||||
Аєдоницька
|
||||
Абатурова
|
||||
Абдулова
|
||||
Абрамова
|
||||
Авілова
|
||||
Авдєєнко
|
||||
Аврамова
|
||||
Алексєєва
|
||||
Александрова
|
||||
Альошина
|
||||
Анісімова
|
||||
Анісова
|
||||
Ананьєва
|
||||
Андріанова
|
||||
Андріяшева
|
||||
Андреєва
|
||||
Антипова
|
||||
Антонова
|
||||
Анциферова
|
||||
Апухтіна
|
||||
Арбузова
|
||||
Аржанова
|
||||
Артем'єва
|
||||
Архипова
|
||||
Арцибушева
|
||||
Астраханцева
|
||||
Афіногенова
|
||||
Афанасьєва
|
||||
Бєлова
|
||||
Бєлоглазова
|
||||
Бєлоусова
|
||||
Бєляєва
|
||||
Бібикова
|
||||
Бажанова
|
||||
Баранова
|
||||
Барановська
|
||||
Баришнікова
|
||||
Барсова
|
||||
Батюшкова
|
||||
Бикова
|
||||
Блохіна
|
||||
Боброва
|
||||
Богданова
|
||||
Богомазова
|
||||
Бойкова
|
||||
Большакова
|
||||
Борисова
|
||||
Бочкова
|
||||
Бризгалова
|
||||
Брусилова
|
||||
Бутурліна
|
||||
Бутусова
|
||||
Варламова
|
||||
Васильєва
|
||||
Виноградова
|
||||
Власова
|
||||
Внукова
|
||||
Волкова
|
||||
Воробей
|
||||
Воробйова
|
||||
Вороніна
|
||||
Воронцова
|
||||
Ворошилова
|
||||
Гаврилова
|
||||
Герасимова
|
||||
Гончарова
|
||||
Горбунова
|
||||
Горчакова
|
||||
Горшкова
|
||||
Григор'єва
|
||||
Громова
|
||||
Гусєва
|
||||
Давидова
|
||||
Данилова
|
||||
Дарагана
|
||||
Дементьєва
|
||||
Денисова
|
||||
Дмитрієва
|
||||
Добролюбова
|
||||
Донськая
|
||||
Дорофєєва
|
||||
Дуброва
|
||||
Железнякова
|
||||
Жердєва
|
||||
Жукова
|
||||
Журавльова
|
||||
Зінов'єва
|
||||
Заварова
|
||||
Загарова
|
||||
Зайцева
|
||||
Захарова
|
||||
Звєрєва
|
||||
Зерова
|
||||
Золотухіна
|
||||
Зубова
|
||||
Казакова
|
||||
Калініна
|
||||
Калашникова
|
||||
Карпова
|
||||
Каштанова
|
||||
Кисельова
|
||||
Ковальова
|
||||
Кожевникова
|
||||
Козлова
|
||||
Колесникова
|
||||
Кольцова
|
||||
Комарова
|
||||
Коновалова
|
||||
Конюхова
|
||||
Копилова
|
||||
Кормильцева
|
||||
Коробова
|
||||
Коровкіна
|
||||
Корольова
|
||||
Котова
|
||||
Краснова
|
||||
Крилова
|
||||
Кримова
|
||||
Крюкова
|
||||
Кудряшова
|
||||
Кузнецова
|
||||
Кузьміна
|
||||
Кулакова
|
||||
Куликова
|
||||
Куркова
|
||||
Курочкіна
|
||||
Лєскова
|
||||
Лідова
|
||||
Ладигіна
|
||||
Лазарєва
|
||||
Лебедєва
|
||||
Левицька
|
||||
Лихоносова
|
||||
Лозина-Лозинська
|
||||
Лосєва
|
||||
Львова
|
||||
Любимова
|
||||
Мілютіна
|
||||
Макарова
|
||||
Максимова
|
||||
Малакова
|
||||
Мамонова
|
||||
Манасеїна
|
||||
Маркова
|
||||
Мартенс
|
||||
Мартинова
|
||||
Масленнікова
|
||||
Маслова
|
||||
Матвєєва
|
||||
Медведєва
|
||||
Мельникова
|
||||
Миронова
|
||||
Михайлова
|
||||
Моїсєєва
|
||||
Моргунова
|
||||
Моркова
|
||||
Морозова
|
||||
Мухіна
|
||||
Нікітіна
|
||||
Ніколаєва
|
||||
Нікуліна
|
||||
Набокова
|
||||
Некрасова
|
||||
Новикова
|
||||
Орлова
|
||||
Осипова
|
||||
Остроградська
|
||||
Павлова
|
||||
Павлушкова
|
||||
Панова
|
||||
Петрова
|
||||
Пильчикова
|
||||
Платонова
|
||||
Плеханова
|
||||
Польова
|
||||
Полякова
|
||||
Пономарьова
|
||||
Попова
|
||||
Пояркова
|
||||
Пригунова
|
||||
Прошкіна
|
||||
Решетникова
|
||||
Рожкова
|
||||
Романова
|
||||
Рябова
|
||||
Сабліна
|
||||
Савіна
|
||||
Сазонова
|
||||
Сальникова
|
||||
Самойлова
|
||||
Самсонова
|
||||
Сбітнєва
|
||||
Свиридова
|
||||
Селезньова
|
||||
Семенова
|
||||
Сербіна
|
||||
Сергєєва
|
||||
Сибірякова
|
||||
Сидорова
|
||||
Симонова
|
||||
Синельникова
|
||||
Скобелева
|
||||
Скобліна
|
||||
Смирнова
|
||||
Снєгірьова
|
||||
Соболєва
|
||||
Соколова
|
||||
Солнцева
|
||||
Соловйова
|
||||
Сомова
|
||||
Сорокіна
|
||||
Стєклова
|
||||
Старкова
|
||||
Степанова
|
||||
Табакова
|
||||
Тарасова
|
||||
Терентьєва
|
||||
Тимофєєва
|
||||
Титова
|
||||
Тихомирова
|
||||
Тихонова
|
||||
Тюленєва
|
||||
Уварова
|
||||
Усова
|
||||
Устинова
|
||||
Філіппова
|
||||
Філатова
|
||||
Федорова
|
||||
Фоміна
|
||||
Фролова
|
||||
Хілкова
|
||||
Хвостова
|
||||
Худякова
|
||||
Цвєткова
|
||||
Чанова
|
||||
Чевкіна
|
||||
Черенкова
|
||||
Черепкова
|
||||
Чулкова
|
||||
Шевельова
|
||||
Шеліхова
|
||||
Шиніна
|
||||
Ширяєва
|
||||
Шишова
|
||||
Шулакова
|
||||
Щапова
|
||||
Щаслива
|
||||
Яковлєва
|
||||
Яшина
|
12
Tests/TestGenerator/uagenerator/loadDB.php
Normal file
12
Tests/TestGenerator/uagenerator/loadDB.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
$type = 'boy';
|
||||
$val = 'second';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$arr = file($type . $val . '.txt');
|
||||
foreach ($arr as $cd)
|
||||
{
|
||||
mysql_query('INSERT INTO ' . $type . $val . ' (`name`) VALUES (\'' . trim($cd) . '\')');
|
||||
}
|
||||
?>
|
25
Tests/TestGenerator/uagenerator/manFatherDB.php
Normal file
25
Tests/TestGenerator/uagenerator/manFatherDB.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
$type = 'boy';
|
||||
$val = 'father';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
if(implode('#', $nc->qFatherName($row['name'], null, 1))!=$row['nameCase'])
|
||||
{
|
||||
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
|
||||
$t.= "<font style='font-size:12px;'>".
|
||||
implode('<br>', $nc->qFatherName($row['name'], null, 1))
|
||||
."</font><br>";
|
||||
}
|
||||
|
||||
}
|
||||
echo $t;
|
||||
?>
|
25
Tests/TestGenerator/uagenerator/manSecondDB.php
Normal file
25
Tests/TestGenerator/uagenerator/manSecondDB.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
$type = 'boy';
|
||||
$val = 'second';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
if(implode('#', $nc->qSecondName($row['name'], null, 1))!=$row['nameCase'])
|
||||
{
|
||||
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
|
||||
$t.= "<font style='font-size:12px;'>".
|
||||
implode('<br>', $nc->qSecondName($row['name'], null, 1))
|
||||
."</font><br>";
|
||||
}
|
||||
|
||||
}
|
||||
echo $t;
|
||||
?>
|
58
Tests/TestGenerator/uagenerator/savegirls.php
Normal file
58
Tests/TestGenerator/uagenerator/savegirls.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
isset($_GET['type']) ? $type = $_GET['type'] : $type = 'girl';
|
||||
isset($_GET['val']) ? $val = $_GET['val'] : $val = 'second';
|
||||
//$type = 'girl';
|
||||
//$val = 'name';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
//$id=intval($_GET['id']);
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
function in($letter, $string)
|
||||
{
|
||||
|
||||
if ($letter and mb_strpos($string, $letter) === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
// if(implode('#', $nc->qSecondName($row['name'], null, 2))!=$row['nameCase'])
|
||||
// {
|
||||
// $t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
|
||||
// $t.= "<font style='font-size:12px;'>".
|
||||
// implode('<br>', $nc->qSecondName($row['name'], null, 2))
|
||||
// ."</font><br>";
|
||||
// }
|
||||
$LastSymbol = mb_substr($row['name'], -1, 1, 'utf-8');
|
||||
$TwoLast = mb_substr($row['name'], -2, 2, 'utf-8');
|
||||
if($TwoLast=='ко' or in($LastSymbol, 'бвгджзйклмнпрстфхцчшщіь'))
|
||||
{
|
||||
$res=implode('#', array($row['name'],$row['name'],$row['name'],$row['name'],$row['name'],$row['name'],$row['name']));
|
||||
mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$row['id']}");
|
||||
}
|
||||
}
|
||||
//$t='';
|
||||
//$row = mysql_fetch_array($all);
|
||||
//$method = 'qFirstName';
|
||||
//if($val=='father')
|
||||
//{
|
||||
// $method = 'qFatherName';
|
||||
//}
|
||||
//if($val=='second')
|
||||
//{
|
||||
// $method = 'qSecondName';
|
||||
//}
|
||||
//$res = implode('#', $nc->$method($row['name'], null, ($type=='girl' ? 2 : 1)));
|
||||
//mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$id}");
|
||||
?>
|
28
Tests/TestGenerator/uagenerator/saveme.php
Normal file
28
Tests/TestGenerator/uagenerator/saveme.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
isset($_GET['type']) ? $type = $_GET['type'] : 'girl';
|
||||
isset($_GET['val']) ? $val = $_GET['val'] : 'names';
|
||||
//$type = 'girl';
|
||||
//$val = 'name';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$id=intval($_GET['id']);
|
||||
$tablename=$type . $val;
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id` FROM {$tablename} WHERE id={$id}");
|
||||
$t='';
|
||||
$row = mysql_fetch_array($all);
|
||||
$method = 'qFirstName';
|
||||
if($val=='father')
|
||||
{
|
||||
$method = 'qFatherName';
|
||||
}
|
||||
if($val=='second')
|
||||
{
|
||||
$method = 'qSecondName';
|
||||
}
|
||||
$res = implode('#', $nc->$method($row['name'], null, ($type=='girl' ? 2 : 1)));
|
||||
mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$id}");
|
||||
?>
|
25
Tests/TestGenerator/uagenerator/testFromDB.php
Normal file
25
Tests/TestGenerator/uagenerator/testFromDB.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
$type = 'girl';
|
||||
$val = 'name';
|
||||
mysql_connect('localhost', 'root', '');
|
||||
mysql_select_db('names');
|
||||
mysql_set_charset('utf8');
|
||||
$tablename=$type . $val . 's';
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../../../Library/NCL.NameCase.ua.php';
|
||||
$nc = new NCLNameCaseUa();
|
||||
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
|
||||
$t='';
|
||||
while ($row = mysql_fetch_array($all))
|
||||
{
|
||||
if(implode('#', $nc->qFirstName($row['name'], null, 2))!=$row['nameCase'])
|
||||
{
|
||||
$t.= "<a href='saveme.php?id={$row['id']}'><b>{$row['name']}</b></a><br>";
|
||||
$t.= "<font style='font-size:12px;'>".
|
||||
implode('<br>', $nc->qFirstName($row['name'], null, 2))
|
||||
."</font><br>";
|
||||
}
|
||||
|
||||
}
|
||||
echo $t;
|
||||
?>
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
require '../Library/NCL.NameCase.ru.php';
|
||||
$ob = new NCLNameCaseRu;
|
||||
$ob->setSecondName('Чайка');
|
||||
$ob->setGender(NCLNameCaseRu::$MAN);
|
||||
print_r($ob->getSecondNameCase()); echo $ob->getSecondNameRule();
|
||||
require '../Library/NCL.NameCase.ua.php';
|
||||
$ob = new NCLNameCaseUa;
|
||||
print_r($ob->qSecondName('Донськая',null,2));
|
||||
echo $ob->getSecondNameRule();
|
||||
?>
|
||||
|
@ -14,26 +14,26 @@ $nc = new NCLNameCaseRu();
|
||||
* =========================
|
||||
* Встроенные константы
|
||||
* =========================
|
||||
* NCLNameCaseRu::$IMENITLN - именительный падеж
|
||||
* NCLNameCaseRu::$RODITLN - родительные падеж
|
||||
* NCLNameCaseRu::$DATELN - дательные падеж
|
||||
* NCLNameCaseRu::$VINITELN - винительный падеж
|
||||
* NCLNameCaseRu::$TVORITELN - творительный падеж
|
||||
* NCLNameCaseRu::$PREDLOGN - предложный падеж
|
||||
* NCL::$IMENITLN - именительный падеж
|
||||
* NCL::$RODITLN - родительные падеж
|
||||
* NCL::$DATELN - дательные падеж
|
||||
* NCL::$VINITELN - винительный падеж
|
||||
* NCL::$TVORITELN - творительный падеж
|
||||
* NCL::$PREDLOGN - предложный падеж
|
||||
*/
|
||||
|
||||
echo 'Отчет, ' .
|
||||
$nc->q("Афонин Николай Сергеевич", NCLNameCaseRu::$RODITLN)
|
||||
$nc->q("Афонин Николай Сергеевич", NCL::$RODITLN)
|
||||
. ' о проделаной работе вместе с его сыном ' .
|
||||
$nc->q("Афонин Никита", NCLNameCaseRu::$TVORITELN) .
|
||||
$nc->q("Афонин Никита", NCL::$TVORITELN) .
|
||||
' на осенних каникулах. Задание держалось на ' .
|
||||
$nc->q("Маргаритта Николаевна", NCLNameCaseRu::$PREDLOGN) .
|
||||
$nc->q("Маргаритта Николаевна", NCL::$PREDLOGN) .
|
||||
'; Поздравляем всех предчастных, в том числе и ' .
|
||||
$nc->q("Кардонский Серафим Ильич", NCLNameCaseRu::$VINITELN) . ' и ' .
|
||||
$nc->q("Лобудская София Викторовна", NCLNameCaseRu::$VINITELN) .
|
||||
$nc->q("Кардонский Серафим Ильич", NCL::$VINITELN) . ' и ' .
|
||||
$nc->q("Лобудская София Викторовна", NCL::$VINITELN) .
|
||||
'. Хотим передать поздравление также ' .
|
||||
$nc->q("Игнатьев Павел Викторович", NCLNameCaseRu::$DATELN) . ' и ' .
|
||||
$nc->q("Сумарский Лев", NCLNameCaseRu::$DATELN);
|
||||
$nc->q("Игнатьев Павел Викторович", NCL::$DATELN) . ' и ' .
|
||||
$nc->q("Сумарский Лев", NCL::$DATELN);
|
||||
|
||||
/*
|
||||
* ========================
|
58
Tutorial/demoUA.php
Normal file
58
Tutorial/demoUA.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
/*
|
||||
* Небольшой пример использования библиотеки
|
||||
* 1. Шаг подключаем библиотеку
|
||||
*/
|
||||
require '../Library/NCL.NameCase.ua.php';
|
||||
/*
|
||||
* 2. Создаем объект
|
||||
*/
|
||||
$nc = new NCLNameCaseUa();
|
||||
/*
|
||||
* =========================
|
||||
* Встроенные константы
|
||||
* =========================
|
||||
* NCL::$IMENITLN - именительный падеж
|
||||
* NCL::$RODITLN - родительные падеж
|
||||
* NCL::$DATELN - дательные падеж
|
||||
* NCL::$VINITELN - винительный падеж
|
||||
* NCL::$TVORITELN - творительный падеж
|
||||
* NCL::$PREDLOGN - предложный падеж
|
||||
*
|
||||
*
|
||||
* NCL::$UaNazyvnyi - називний відмінок
|
||||
* NCL::$UaRodovyi - родовий відмінок
|
||||
* NCL::$UaDavalnyi - давальный відмінок
|
||||
* NCL::$UaZnahidnyi - знахідний відмінок
|
||||
* NCL::$UaOrudnyi - орудний відмінок
|
||||
* NCL::$UaMiszevyi - місцевий відмінок
|
||||
* NCL::$UaKlychnyi - кличний відмінок
|
||||
*/
|
||||
|
||||
echo 'Звіт, ' .
|
||||
$nc->q("Афонін Микола Сергійович", NCL::$RODITLN)
|
||||
. ' про виконану роботу разом з його сином ' .
|
||||
$nc->q("Афонін Микита", NCL::$TVORITELN) .
|
||||
' на осінніх канікулах. Завдання трималося на ' .
|
||||
$nc->q("Маргарита Миколаївна", NCL::$PREDLOGN) .
|
||||
'; Вітаємо всіх, а також ' .
|
||||
$nc->q("Розумвський Андрій Миколайович", NCL::$VINITELN) . ' та ' .
|
||||
$nc->q("Лобудска Софія Вікторівна", NCL::$VINITELN) .
|
||||
'. Хочемо передати вітання ' .
|
||||
$nc->q("Воробей Хорив Іларіонович", NCL::$DATELN) . ' і ' .
|
||||
$nc->q("Мазепа Лев", NCL::$UaDavalnyi) . '. ' .
|
||||
$nc->q("Афродіта Іллівна", NCL::$UaKlychnyi) . ', триматесь!';
|
||||
|
||||
/*
|
||||
* ========================
|
||||
* Результат выполнения
|
||||
* ========================
|
||||
* Звіт, Афоніна Миколи Сергійовича про виконану роботу разом з його сином Афоніном Микитою на осінніх канікулах. Завдання трималося на Маргариті Миколаївні; Вітаємо всіх, а також Розумвського Андрія Миколайовича та Лобудску Софію Вікторівну. Хочемо передати вітання Вороб’єві Хоривові Іларіоновичу і Мазепі Левові. Афродіто Іллівно, триматесь!
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
<?php
|
||||
header('Content-type: text/html; charset=utf-8');
|
||||
/*
|
||||
* Небольшой пример использования библиотеки
|
||||
* 1. Шаг подключаем библиотеку
|
||||
*/
|
||||
require '../Library/NCL.NameCase.ru.php';
|
||||
/*
|
||||
* 2. Создаем объект
|
||||
*/
|
||||
$nc = new NCLNameCaseRu();
|
||||
print_r($nc->q("Рижиков Тарас Геннадиевич"));
|
Loading…
Reference in New Issue
Block a user