0

フレーズ(数から数百)を含む配列があります。

例:

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

これを行うための最良の方法は何ですか?

4

1 に答える 1

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;
} 

出力と同様のリストが残ります。最短の単語をリストに含めることを希望する場合は、いくつかの変更を加える必要がありますが、そのアイデアは得られます。

于 2011-08-15T03:51:41.977 に答える