编程语言
首页 > 编程语言> > php – 从文本blob中检测名字和姓氏的最佳方法

php – 从文本blob中检测名字和姓氏的最佳方法

作者:互联网

我正在制作一个在美国名片上进行OCR的程序,并尝试返回名字,姓氏等信息.挑战是如何做到这一点.

到目前为止,我已经构建了以下数据文件:

first_names.txt  (Contains 23k+ first names)
last_names.txt (Contains 86k+ last names)
job_title.txt (Contains 500+ job titles)
us_cities.txt (Contains 10k+ us cities)
states_full.txt (Contains full names of all US states)
states_abv.txt  (Contains all US state abbreviations)

我的目标是让我用空格标记OCR数据,并尝试根据它作为特定类型数据的可能性,给每个字符串赋予“权重”.

例如,文本blob中较早的字符串更可能是名称,公司或标题.同样,如果在first_names.txt或last_names.txt中找到一个字符串,那么它将对第一个/最后一个名称有更多权重.

这种方法在理论上听起来不错,但我想知道从编程角度来看它的最佳方法. (PHP,不是那种语言很重要)棘手的部分是一些令牌的权重与其他令牌相关.例如:

>如果令牌看起来可能是名字,则下一个令牌可能是姓氏.
>有些令牌彼此相关,但如果事情被空格爆炸,我不确定如何将它们联系起来.例如,“Anne Marie,FL”将被视为三个代币 – “Anne”,“Marie”和“FL”.更糟糕的是,“安妮”和“玛丽”将成为第一个名字.现在,如果还根据位置授予了权重,则先前具有名字权重的字符串可以获胜,从而将这些字符串释放为城市.

我知道那里有很多聪明人,所以也许有人对这个有一个想法!

解决方法:

知道异常(例如,一个名为Mary Sue的小镇)是有帮助的,但是如果您的软件能够处理最可能的情况,最终用户应该感到高兴.名称可以按每个类别中相对出现频率进行排序:个人姓名,公司名称,城市名称.对于公司,员工人数可用于计算相对可能性.对于城市,人口.

您是否已经有规则来检查包含每个令牌的行的相对位置?

肯定有不少名片格式,但如果你有几百个样本名片,你应该能够识别一些常见的格式规则.只有一些规则可能会有很大帮助.一条规则可能是“80%的所有卡片都有个人姓名和公司名称下面的地址”,虽然您的名片样本可能无法真正代表所有可能的名片,所有语言等,但它是一个开始.即使是几个50%和80%的规则也可以简化您的任务.

你可以用一个荒谬的例子来思考几个规则.

John Smith
Chief Operating Officer
Acme Inc.
123 Main Street
Somewhere, XZ 01010

比…更有可能

Somewhere, XZ
01010
John Smith
Acme Inc.
Chief Operating Officer
123 Main Street

这表明我们可以考虑个人和公司名称相对于邮政编码的相对Y位置.虽然个人姓名,职位和公司名称可能会遵循多个订单中的任何一个,但邮政编码可能位于公司名称下方.邮政编码将更接近城市名称等.

虽然像“萨曼莎”这样的词可能是个人姓名,街道名称或公司名称的一部分,但它很可能是一个人名.您应该能够找到列出出生名称的相对频率,名为“Samantha”的城镇人口以及名称为“Samantha”的注册公司数量的数据库.即使是部分数据库也有助于建立一些合理的可能性猜测.

其他可能的规则:

>字母和数字混合在一行的末尾(对于从左到右的文本)或其自己的行上的5到7位可能是邮政编码.
>“Inc”,“Ltd”,“Corp”和其他缩写应该增加一条线被识别为公司名称的可能性
>个人姓名可能位于标题上方. (也许85% – 95%的时间?)
>电话号码遵循数量有限的模式,并且往往包括邮政编码中找不到的字符:“(”“)”“.”
>网站遵循常见模式.即使有人的合法名称是“CarolGreen.com”,如果她的名字被认可为网站,她也不会感到惊讶.
>“@”符号几乎可以肯定是电子邮件地址的一部分.假设电子邮件地址完全出现,电子邮件地址可能位于人名下方的某一行.
>某些信息可能不存在.该卡可能未列出网站.可能有电话号码,但不是街道地址.该人可能没有头衔.个人名片可能没有公司名称.最有可能的是,至少有一行是个人名称.

标签:php,algorithm,logic,tokenize,tagging
来源: https://codeday.me/bug/20190630/1336371.html