分组一组相似的单词

时间:2012-10-26 06:39:06

标签: php

我有一个包含大量单词的数组。 E.g:

array( developer,develop,development,design,designer,designing )

我希望能够将这些单词与他们相似的单词组合在一起,这样我就会得到这样的结论:

array(
   array( develop, developer, development ),
   array( design, designer, designing ),
);

在PHP中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

您可以使用metaphone()轻松完成:

$result = array();
foreach ($array as $word) {
    $result[metaphone($word, 2)][] = $word;
}

print_r($result);会显示:

Array
(
    [TF] => Array
        (
            [0] => developer
            [1] => develop
            [2] => development
        )

    [TS] => Array
        (
            [0] => design
            [1] => designer
            [2] => designing
        )
)

答案 1 :(得分:3)

我想到了一种方式

$array = array( 'developer','develop','development','design','designer','designing' );

function matchWords(array $in,$pad='4')
{
    $ret = array();
    foreach ($in as $v) {
        $sub = substr($v, 0, $pad);
        if (!isset($ret[$sub])) {
            $ret[$sub] = array();
        }
        $ret[$sub][] = $v;
    }

    return array_values($ret);
}

print_r(matchWords($array,4));

Array
(
    [0] => Array
        (
            [0] => developer
            [1] => develop
            [2] => development
        )

    [1] => Array
        (
            [0] => design
            [1] => designer
            [2] => designing
        )
)

这匹配数组值的$pad首字母,并在其上创建一个键。

答案 2 :(得分:2)

您可能希望使用诸如“Porter Stemming”之类的技术提取每个单词的词干,以识别相似的单词,然后根据这些词汇构建您的数组。您可以找到Porter Stemmer的here

的PHP实现
相关问题