如何使用PHP减少数组中包含的类似短语的数量?

时间:2011-08-15 03:41:02

标签: php stemming

我有一个包含短语(几个到几百个)的数组。

示例:

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 个答案:

答案 0 :(得分: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;
} 

您将留下类似于您的输出的列表。如果您偏好最短的单词在列表中,但是您明白了,那么需要进行一些修改。