我有一个包含一堆单词的数组。例如:
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 中执行此操作的最佳方法是什么?
您可以使用以下方法轻松完成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
)
)
一种方法在我脑海中浮现
$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
数组值的第一个字母并在其上创建一个键。
您可能希望使用诸如“Porter Stemming”之类的技术来提取每个单词的词干以识别相似的词,然后根据这些词干构建您的数组。您可以在此处找到 Porter Stemmer 的 PHP 实现