识别文本字符串中人物姓氏的最佳方式

时间:2018-03-14 03:12:15

标签: php

我试图从文本文件中提取一个人的名字,我正在逐行阅读。通过文件的结构方式,名字和姓氏几乎应该始终位于同一行,并且位于文件的前几行内。目前,我在〜2300个名称的数组中搜索名字,然后假设下面的单词是姓氏。我当前的方法的问题是它没有正确匹配名称,因此可能错误地将文件中的不同单词识别为名称。例如,我的名字是丹尼尔,但是该功能会跳过我的名字并识别弗吉尼亚(文件后面的一个词)作为我的名字。我做错了什么,有更好的方法吗?我对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的pastebin链接,因为它很长:https://pastebin.com/cRFkR4fh

1 个答案:

答案 0 :(得分:0)

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