如何从 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 内容中准确提取电子邮件和单元号字符串文本?的主要内容,如果未能解决你的问题,请参考以下文章