mirror of
https://github.com/retailcrm/NameCaseLib.git
synced 2024-12-05 03:16:06 +03:00
[0.3.1] [UKR] Распознавание фамилии имя отчества END
This commit is contained in:
parent
13f036b920
commit
50a422464e
@ -780,7 +780,7 @@ class NCLNameCaseUa extends NCLNameCaseCore implements NCLNameCaseInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Похоже на имя
|
//Похоже на имя
|
||||||
if (in_array($LastThree, array('тин')) or in_array($LastFour, array('ьмич', 'юбов')))
|
if (in_array($LastThree, array('тин' /*{endings_sirname3}*/)) or in_array($LastFour, array('ьмич', 'юбов', 'івна', 'явка', 'орив', 'кіян' /*{endings_sirname4}*/)))
|
||||||
{
|
{
|
||||||
$first+=0.5;
|
$first+=0.5;
|
||||||
}
|
}
|
||||||
@ -792,17 +792,17 @@ class NCLNameCaseUa extends NCLNameCaseCore implements NCLNameCaseInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
//похоже на фамилию
|
//похоже на фамилию
|
||||||
if (in_array($LastTwo, array('ов', 'ін', 'ев', 'єв', 'ий', 'ин', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'єк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр', 'іл', 'ів', 'ич', 'сь', 'ей', 'нс', 'яс', 'ер', 'ай', 'ян', 'ах', 'ць', 'ющ', 'іс', 'ач', 'уб', 'ох', 'юх','ут','ча','ул','вк','зь' /*{endings2}*/)))
|
if (in_array($LastTwo, array('ов', 'ін', 'ев', 'єв', 'ий', 'ин', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'єк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр', 'іл', 'ів', 'ич', 'сь', 'ей', 'нс', 'яс', 'ер', 'ай', 'ян', 'ах', 'ць', 'ющ', 'іс', 'ач', 'уб', 'ох', 'юх','ут','ча','ул','вк','зь', 'уц', 'їн' /*{endings_name2}*/)))
|
||||||
{
|
{
|
||||||
$second+=0.4;
|
$second+=0.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($LastThree, array('ова', 'ева', 'єва', 'тих', 'рик', 'вач', 'аха', 'шен', 'мей', 'арь', 'вка', 'шир', 'бан', 'чий', 'іна', 'їна', 'ька', 'ань', 'ива', 'аль','ура','ран','ало','ола','кур','оба','оль','нта','зій','ґан','іло','шта', 'юпа', 'рна', 'бла', 'еїн', 'има', 'мар', 'кар', 'оха', 'чур', 'ниш', 'ета', 'тна', 'зур', 'нір', 'йма', 'орж', 'рба' /*{endings3}*/)))
|
if (in_array($LastThree, array('ова', 'ева', 'єва', 'тих', 'рик', 'вач', 'аха', 'шен', 'мей', 'арь', 'вка', 'шир', 'бан', 'чий', 'іна', 'їна', 'ька', 'ань', 'ива', 'аль','ура','ран','ало','ола','кур','оба','оль','нта','зій','ґан','іло','шта', 'юпа', 'рна', 'бла', 'еїн', 'има', 'мар', 'кар', 'оха', 'чур', 'ниш', 'ета', 'тна', 'зур', 'нір', 'йма', 'орж', 'рба', 'іла', 'лас', 'дід', 'роз', 'аба', 'лест', 'мара', 'обка', 'рока', 'сика', 'одна', 'нчар', 'вата', 'ндар', 'грій' /*{endings_name3}*/)))
|
||||||
{
|
{
|
||||||
$second+=0.4;
|
$second+=0.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($LastFour, array('ьник', 'нчук', 'тник', 'кирь', 'ский', 'шена', 'шина', 'вина', 'нина' /*{endings4}*/)))
|
if (in_array($LastFour, array('ьник', 'нчук', 'тник', 'кирь', 'ский', 'шена', 'шина', 'вина', 'нина', 'гана', 'гана', 'хній', 'зюба', 'орош', 'орон', 'сило', 'руба' /*{endings_name4}*/)))
|
||||||
{
|
{
|
||||||
$second+=0.4;
|
$second+=0.4;
|
||||||
}
|
}
|
||||||
|
@ -9,73 +9,98 @@ require 'EndingsCompiler.php';
|
|||||||
|
|
||||||
class BatchTester
|
class BatchTester
|
||||||
{
|
{
|
||||||
|
|
||||||
private $compiler;
|
private $compiler;
|
||||||
private $mode;
|
private $mode;
|
||||||
|
|
||||||
public $epsilon;
|
public $epsilon;
|
||||||
|
|
||||||
public function __construct($mode)
|
public function __construct($mode, $direction)
|
||||||
{
|
{
|
||||||
copy('../../../Library/NCL.NameCase.core.php','compiled/NCL.NameCase.core.php');
|
copy('../../../Library/NCL.NameCase.core.php', 'compiled/NCL.NameCase.core.php');
|
||||||
$testPHP = file_get_contents('../../Library/NameSplitUAname.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);
|
$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);
|
file_put_contents('compiled/Test.php', $testPHP);
|
||||||
|
|
||||||
$this->compiler = new EndingsCompiler($mode);
|
$this->compiler = new EndingsCompiler($mode);
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
$this->compiler->compile();
|
$this->compiler->compile();
|
||||||
|
|
||||||
$this->epsilon = $this->runTest();
|
$this->epsilon = $this->runTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testText($ending)
|
public function testText($ending)
|
||||||
{
|
{
|
||||||
$this->compiler->compile($ending);
|
$this->compiler->compile($ending);
|
||||||
|
|
||||||
return $this->runTest();
|
return $this->runTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function runTest()
|
public function runTest()
|
||||||
{
|
{
|
||||||
exec("phpunit compiled/Test.php", $output);
|
exec("phpunit compiled/Test.php", $output);
|
||||||
|
|
||||||
preg_match_all('#Tests: ([\d]+), Assertions: ([\d]+), Failures: ([\d]+).#is', $output[count($output)-1], $found);
|
preg_match_all('#Tests: ([\d]+), Assertions: ([\d]+), Failures: ([\d]+).#is', $output[count($output) - 1], $found);
|
||||||
$tests = (float)$found[2][0];
|
$tests = (float) $found[2][0];
|
||||||
$bad = (float)$found[3][0];
|
$bad = (float) $found[3][0];
|
||||||
|
|
||||||
//var_dump($tests);
|
return (1 - ($bad / $tests));
|
||||||
//var_dump(($bad/$tests));
|
|
||||||
// print_r($found);
|
|
||||||
//echo $bad." ".$tests;
|
|
||||||
return (1-($bad/$tests));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$good = array();
|
$direction = "sirname"; //sirname
|
||||||
$bad = array();
|
|
||||||
$tester = new BatchTester('endings3');
|
|
||||||
|
|
||||||
$epsilon = $tester->epsilon;
|
for ($num = 2; $num <= 4; $num++)
|
||||||
|
|
||||||
$endings = file('endings3.txt');
|
|
||||||
|
|
||||||
foreach ($endings as $ending)
|
|
||||||
{
|
{
|
||||||
$persent = $tester->testText(trim($ending));
|
$good = array();
|
||||||
echo trim($ending)." - ".$persent."\n";
|
$bad = array();
|
||||||
|
$mode = 'endings_'.$direction . $num;
|
||||||
if($persent==$epsilon)
|
echo "\n===========\n{$mode}\n===========\n";
|
||||||
{
|
$tester = new BatchTester($mode, $direction);
|
||||||
$good[] = $ending;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$bad[] = $ending;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "\n\n GOOD";
|
$epsilon = $tester->epsilon;
|
||||||
print_r($good);
|
|
||||||
echo "\n\n BAD";
|
$endings = file($mode . '.txt');
|
||||||
print_r($bad);
|
|
||||||
|
|
||||||
|
$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";
|
||||||
?>
|
?>
|
||||||
|
@ -17,6 +17,7 @@ class EndingsCompiler
|
|||||||
public function __construct($mode)
|
public function __construct($mode)
|
||||||
{
|
{
|
||||||
$this->template = file_get_contents($this->sourceFile);
|
$this->template = file_get_contents($this->sourceFile);
|
||||||
|
$this->mode = $mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function save()
|
private function save()
|
||||||
|
Loading…
Reference in New Issue
Block a user