Php 对一组相似的词进行分组

Php 对一组相似的词进行分组,php,Php,我有一个包含一串单词的数组。例如: array( developer,develop,development,design,designer,designing ) 我希望能够将这些单词与其相似的单词组合在一起,这样我可以得到如下结果: array( array( develop, developer, development ), array( design, designer, designing ), ); 在PHP中,最好的方法是什么?您可能希望使用诸如“波特词干分析”之

我有一个包含一串单词的数组。例如:

array( developer,develop,development,design,designer,designing )
我希望能够将这些单词与其相似的单词组合在一起,这样我可以得到如下结果:

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

在PHP中,最好的方法是什么?

您可能希望使用诸如“波特词干分析”之类的技术提取每个单词的词干,以识别相似的单词,然后基于这些词干构建数组。您可以找到Porter词干分析器的PHP实现

我想到了一种方法

$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
首字母匹配,并在其上创建一个键。

您可以使用以下方法轻松完成此操作:

print\r($result)将显示:

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

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

我很难决定接受你的回答还是接受jackflash的回答。最后,我实际使用了提供的一个jackflash,所以我觉得我需要勾选它作为正确答案。然而,如果我能接受两个答案,我会的。我赞扬你对我的问题的迅速回答!谢谢在提出这个问题之前,我曾考虑过阻止,但可能是性能降低(我知道,过早优化是万恶之源)。无论如何谢谢你!PHP API(如果你可以这么说的话)一直让我感到惊讶。语言中包含的有用的“东西”数量惊人。是的,几乎所有东西都有一个函数。事实上,这是惊人的:)
Array
(
    [TF] => Array
        (
            [0] => developer
            [1] => develop
            [2] => development
        )

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