2011-08-15 4 views
0

구문이 포함 된 배열이 있습니다 (몇 백 ~ 수백 개).PHP를 사용하여 배열에 포함 된 유사한 구문의 양을 줄이려면 어떻게해야합니까?

예 :

adhesive materials 
adhesive material 
material adhesive 
adhesive applicator 
adhesive applicators 
adhesive applications 
adhesive application 
adhesives applications 
adhesive application systems 
adhesive application system 

프로그래밍은 PHP를 사용하여, 나는 (일부 변화가, 허용 예를 들어, 접착제 도포 및 접착제 적용 할 수있다 형태소 단어 같은 것을 사용하여 다음 목록에 위의 목록을 줄이고 싶습니다. 줄기가 동일하기 때문에 서로 구별하기 어려워야합니다.) :

adhesive material 
material adhesive 
adhesive applicator 
adhesive application 
adhesive application system 

가장 좋은 방법은 무엇입니까?

답변

1

최소 임계 값을 결정한 다음 levenshtein 함수를 사용하여 단어의 닫는 정도를 결정할 수 있습니다. 당신은 당신의 출력과 유사한 목록이 남아있을 것

$origs = array(); 
// assuming your example is an array already. 
foreach($setList as $set) 
{ 
    $pieces = explode(' ', $set); 
    $add = true; 
    foreach($origs as $keySet) 
    { 
     if(levenshtein($pieces[ 0 ], $keySet[ 0 ]) < 3 || 
      levenshtein($pieces[ 1 ], $keySet[ 0 ]) < 3) 
     { 
      $add = false; 
      break; 
     } 
    } 

    if($add) $origs[] = $pieces; 
} 

: 당신이 더 많거나 적은이 일 것 같은

는 것 같습니다. 가장 짧은 단어를 목록에 넣는 것을 선호하지만 아이디어를 얻는다면 약간의 수정이 필요합니다.

+0

단어를 개별 단어로 분해 할 필요가 없다는 점을 제외하면이 방법은 완벽하게 작동했습니다. 왜 그렇게했는지 나는 잘 모르겠다. 나는'lavenshtein ($ set, $ keySet) <3'을 사용했습니다. 어쩌면 당신의 버전은 중복되는 어구를 제거 할 것입니다 (나중에 그렇게 할 수도 있습니다). –

+0

@T. Brian Jones 전화할만한 독특한 단어가있는 것 같습니다. 당신이 폭발 할 필요가 없다니 다행! – cwallenpoole

관련 문제