kr-digital/names-detector

Detect name and gender from a given string

2.1.0 2020-05-08 16:40 UTC

This package is auto-updated.

Last update: 2024-03-30 00:37:36 UTC


README

Code Coverage Scrutinizer Code Quality Build Status Packagist

Библиотека умеет определять имя, отчество и пол пользовател по словарю в формате 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); // 'Дорогой Иван Иванович'