Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 识别人的最佳方式';s在文本字符串中的名字和姓氏_Php - Fatal编程技术网

Php 识别人的最佳方式';s在文本字符串中的名字和姓氏

Php 识别人的最佳方式';s在文本字符串中的名字和姓氏,php,Php,我试图从文本文件中提取一个人的名字,我逐行阅读。按照文件的结构,名字和姓氏几乎应该总是在同一行,并且在文件的前几行之内。目前,我在大约2300个名字的数组中搜索第一个名字,然后假设下面的单词是姓氏。我目前的方法存在的问题是,它与名称不正确匹配,因此可能会错误地将文件中的另一个单词识别为名称。例如,我的名字是Daniel,但函数跳过我的名字,并将Virginia(文件后面的一个单词)识别为我的名字。我做错了什么吗?有没有更好的方法?我对PHP非常陌生,所以很可能我犯了一个愚蠢的错误 澄清:该文件是

我试图从文本文件中提取一个人的名字,我逐行阅读。按照文件的结构,名字和姓氏几乎应该总是在同一行,并且在文件的前几行之内。目前,我在大约2300个名字的数组中搜索第一个名字,然后假设下面的单词是姓氏。我目前的方法存在的问题是,它与名称不正确匹配,因此可能会错误地将文件中的另一个单词识别为名称。例如,我的名字是Daniel,但函数跳过我的名字,并将Virginia(文件后面的一个单词)识别为我的名字。我做错了什么吗?有没有更好的方法?我对PHP非常陌生,所以很可能我犯了一个愚蠢的错误

澄清:该文件是一个原始文本文件,包含通过OCR从简历图片中提取的数据。在我的项目中,我假设总是有一个名和姓(中间没有),并且两者都在同一行

$name = $this->search($line);
if (count($name) > 0 && empty($fname) && empty($lname)){
    $fname = $name[0];
    $lname = $name[1];
}

function search($str){ //$str is the current file line being read
        require "utils".DIRECTORY_SEPARATOR."dictionary-first-names.php";
        $arr = explode(" ", $str);

        for ($i = 0; $i < count($arr); $i++){
            if (in_array(mb_strtolower($arr[$i]), $dict)){
                return array($arr[$i], $arr[$i+1]); //shouldn't have array out of bounds as first & last name should be on the same line
            }
        }
    }
$name=$this->search($line);
如果(计数($name)>0&&empty($fname)&&empty($lname)){
$fname=$name[0];
$lname=$name[1];
}
函数搜索($str){/$str是正在读取的当前文件行
需要“utils.DIRECTORY\u SEPARATOR.dictionary first names.php”;
$arr=爆炸(“,$str”);
对于($i=0;$i

这里有一个指向dictionary-first-names.php的pastebin链接,因为它很长:

您可以使用命名实体识别(NER)方法,spacy和NLP Core是用于此目的的两个最佳库。但是你应该在python中这样做。

我认为查找首字母大写更容易。@toor文件中的任何单词都可以大写,所以这不太好。这当然值得一读~@Daniel,但两个大写的单词一起可以帮你找到名字和姓氏。@toor可能,但是,如果这些词属于某个商店的名称(如Jersey Mike's),那么这一点就不会被接受。