2011-04-06 42 views
0

我執行從我的MySQL數據庫將一組名稱,並從一個CSV文件一組字符串之間一個非常簡單的文本匹配的文本匹配。在進行實際的比較之前,我運行帶選項數組的preg_replace來標準化字符串。重要的替代之一是將不規則縮寫改爲常規全文。但我似乎無法捕捉像「公司」這樣的縮寫。和「Inc」,「Corp.」和「公司」可能會或可能不會有後期。正火串用的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 
} 

下面是一些沒有工作的匹配(更多的驚喜):

草堆=>針

  • 「白羊座國際公司」 =>「Aries Intl。Inc.」
  • 「菲爾普斯道奇公司」=>「菲爾普斯道奇公司」
  • 「McDermott Incorporated」=>「McDermott Inc.」

至於我可以告訴大家,這不是趕上「公司」和「公司」,至少不一致。任何幫助?

+0

一些非工作的樣本輸入,有輸出,以及所需的輸出將是巨大的:) – Dogbert 2011-04-06 23:20:35

+0

也許一些單元測試將幫助清理你的不確定性 – dogmatic69 2011-04-06 23:21:50

+0

除非一個字緊隨'\ B'可能不點後匹配。而不是'{0,1}',請寫'?'。 – mario 2011-04-06 23:23:26

回答

2

\b的縮寫,後面跟着一個點是可選的,像這樣之後:

$patterns[2] = '/\bAssoc\b\.?/';