joshfraser / php-name-parser
该软件包最新版本(dev-master)没有可用的许可信息。
PHP 库,用于将姓名拆分成各自的组成部分(首字母、姓氏等)
dev-master
2020-12-09 15:05 UTC
Requires
- php: ^5.5 || ^7.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-09 23:08:21 UTC
README
PHP 库,用于将姓名拆分成各自的组成部分。除了检测首字母和姓氏外,此库还尝试处理前缀、后缀、首字母和复合姓氏,如 "Von Fange"。它还规范化前缀(Mister -> Mr.)并修复大小写(JOHN SMITH -> John Smith)。
用法
include("parser.php");
$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 对其贡献。只要不破坏测试套件,我们总是欢迎拉取请求。
- 在 Apache 2.0 许可证下发布