2011-08-15 10 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

関連する問題