[0.4.1] /RU11072011/ Перейменованы классы, перепесан русский идентификатор имен

This commit is contained in:
Andriy Chaika 2011-07-20 21:12:17 +03:00
parent ad1bc79c83
commit 708703b954
11 changed files with 177 additions and 26 deletions

View File

@ -22,12 +22,12 @@ require_once dirname(__FILE__) . '/NCL/NCLNameCaseCore.php';
*/
class NCLNameCaseRu extends NCLNameCaseCore
{
/**
* Версия языкового файла
* @var string
*/
protected $languageBuild = '11071411';
protected $languageBuild = '11072011';
/**
* Количество падежей в языке
* @var int
@ -154,7 +154,7 @@ class NCLNameCaseRu extends NCLNameCaseCore
{
//Слова типа Воробей
if($this->Last(3) == 'бей')
if ($this->Last(3) == 'бей')
{
$this->wordForms($this->workingWord, array('ья', 'ью', 'ья', 'ьем', 'ье'), 2);
$this->Rule(400);
@ -234,13 +234,13 @@ class NCLNameCaseRu extends NCLNameCaseCore
return true;
}
//е перед ц выпадает
elseif ($this->Last(2)=='ец')
elseif ($this->Last(2) == 'ец')
{
$this->wordForms($this->workingWord, array('ца', 'цу', 'ца', 'цом', 'це'), 2);
$this->Rule(604);
return true;
}
elseif ($this->in($this->Last(1),'цср'))
elseif ($this->in($this->Last(1), 'цср'))
{
$this->wordForms($this->workingWord, array('а', 'у', 'а', 'ом', 'е'));
$this->Rule(602);
@ -314,7 +314,7 @@ class NCLNameCaseRu extends NCLNameCaseCore
*/
protected function womanRule1()
{
if ($this->Last(1) == "а" and $this->Last(2, 1)!='и')
if ($this->Last(1) == "а" and $this->Last(2, 1) != 'и')
{
if (!$this->in($this->Last(2, 1), 'шхкг'))
{
@ -616,6 +616,7 @@ class NCLNameCaseRu extends NCLNameCaseCore
protected function detectNamePart(NCLNameCaseWord $word)
{
$namepart = $word->getWord();
$length = NCLStr::strlen($namepart);
$this->setWorkingWord($namepart);
//Считаем вероятность
@ -634,6 +635,63 @@ class NCLNameCaseRu extends NCLNameCaseCore
$first+=0.5;
}
/**
* буквы на которые никогда не закнчиваются имена
*/
if ($this->in($this->Last(1), 'еёжхцочшщъыэю'))
{
$second += 0.3;
}
/**
* Не бывает имет с такими предпоследними буквами
*/
if ($this->in($this->Last(2, 1), 'жчщъэю'))
{
$second += 0.3;
}
/**
* Слова на мягкий знак. Существует очень мало имен на мягкий знак. Все остальное фамилии
*/
if ($this->Last(1) == 'ь')
{
/**
* Имена типа нинЕЛь адЕЛь асЕЛь
*/
if ($this->Last(3, 2) == 'ел')
{
$first += 0.7;
}
/**
* Просто исключения
*/
elseif ($this->inNames($namepart, array('Лазарь', 'Игорь', 'Любовь')))
{
$first += 10;
}
/**
* Если не то и не другое, тогда фамилия
*/
else
{
$second += 0.3;
}
}
/**
* Если две последних букв согласные то скорее всего это фамилия
*/
elseif ($this->in($this->Last(1), $this->consonant . 'ь') and $this->in($this->Last(2, 1), $this->consonant . 'ь'))
{
/**
* Практически все кроме тех которые оканчиваются на следующие буквы
*/
if (!$this->in($this->Last(2), array('др', 'кт', 'лл', 'пп', 'рд', 'рк', 'рп', 'рт', 'тр')))
{
$second += 0.25;
}
}
//Похоже на имя
if ($this->in($this->Last(3), array('тин', 'тын')))
{
@ -641,27 +699,100 @@ class NCLNameCaseRu extends NCLNameCaseCore
}
//Исключения
if ($this->inNames($namepart, array('Лев', 'Яков', 'Мальвина', 'Антонина', 'Альбина', 'Агриппина', 'Каллиник', 'Маша', 'Ольга', 'Еремей', 'Фаина', 'Лазарь', 'Карина', 'Марина', 'Валентина', 'Исак', 'Исаак', 'Валентин', 'Константин', 'Мартин', 'Устин', 'Калина', 'Аделина', 'Алина', 'Ангелина', 'Галина', 'Каролина', 'Павлина', 'Полина', 'Элина', 'Мина', 'Нина', 'Ева', 'Ирина', 'Элькин', 'Мерлин')))
if ($this->inNames($namepart, array('Лев', 'Яков', 'Маша', 'Ольга', 'Еремей', 'Исак', 'Исаак', 'Ева', 'Ирина', 'Элькин', 'Мерлин')))
{
$first+=10;
}
if($this->in($this->Last(7),array('атерина', 'ристина')))
/**
* Фамилии которые заканчиваются на -ли кроме тех что типа натАли и.т.д.
*/
if ($this->Last(2) == 'ли' and $this->Last(3, 1) != 'а')
{
$second+=0.4;
}
/**
* Фамилии на -як кроме тех что типа Касьян Куприян + Ян и.т.д.
*/
if ($this->Last(2) == 'ян' and $length > 2 and !$this->in($this->Last(3, 1), 'ьи'))
{
$second+=0.4;
}
/**
* Фамилии на -ур кроме имен Артур Тимур
*/
if ($this->Last(2) == 'ур')
{
if (!$this->inNames($namepart, array('Артур', 'Тимур')))
{
$second += 0.4;
}
}
/**
* Разбор ласкательных имен на -ик
*/
if ($this->Last(2) == 'ик')
{
/**
* Ласкательные буквы перед ик
*/
if ($this->in($this->Last(3, 1), 'лшхд'))
{
$first += 0.3;
}
else
{
$second += 0.4;
}
}
/**
* Разбор имен и фамилий, который заканчиваются на ина
*/
if ($this->Last(3) == 'ина')
{
/**
* Все похожие на Катерина и Кристина
*/
if ($this->in($this->Last(7), array('атерина', 'ристина')))
{
$first+=10;
}
//похоже на фамилию
if ($this->in($this->Last(2), array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ун', 'ок', 'ая', 'га', 'ёк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр', 'де', 'ых', 'уз', 'ах', 'рг', 'ец', 'юр', 'ич', 'ро', 'ло', 'ть', 'ль', 'ли', 'ур')))
/**
* Исключения
*/
elseif ($this->inNames($namepart, array('Мальвина', 'Антонина', 'Альбина', 'Агриппина', 'Фаина', 'Карина', 'Марина', 'Валентина', 'Калина', 'Аделина', 'Алина', 'Ангелина', 'Галина', 'Каролина', 'Павлина', 'Полина', 'Элина', 'Мина', 'Нина')))
{
$first+=10;
}
/**
* Иначе фамилия
*/
else
{
$second += 0.4;
}
}
/**
* Фамильные окончания
*/
if ($this->in($this->Last(2), array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ук', 'як', 'ца', 'ун', 'ок', 'ая', 'га', 'ёк', 'ив', 'ус', 'ак', 'яр', 'уз', 'ах')))
{
$second+=0.4;
}
if ($this->in($this->Last(3), array('ова', 'ева', 'ёва', 'ына', 'тых', 'рик', 'вач', 'аха', 'шен', 'мей', 'арь', 'вка', 'шир', 'бан', 'тин', 'чий', 'ина', 'гай', 'кий', 'бей', 'чан', 'ган', 'ник', 'ким', 'бян', 'кан')))
if ($this->in($this->Last(3), array('ова', 'ева', 'ёва', 'ына', 'шен', 'мей', 'вка', 'шир', 'бан', 'чий', 'гай', 'кий', 'бей', 'чан', 'ган', 'ким', 'кан', 'мар')))
{
$second+=0.4;
}
if ($this->in($this->Last(4), array('ьник', 'нчук', 'тник', 'кирь', 'ский', 'шена')))
if ($this->in($this->Last(4), array('шена')))
{
$second+=0.4;
}

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseUa.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseUa.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseUa.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseRu.php';
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseRu.php';
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseRu.php';
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase

View File

@ -0,0 +1,20 @@
<?php
mysql_connect('localhost', 'root');
mysql_select_db('names');
mysql_set_charset('utf8');
function importFile($file, $into)
{
$names = file($file);
foreach($names as $name)
{
mysql_query("INSERT INTO {$into} VALUES ('".trim($name)."');");
}
}
importFile('boyname.txt', 'rufirst');
importFile('girlname.txt', 'rufirst');
importFile('girlsirname.txt', 'rusecond');
importFile('boysirname.txt', 'rusecond');
?>

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseRu.php';
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase

View File

@ -1,6 +1,6 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
require_once dirname(__FILE__) . '/../../Library/NCLNameCaseUa.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase