【发布时间】:2018-03-14 03:12:15
【问题描述】:
我正在尝试从文本文件中提取一个人的姓名,我正在逐行阅读。使用文件的结构方式,名字和姓氏几乎应该总是在同一行,并且将在文件的前几行中。目前,我在约 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
}
}
}
这是一个指向 dictionary-first-names.php 的 pastebin 链接,因为它很长:https://pastebin.com/cRFkR4fh
【问题讨论】:
-
我认为寻找第一个大写字母更容易。
-
@toor 文件中的任何单词都可以大写,这样就不好用了
-
这篇绝对值得一读~kalzumeus.com/2010/06/17/…
-
@Daniel 当然可以,但是两个大写的单词一起可以帮助您查找姓名。
-
@toor 也许,但如果这些词属于商店的名称(例如 Jersey Mike's),那将会被挫败。
标签: php