我正在尝试从文本文件中提取人名,我正在逐行阅读这些文件。按照文件的结构方式,名字和姓氏应该几乎总是在同一行上,并且应该在文件的前几行内。目前,我在大约2300个名字的数组中搜索第一个名字,然后假设下面的单词是姓氏。我目前的方法的问题是它不能正确地匹配名称,因此可能会错误地识别文件中的另一个单词作为名称。例如,我的名字是Daniel,但该函数跳过我的名字,并将弗吉尼亚(文件中后面的一个单词)识别为我的名字。我做错了什么吗?有没有更好的方法呢?我是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
}
}
}下面是一个到dictionary-first-names.php的粘贴库链接,因为它很长:https://pastebin.com/cRFkR4fh
发布于 2019-09-25 17:02:31
您可以使用命名实体识别(NER)方法,spacy和NLP Core是用于此目的的两个最好的库。但是你应该在python中做到这一点。
https://stackoverflow.com/questions/49269182
复制相似问题