如何从 OCR 内容中准确提取电子邮件和单元号字符串文本?

Posted

技术标签:

【中文标题】如何从 OCR 内容中准确提取电子邮件和单元号字符串文本?【英文标题】:How to accurately extract the email and unit number string text from OCR content? 【发布时间】:2017-10-06 06:29:48 【问题描述】:

我使用 google cloud vision OCR 从here 中提取名片电子邮件字符串文本,并使用下面的正则表达式尝试提取,但效果不佳。有没有更好的建议来提高性能?

function extract_emails($str)
    // This regular expression extracts all emails from a string:
    $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]2,4)+/i';
    preg_match_all($regexp, $str, $m);

    return isset($m[0]) ? $m[0] : array();


$Email = extract_emails($gcv_response);

if (!empty($Email))

    $Email = reset($Email); 

else

    $Email = 'NULL';

OCR 文本 1:“ALGEN MARINE PTE LTD 消防和安全工程专家 Philip Cheng 助理销售经理 172 Tuas South Avenue 2, West Point Bizhub, Singapore 637191 电子邮件:philip @algen.comsg 网站:www.algen.comsg电话:(65) 6898 2292 传真:(65) 6898 2202 (65) 6898 2813 惠普:(65) 9168 9799"

运行上述代码的结果 = NULL;所需输出:philip@algen.comsg

OCR 文本 2:“Allan Lim Yee Cian 首席执行官 Alpha Biofuels (S) Pte Ltd LHCCBNFLN FR2 移动电话 9790 3063 电话 6264 6696 传真 6260 2082 C#01-05, 2 Tuas South Ave 2 Singapore 637601 tang. Steve . Eric@alphabiofuels.sg www.alphabiofuels.sg"

运行上述代码的结果 = NULL;期望输出:tang.Steve.Eric@alphabiofuels.sg;

【问题讨论】:

你说的没有太多好的结果是什么意思?某些电子邮件不匹配吗?还是太慢了? 结果不一致,例如 OCR 结果“xxxxxxxxx ericmay.micheal@amd.com xxxx”显示为“micheal@amd.com”,而实际结果可能是“ericmay.micheal@amd.com”。 com" 我可以删除中间的所有空间,但这不会很好用吗?正则表达式比较新,或者我的正则表达式有缺陷 似乎工作正常。如果您需要捕获多个电子邮件地址,请添加 /g @Vivian 您可能应该添加示例,说明您获得的 OCR 结果以及未正确提取的结果,以便人们可以建议改进您的正则表达式。包括应该起作用的积极因素和不应该起作用的消极因素 我只想从 OCR 字符串文本中捕获从名片中捕获的单个电子邮件地址 【参考方案1】:

您面临的两个问题是您没有将代码转换为小写,其次是您没有涵盖代码中出现空格的情况。我试图涵盖这些,但您必须根据您的要求进行修改。

function extract_emails($str)
    // This regular expression extracts all emails from a string:
    $regexp = '/(([a-z0-9_\-])+\.\\s?)?/([a-z0-9_\.\-])+\\s?\@(([a-z0-9\-])+\.)+([a-z0-9]2,4)+/i';
    //$regexp = '/(([a-zA-Z0-9_\-])+\.\\s?)?/([a-zA-Z0-9_\.\-])+\\s?\@(([a-z0-9\-])+\.)+([a-z0-9]2,4)+/i';//for using uppercase letters.

preg_match_all($regexp, strtolower($str), $m);

    return isset($m[0]) ? $m[0] : array();


$Email = extract_emails($gcv_response);

if (!empty($Email))

    $Email = reset($Email); 

else

    $Email = 'NULL';

【讨论】:

以上是关于如何从 OCR 内容中准确提取电子邮件和单元号字符串文本?的主要内容,如果未能解决你的问题,请参考以下文章

提高 Python Tesseract OCR 的准确性

如何使用不同颜色和字体的文本改进图像的 OCR?

名片解析器。如何从名片识别文本中提取相关信息?

Pytesseract 提高 OCR 准确性

Excel中如何提取某个单元格从第N个字符开始的内容?

Tesseract OCR:解析表格单元格