我有一个包含短语(几个到几百个)的数组。
示例:
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
这样做的最佳方式是什么?
答案 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;
}
您将留下类似于您的输出的列表。如果您偏好最短的单词在列表中,但是您明白了,那么需要进行一些修改。