Библиотека умеет определять имя, отчество и пол пользовател по словарю в формате json/php, а также составлять обращение к нему на основе произвольной строки.
composer require kr-digital/names-detector
<?php
$namesDetector = new \KRDigital\NamesDetector\NamesDetector();
$firstNameEntry = $namesDetector->extractFirstName('Иванов Иван Иванович');
// $entry->getValue() = 'Иван', $entry->getGender()->getValue() = 'm'
$middleNameEntry = $namesDetector->extractMiddleName('Иванов Иван Иванович');
// $middleNameEntry->getValue() = 'Иванович', $middleNameEntry->getGender()->getValue() = 'm'
$title = $namesDetector->createTitle('Мария Петровна Смирнова');
// $title = 'Уважаемая Мария Петровна'
Валидный формат словаря в формате JSON:
{
"first_names": [
[
"Андрей",
"m"
],
[
"Надежда",
"f"
]
],
"middle_names": [
[
"Александрович",
"m"
],
[
"Александровна",
"f"
]
]
}
В формате php:
<?php
return [
'first_names' => [
[
'Андрей',
'm',
],
[
'Надежда',
'f',
],
],
'middle_names' => [
[
'Александрович',
'm',
],
[
'Александровна',
'f',
],
],
];
Использование своего словаря:
<?php
$customDictionaryPath = '/var/www/app/data/en_dictionary.json';
// поддерживаемые форматы: php, json
$config = new \KRDigital\NamesDetector\Config\Config($customDictionaryPath);
$namesDetector = new \KRDigital\NamesDetector\NamesDetector($config);
// <...>
<?php
$namesDetector = new \KRDigital\NamesDetector\NamesDetector();
$prefix = new \KRDigital\NamesDetector\Entry\Prefix\Prefix('Дорогой', 'Дорогая');
$namesDetector->createTitle('Иванов Иван Иванович', $prefix); // 'Дорогой Иван Иванович'