alignwebs / php-name-parser
此包的最新版本(dev-master)没有可用的许可信息。
PHP 库,用于将姓名拆分为各自的组件(名、姓等)
dev-master
2022-01-14 08:20 UTC
Requires
- php: ^5.5 || ^7.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-14 14:01:01 UTC
README
PHP 库,用于将姓名拆分为各自的组件。除了检测名和姓外,此库还尝试处理前缀、后缀、首字母缩写和复合姓氏(如“Von Fange”)。它还规范化前缀(Mister -> Mr.)并修正大小写(JOHN SMITH -> John Smith)。
安装
composer require alignwebs/php-name-parser
用法
use FullNameParser\FullNameParser;
$parser = new FullNameParser();
$parser->parse_name("Mr Anthony R Von Fange III");
结果
Array (
[nickname] =>
[salutation] => Mr.
[fname] => Anthony
[initials] => R
[lname] => Von Fange
[suffix] => III
)
算法
我们首先将全名拆分为单独的单词。然后,我们在第一个和最后一个单词上进行字典查找,以查看它们是否是常见的首部或尾部。接下来,我们取字符串的中间部分(除首部与尾部之外的所有内容),并查看除了最后一个单词之外的所有内容。然后,我们遍历这些单词,将它们连接起来,以形成名。在这个过程中,我们观察是否有复合姓氏的迹象。实际上,几乎每个复合姓氏都以16个前缀之一(Von、Van、Vere 等)开始。如果我们看到这些前缀之一,我们就跳出名的循环,并继续连接姓。我们通过检查驼峰式命名来处理大小写问题,在将每个单词的第一个字母大写的同时,将其他所有字母小写。我为句号和破折号编写了特殊情况。我们还有一些其他特殊情况,例如完全忽略括号内的单词。
查看 examples.php 以获取测试套件和不同姓名格式的解析示例。
可能的改进
- 处理 "Lname, Fname" 格式
- 将姓名解析与规范化、大小写处理分离,并使这些操作可选
- 将字典从代码中分离出来,以便更容易进行本地化
- 添加常见的姓名库,以实现性别检测等功能
相同的逻辑,不同的语言
致谢与许可
- 关于此 PHP Name Parser 库的灵感来源了解更多信息,请参阅 Josh Fraser
- 特别感谢 Josh Jones、Timothy Wood、Michael Waskosky、Eric Celeste、Josh Houghtelin 和 monitaure 对其的贡献。只要不破坏测试套件,我们总是欢迎 pull request。
- Apache 2.0 许可下发布