我在MySQL数据库中的一组名称与CSV文件中的一组字符串之间执行非常简单的文本匹配。在实际比较之前,我使用一组选项运行preg_replace来规范化字符串。其中一个重要的替代品是将不规则缩写改为常规的完整单词。但我似乎无法捕捉像“公司”这样的缩写和“公司”,“公司”和“公司”可能有也可能没有尾随期。
以下是代码:
$patterns = array();
$patterns[0] = '/\s+/';
$patterns[1] = '/&/';
$patterns[2] = '/\bAssoc\.{0,1}\b/';
$patterns[3] = '/\bInc(?!\.)\b/';
$patterns[4] = '/\b(L\.?){2}P\.?/';
$patterns[5] = '/\bUniv(\s|\.)+\b/';
$patterns[6] = '/\bCorp\.?/';
$patterns[7] = '/\bAssn\.?/';
$patterns[8] = '/\bUnivesity\b/';
$patterns[9] = '/\bIntl.\b/';
$replacement = array();
$replacement[0] = ' ';
$replacement[1] = 'and';
$replacement[2] = 'Association';
$replacement[3] = 'Inc.';
$replacement[4] = '';
$replacement[5] = 'University';
$replacement[6] = 'Corporation';
$replacement[7] = 'Association';
$replacement[8] = 'University';
$replacement[9] = 'International';
$name = trim(preg_replace($patterns,$replacement,$name));
if(stristr($name,trim(preg_replace($patterns,$replacement,$org->org_name)))) return $org->org_id;
// code here
}
以下是一些不起作用的比赛(更多内容):
Haystack =>针
据我所知,它并没有抓住“公司”和“公司”,至少不一致。有什么帮助吗?
答案 0 :(得分:2)
将\b
放在缩写后面,然后是一个可选的点,如下所示:
$patterns[2] = '/\bAssoc\b\.?/';