Как я могу уменьшить количество похожих фраз, содержащихся в массиве, используя PHP? - PullRequest
0 голосов
/ 15 августа 2011

У меня есть массив, содержащий фразы (от нескольких до сотен).

Пример:

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

Программно, используя PHP, я бы хотел сократить приведенный выше список до следующегосписок, использующий что-то вроде слова «stemming» (возможны некоторые вариации, например, аппликатор адгезива и аппликация адгезива может быть трудно отличить друг от друга, так как основа одинакова):

adhesive material
material adhesive
adhesive applicator
adhesive application
adhesive application system

Каков наилучший способсделать это?

1 Ответ

1 голос
/ 15 августа 2011

Вы определяете минимальный порог, а затем используете функцию 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;
} 

У вас останется список, похожий на ваш вывод.Некоторые изменения нужно будет сделать, если вы предпочитаете, чтобы самые короткие слова были в списке, но вы поняли идею.

...