Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从OCR内容中准确提取电子邮件和单位编号字符串文本?_Php_Regex_Ocr_Google Vision - Fatal编程技术网

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

Php 如何从OCR内容中准确提取电子邮件和单位编号字符串文本?,php,regex,ocr,google-vision,Php,Regex,Ocr,Google Vision,我使用google cloud vision OCR从中提取名片电子邮件字符串文本,并使用下面的正则表达式尝试提取,但没有太多好的结果。有没有更好的建议来提高性能 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'

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

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”

运行上述代码的结果=空;期望输出:philip@algen.comsg

OCR文本2:“Allan Lim Yee Chian首席执行官阿尔法生物燃料(S)私人有限公司LHCCBNFLN FR2 a移动电话9790 3063电话6264 6696传真6260 2082 C#01-05,2 Tuas South Ave 2 Singapore 637601 tang。Eric@alphabiofuels.sgwww.alphabiofeels.sg“


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

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

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';
}

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

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结果“XXXXXXXX”。micheal@amd.comxxxx“出柜为”micheal@amd.com“真正的结果可能是”埃里克梅。micheal@amd.com“我可以移除中间的所有空间,但这样做不会很好?正则表达式比较新,或者我的正则表达式中有缺陷,看起来可以正常工作。如果需要捕获多个电子邮件地址,请添加/g@Vivian您可能应该添加示例,说明您得到了什么样的OCR结果,哪些结果没有被正确提取,这样人们就可以建议改进您的正则表达式。包括应该有效的积极的和不应该有效的消极的我只想从OCR字符串文本中捕获一个从名片中捕获的电子邮件地址你说没有多少好结果是什么意思?某些电子邮件是否不匹配?还是太慢了?结果不一致,例如OCR结果“XXXXXXXX”。micheal@amd.comxxxx“出柜为”micheal@amd.com“真正的结果可能是”埃里克梅。micheal@amd.com“我可以移除中间的所有空间,但这样做不会很好?正则表达式比较新,或者我的正则表达式中有缺陷,看起来可以正常工作。如果需要捕获多个电子邮件地址,请添加/g@Vivian您可能应该添加示例,说明您得到了什么样的OCR结果,哪些结果没有被正确提取,这样人们就可以建议改进您的正则表达式。包括应该有效的积极的和不应该有效的消极的。我只想从OCR字符串文本中捕获从名片中捕获的单个电子邮件地址