БлогNot. PHP: класс для генерации пары слов "Имя+Фамилия"

PHP: класс для генерации пары слов "Имя+Фамилия"

Добавлю этот небольшой класс в коллекцию PHP-функций, которые всё ещё могут пригодиться при автоматической генерации контента и не только.

Используя 3 содержащихся в архиве небольших файла-словаря:

  • male.txt - русские мужские имена, более 600
  • female.txt - русские женские имена, более 500
  • last.txt - русские фамилии в мужской (или единственной) форме, более 1100

класс getRussianNames генерирует и возвращает с помощью метода get список из нужного количества мужских или женских имён и фамилий:

  • параметр конструктора класса __construct $n задаёт нужное количество имён-фамилий, по умолчанию 1;
  • параметры метода get - $gender (пол, равен true для мужского) и $div (разделитель элементов списка, по умолчанию тег разрыва строки + текстовый перевод строки).

Больше русских фамилий одним файлом было вот тут. Для женской формы русской фамилии отдельного словаря нет, функция getWomanForm склоняет их по простейшим правилам:

  • для -ов, -ев, -ёв, -ин, -ын в конце фамилии добавляем -а;
  • -ый, -ий в конце убираем и заменяем на -ая.

Все файлы и сам скрипт - в однобайтовой кодировке Windows-1251, для работы с Юникодом, возможно, придётся немного поправить регулярные выражения.

Также код показывает, как включённый через include или require скрипт может узнать свою текущую папку, например, если файлы скрипта находятся на сервере во вложенной папке namelist, а вызывается (и берёт дополнительные файлы-словари) он из папки, находящейся уровнем выше, как и показано в коде. Менять что-либо в коде класса в норме не придётся.

Вот исходники и результат тестового прогона:

Файл класса namelist/index.php
<?php
class getRussianNames {
 private $n, $ready, $fmale, $ffemale, $flast;
 public function __construct ($n=1) {
  $this->n = $n;
  $this->fmale=dirname(__FILE__).'/'.'male.txt'; 
  $this->ffemale=dirname(__FILE__).'/'.'female.txt'; 
  $this->flast=dirname(__FILE__).'/'.'last.txt';
  $this->ready = 
   (file_exists($this->fmale) and filesize($this->fmale)>1 and
    file_exists($this->ffemale) and filesize($this->ffemale)>1 and
    file_exists($this->flast) and filesize($this->flast)>1);
 }

 private function getWomanForm ($last) {
  $last = preg_replace ("/^(.+)(ов|ев|ёв|ин|ын)$/","$1$2а",$last);
  $last = preg_replace ("/^(.+)(ый|ий)$/","$1ая",$last);
  return $last;
 }

 public function get ($gender=true,$div="<br />\n") {
  $str = '';
  if (!$this->ready) return 'Неизвестное Ноунейменко';
  $male = file($this->fmale,FILE_IGNORE_NEW_LINES);
  $female = file($this->ffemale,FILE_IGNORE_NEW_LINES);
  $last = file($this->flast,FILE_IGNORE_NEW_LINES);
  shuffle($male);
  shuffle($female);
  shuffle($last);
  for ($i=0; $i<$this->n; $i++) {
   $str .= ($gender ? $male[$i] . ' ' . $last[$i] :
                      $female[$i] . ' ' . $this->getWomanForm($last[$i]));
   if ($i<$this->n-1) $str .= $div;
  }
  return $str;
 }
} //class getRussianNames end
?>
Файл namelist.php с вызовом класса из вложенной папки namelist
<?php
require_once('namelist/index.php');
$list = new getRussianNames(10);
echo $list->get(true);
echo "<br />\n";
echo $list->get(false);
?>
Случайный результат прогона
Памфил Бендлин
Геронтий Соболевский
Ульманас Жуков
Пимен Никифоров
Гастон Делов
Исай Лепёхин
Сергей Аношкин
Илларион Голубов
Винсент Перов
Камиль Снаткин
Анэля Харченко
Нинель Терентьева
Клеопатра Посохова
Елизавета Островская
Агния Шестакова
Ада Ласкутина
Аксинья Дмитриева
Анжела Пичугина
Таира Расторгуева
Иоанна Царёва

 Скачать файлы скрипта и словари в архиве .zip (10 Кб)

14.02.2017, 14:57 [5398 просмотров]


теги: список random язык php словарь

К этой статье пока нет комментариев, Ваш будет первым