2

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

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

我希望能够将这些单词与其相似的单词组合在一起,所以我会得到这样的结果:

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

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

4

3 回答 3

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
        )
)
于 2012-10-26T07:03:16.353 回答
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数组值的第一个字母并在其上创建一个键。

于 2012-10-26T06:47:27.040 回答
2

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

于 2012-10-26T06:43:04.937 回答