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 に答える