mirror of
https://github.com/retailcrm/NameCaseLib.git
synced 2024-12-05 03:16:06 +03:00
[0.4.1] /RU11072011/ Перейменованы классы, перепесан русский идентификатор имен
This commit is contained in:
parent
ad1bc79c83
commit
708703b954
@ -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
|
||||
@ -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->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;
|
||||
}
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
20
Tests/TestGenerator/NamesAll/importDB.php
Normal file
20
Tests/TestGenerator/NamesAll/importDB.php
Normal 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');
|
||||
|
||||
?>
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user