【问题标题】:Best approach to detect first and last name from text blob从文本 blob 中检测名字和姓氏的最佳方法
【发布时间】:2012-01-02 04:56:51
【问题描述】:

我正在开发一个对美国名片进行 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”。更糟糕的是,“Anne”和“Marie”会因为成为名字而变得更重要。现在,如果权重也根据位置来授予,则先前具有名字权重的字符串可能会获胜,从而释放这些字符串以被检测为城市。

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

【问题讨论】:

  • 我的名字更常见于姓氏;为此,您将永远需要人类
  • 哦,我的街头鬃毛是如此常见的名字 - 祝你好运:-)
  • +1 表示有勇气承担这个项目。

标签: php algorithm logic tagging tokenize


【解决方案1】:

了解例外情况会很有帮助(例如,一个名叫 Mary Sue 的小镇),但如果您的软件能够处理最可能的情况,最终用户应该会很高兴。名称可以按每个类别中出现的相对频率排序:个人名称、公司名称、城市名称。对于公司而言,员工人数可用于计算相对可能性。对于城市,人口。

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

名片格式肯定有很多,但如果你有数百张名片样本,你应该能够识别一些常见的格式规则。只需几条规则就可以大有帮助。一条规则可能是“80% 的名片在个人姓名和公司名称下方都有地址”,尽管您的名片样本可能无法真正代表所有可能的名片、所有语言等,但它是开始。即使是几个 50% 和 80% 的规则也可以简化您的任务。

你可以用一个荒谬的例子想出几个规则。

约翰·史密斯 首席运营官 Acme 公司 大街 123 号 某处,XZ 01010

更有可能 某处,XZ 01010 约翰·史密斯 Acme 公司 首席运营官 大街 123 号

这表明我们可以考虑个人和公司名称相对于邮政编码的相对 Y 位置。尽管个人姓名、职务和公司名称可能会出现在多个订单中,但邮政编码可能位于公司名称下方。邮政编码将更接近城市名称等。

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

其他可能的规则:

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

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多