2011-04-06 4 views
0

내 MySQL 데이터베이스의 이름 집합과 CSV 파일의 문자열 집합 사이에 매우 간단한 텍스트 일치를 수행합니다. 실제로 비교하기 전에 문자열 정규화 옵션 배열로 preg_replace를 실행합니다. 중요한 대체품 중 하나는 불규칙한 약어를 규칙적인 전체 단어로 바꾸는 것입니다. 그러나 나는 "Inc."와 같은 약어를 붙잡을 수는 없다. 및 "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 
} 

이 (올 더) 작동하지 않는 일부 일치 있습니다 :

건초 더미 => 니들

  • "양자리 국제 여기

    코드입니다 Inc. " => "Aries Intl. Inc."
  • "Phelps Dodge Corporation"=> "Phelps Dodge Corp."
  • "McDermott Incorporated"=> "McDermott Inc."

내가 알 수있는 한, "Inc" and "Corp.", 최소한 일관되게. 어떤 도움이 필요합니까?

+0

일부 출력, 샘플 입력 작업 비, 원하는 출력이 될 것이다 큰 :) – Dogbert

+0

어쩌면 일부 단위 테스트를 불확실성을 해결하는 데 도움이됩니다. – dogmatic69

+0

단어가 바로 뒤 따르지 않으면 '\ b'가 점 뒤에 일치하지 않을 수 있습니다. 그리고'{0,1} '대신에'?'를 써주세요. – mario

답변

2

\b 우측과 같이 선택 사항입니다 뒤에 도트 약어 다음 넣어 :

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